merge GTK3 branch in default
This commit is contained in:
commit
0d869cb192
167 changed files with 19080 additions and 16489 deletions
|
@ -14,8 +14,9 @@
|
||||||
|
|
||||||
<h2>Runtime Requirements</h2>
|
<h2>Runtime Requirements</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>python2.5 or higher</li>
|
<li>python2.7 or higher</li>
|
||||||
<li>pygtk2.22 or higher</li>
|
<li>python-gi</li>
|
||||||
|
<li>gir1.2-gtk-3.0</li>
|
||||||
<li>python-nbxmpp</li>
|
<li>python-nbxmpp</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@
|
||||||
<li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li>
|
<li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li>
|
||||||
<li>dnsutils (or whatever package provides the nslookup binary) for SRV support</li>
|
<li>dnsutils (or whatever package provides the nslookup binary) for SRV support</li>
|
||||||
<li>gtkspell and aspell-LANG where lang is your locale eg. en, fr etc</li>
|
<li>gtkspell and aspell-LANG where lang is your locale eg. en, fr etc</li>
|
||||||
<li>gnome-python-desktop (for GnomeKeyring support as password storage)</li>
|
<li>gir1.2-gnomekeyring-1.0 for GnomeKeyring support as password storage</li>
|
||||||
<li>kwalletcli (for support of KDE Wallet as password storage)</li>
|
<li>kwalletcli (for support of KDE Wallet as password storage)</li>
|
||||||
<li>notification-daemon or notify-python (and D-Bus) to get cooler popups</li>
|
<li>notification-daemon or notify-python (and D-Bus) to get cooler popups</li>
|
||||||
<li>D-Bus running to have gajim-remote working. Some distributions split dbus-x11, which is needed for dbus to work with Gajim. Version >= 0.80 is required.</li>
|
<li>D-Bus running to have gajim-remote working. Some distributions split dbus-x11, which is needed for dbus to work with Gajim. Version >= 0.80 is required.</li>
|
||||||
|
|
|
@ -22,6 +22,9 @@ rename exe.win32-2.7 bin
|
||||||
copy ..\LIBEAY32.dll bin
|
copy ..\LIBEAY32.dll bin
|
||||||
copy ..\SSLEAY32.dll bin
|
copy ..\SSLEAY32.dll bin
|
||||||
|
|
||||||
|
REM for snarl plugin
|
||||||
|
xcopy ..\win32com bin\win32com /e /i
|
||||||
|
|
||||||
mkdir bin\gtk
|
mkdir bin\gtk
|
||||||
cd ../src/gtk
|
cd ../src/gtk
|
||||||
hg archive ..\..\gajim_built\bin\gtk
|
hg archive ..\..\gajim_built\bin\gtk
|
||||||
|
|
|
@ -12,7 +12,9 @@ soundsdir = $(pkgdatadir)/data/sounds
|
||||||
sounds_DATA = $(srcdir)/sounds/*.wav
|
sounds_DATA = $(srcdir)/sounds/*.wav
|
||||||
|
|
||||||
otherdir = $(pkgdatadir)/data/other
|
otherdir = $(pkgdatadir)/data/other
|
||||||
other_DATA = other/servers.xml other/cacerts.pem
|
other_DATA = other/servers.xml other/dh4096.pem
|
||||||
|
# other/cacert.pem is used only on Windows. On Unix platforms
|
||||||
|
# use CA certificates installed in /etc/ssl/certs
|
||||||
|
|
||||||
man_MANS = gajim.1 gajim-remote.1 gajim-history-manager.1
|
man_MANS = gajim.1 gajim-remote.1 gajim-history-manager.1
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="join_group_chat_menuitem">
|
<object class="GtkImageMenuItem" id="join_group_chat_menuitem">
|
||||||
<property name="label" translatable="yes">Join _Group Chat...</property>
|
<property name="label" translatable="yes">Join _Group Chat</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image4</property>
|
<property name="image">image4</property>
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="edit_account_menuitem">
|
<object class="GtkImageMenuItem" id="edit_account_menuitem">
|
||||||
<property name="label" translatable="yes">_Modify Account</property>
|
<property name="label" translatable="yes">_Modify Account...</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image8</property>
|
<property name="image">image8</property>
|
||||||
|
|
|
@ -1,31 +1,54 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-preferences</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-apply</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkListStore" id="liststore1">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name item -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
<data>
|
||||||
|
<row>
|
||||||
|
<col id="0" translatable="yes">None</col>
|
||||||
|
</row>
|
||||||
|
</data>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="account_creation_wizard_window">
|
<object class="GtkWindow" id="account_creation_wizard_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">12</property>
|
<property name="border_width">12</property>
|
||||||
<property name="title" translatable="yes">Gajim: Account Creation Wizard</property>
|
<property name="title" translatable="yes">Gajim: Account Creation Wizard</property>
|
||||||
<property name="resizable">False</property>
|
<property name="resizable">False</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_wizard_window_destroy"/>
|
<signal name="destroy" handler="on_wizard_window_destroy" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox77">
|
<object class="GtkVBox" id="vbox77">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkNotebook" id="notebook">
|
<object class="GtkNotebook" id="notebook">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="show_tabs">False</property>
|
<property name="show_tabs">False</property>
|
||||||
<property name="show_border">False</property>
|
<property name="show_border">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox78">
|
<object class="GtkVBox" id="vbox78">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label256">
|
<object class="GtkLabel" id="label256">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">You need to have an account in order to connect
|
<property name="label" translatable="yes">You need to have an account in order to connect
|
||||||
to the Jabber network.</property>
|
to the Jabber network.</property>
|
||||||
|
@ -39,18 +62,20 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame" id="frame33">
|
<object class="GtkFrame" id="frame33">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label_xalign">0</property>
|
<property name="label_xalign">0</property>
|
||||||
<property name="shadow_type">none</property>
|
<property name="shadow_type">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment68">
|
<object class="GtkAlignment" id="alignment68">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="top_padding">5</property>
|
<property name="top_padding">5</property>
|
||||||
<property name="left_padding">12</property>
|
<property name="left_padding">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox83">
|
<object class="GtkVBox" id="vbox83">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkRadioButton" id="use_existing_account_radiobutton">
|
<object class="GtkRadioButton" id="use_existing_account_radiobutton">
|
||||||
|
@ -59,6 +84,7 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -74,6 +100,7 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<property name="group">use_existing_account_radiobutton</property>
|
<property name="group">use_existing_account_radiobutton</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -90,6 +117,7 @@ to the Jabber network.</property>
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkLabel" id="label269">
|
<object class="GtkLabel" id="label269">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes"><b>Please choose one of the options below:</b></property>
|
<property name="label" translatable="yes"><b>Please choose one of the options below:</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -106,6 +134,7 @@ to the Jabber network.</property>
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label259">
|
<object class="GtkLabel" id="label259">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="tab_fill">False</property>
|
<property name="tab_fill">False</property>
|
||||||
|
@ -114,12 +143,13 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="register_vbox">
|
<object class="GtkVBox" id="register_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label270">
|
<object class="GtkLabel" id="label270">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><b>Please fill in the data for your existing account</b></property>
|
<property name="label" translatable="yes"><b>Please fill in the data for your existing account</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
|
@ -133,25 +163,30 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="table27">
|
<object class="GtkTable" id="table27">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="n_rows">3</property>
|
<property name="n_rows">3</property>
|
||||||
<property name="n_columns">4</property>
|
<property name="n_columns">4</property>
|
||||||
<property name="column_spacing">12</property>
|
<property name="column_spacing">12</property>
|
||||||
<property name="row_spacing">6</property>
|
<property name="row_spacing">6</property>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="username_entry">
|
<object class="GtkEntry" id="username_entry">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<signal name="key_press_event" handler="on_username_entry_key_press_event"/>
|
<signal name="key-press-event" handler="on_username_entry_key_press_event" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label263">
|
<object class="GtkLabel" id="label263">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Password:</property>
|
<property name="label" translatable="yes">_Password:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -161,7 +196,7 @@ to the Jabber network.</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -173,9 +208,10 @@ to the Jabber network.</property>
|
||||||
<property name="tooltip_text" translatable="yes">If checked, Gajim will remember the password for this account</property>
|
<property name="tooltip_text" translatable="yes">If checked, Gajim will remember the password for this account</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="focus_on_click">False</property>
|
<property name="focus_on_click">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_save_password_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_save_password_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
|
@ -183,7 +219,7 @@ to the Jabber network.</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -198,12 +234,13 @@ to the Jabber network.</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label262">
|
<object class="GtkLabel" id="label262">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Jabber ID:</property>
|
<property name="label" translatable="yes">_Jabber ID:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -211,30 +248,20 @@ to the Jabber network.</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label1">
|
<object class="GtkLabel" id="label1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label">@</property>
|
<property name="label">@</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkComboBoxEntry" id="server_comboboxentry">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="left_attach">3</property>
|
|
||||||
<property name="right_attach">4</property>
|
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
<property name="y_options">GTK_FILL</property>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -244,8 +271,9 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_anonymous_checkbutton1_toggled"/>
|
<signal name="toggled" handler="on_anonymous_checkbutton1_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -260,6 +288,7 @@ to the Jabber network.</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -271,6 +300,7 @@ to the Jabber network.</property>
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label261">
|
<object class="GtkLabel" id="label261">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
|
@ -280,12 +310,13 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox105">
|
<object class="GtkVBox" id="vbox105">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label368">
|
<object class="GtkLabel" id="label368">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><b>Please select a server</b></property>
|
<property name="label" translatable="yes"><b>Please select a server</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
|
@ -299,10 +330,12 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2997">
|
<object class="GtkHBox" id="hbox2997">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label369">
|
<object class="GtkLabel" id="label369">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Server:</property>
|
<property name="label" translatable="yes">_Server:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -313,14 +346,6 @@ to the Jabber network.</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkComboBoxEntry" id="server_comboboxentry1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -335,10 +360,12 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -349,6 +376,7 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="table32">
|
<object class="GtkTable" id="table32">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
<property name="n_rows">3</property>
|
<property name="n_rows">3</property>
|
||||||
<property name="n_columns">3</property>
|
<property name="n_columns">3</property>
|
||||||
|
@ -357,18 +385,20 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label381">
|
<object class="GtkLabel" id="label381">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Prox_y:</property>
|
<property name="label" translatable="yes">Prox_y:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="proxies_combobox">
|
<object class="GtkComboBox" id="proxies_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="model">liststore1</property>
|
<property name="model">liststore1</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||||
|
@ -390,13 +420,13 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_manage_proxies_button_clicked"/>
|
<signal name="clicked" handler="on_manage_proxies_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -406,24 +436,27 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_custom_host_port_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_custom_host_port_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="custom_host_hbox">
|
<object class="GtkHBox" id="custom_host_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label380">
|
<object class="GtkLabel" id="label380">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Hostname:</property>
|
<property name="label" translatable="yes">_Hostname:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -441,12 +474,15 @@ to the Jabber network.</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label379">
|
<object class="GtkLabel" id="label379">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Port:</property>
|
<property name="label" translatable="yes">_Port:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -467,6 +503,7 @@ to the Jabber network.</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -484,12 +521,15 @@ to the Jabber network.</property>
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkLabel" id="label378">
|
<object class="GtkLabel" id="label378">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Advanced</property>
|
<property name="label" translatable="yes">_Advanced</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -501,6 +541,7 @@ to the Jabber network.</property>
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label367">
|
<object class="GtkLabel" id="label367">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
|
@ -510,34 +551,41 @@ to the Jabber network.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="ssl_vbox">
|
<object class="GtkVBox" id="ssl_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image1">
|
<object class="GtkImage" id="image1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="stock">gtk-dialog-warning</property>
|
<property name="stock">gtk-dialog-warning</property>
|
||||||
<property name="icon-size">5</property>
|
<property name="icon-size">5</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="ssl_label">
|
<object class="GtkLabel" id="ssl_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">False</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
@ -551,9 +599,11 @@ SHA1 fingerprint of the certificate:
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">False</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
@ -566,6 +616,7 @@ SHA1 fingerprint of the certificate:
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label482">
|
<object class="GtkLabel" id="label482">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
|
@ -575,7 +626,7 @@ SHA1 fingerprint of the certificate:
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="form_vbox">
|
<object class="GtkVBox" id="form_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
|
@ -587,6 +638,7 @@ SHA1 fingerprint of the certificate:
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label382">
|
<object class="GtkLabel" id="label382">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">4</property>
|
<property name="position">4</property>
|
||||||
|
@ -596,10 +648,11 @@ SHA1 fingerprint of the certificate:
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox104">
|
<object class="GtkVBox" id="vbox104">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="progressbar_label">
|
<object class="GtkLabel" id="progressbar_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes"><b>Connecting to server</b>
|
<property name="label" translatable="yes"><b>Connecting to server</b>
|
||||||
|
|
||||||
Please wait...</property>
|
Please wait...</property>
|
||||||
|
@ -607,6 +660,7 @@ Please wait...</property>
|
||||||
<property name="justify">center</property>
|
<property name="justify">center</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">False</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
@ -614,6 +668,7 @@ Please wait...</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkProgressBar" id="progressbar">
|
<object class="GtkProgressBar" id="progressbar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="pulse_step">0.10000000149</property>
|
<property name="pulse_step">0.10000000149</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -630,6 +685,7 @@ Please wait...</property>
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label365">
|
<object class="GtkLabel" id="label365">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">5</property>
|
<property name="position">5</property>
|
||||||
|
@ -639,14 +695,16 @@ Please wait...</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox103">
|
<object class="GtkVBox" id="vbox103">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2986">
|
<object class="GtkHBox" id="hbox2986">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="finish_image">
|
<object class="GtkImage" id="finish_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -658,16 +716,21 @@ Please wait...</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="finish_label">
|
<object class="GtkLabel" id="finish_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0.10000000149011612</property>
|
<property name="xalign">0.10000000149011612</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
<property name="wrap">True</property>
|
<property name="wrap">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -678,6 +741,7 @@ Please wait...</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -694,6 +758,7 @@ Please wait...</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -711,6 +776,7 @@ Please wait...</property>
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label286">
|
<object class="GtkLabel" id="label286">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">6</property>
|
<property name="position">6</property>
|
||||||
|
@ -719,12 +785,15 @@ Please wait...</property>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox19">
|
<object class="GtkHButtonBox" id="hbuttonbox19">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
|
@ -735,7 +804,7 @@ Please wait...</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
<signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -752,7 +821,7 @@ Please wait...</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_back_button_clicked"/>
|
<signal name="clicked" handler="on_back_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -769,7 +838,7 @@ Please wait...</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_forward_button_clicked"/>
|
<signal name="clicked" handler="on_forward_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -779,47 +848,14 @@ Please wait...</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="advanced_button">
|
<object class="GtkButton" id="advanced_button">
|
||||||
|
<property name="label" translatable="yes">_Advanced</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<signal name="clicked" handler="on_advanced_button_clicked"/>
|
<property name="image">image2</property>
|
||||||
<child>
|
<property name="use_underline">True</property>
|
||||||
<object class="GtkAlignment" id="alignment96">
|
<signal name="clicked" handler="on_advanced_button_clicked" swapped="no"/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2996">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1265">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-preferences</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label364">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Advanced</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -829,47 +865,14 @@ Please wait...</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="finish_button">
|
<object class="GtkButton" id="finish_button">
|
||||||
|
<property name="label" translatable="yes">_Finish</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<signal name="clicked" handler="on_finish_button_clicked"/>
|
<property name="image">image3</property>
|
||||||
<child>
|
<property name="use_underline">True</property>
|
||||||
<object class="GtkAlignment" id="alignment87">
|
<signal name="clicked" handler="on_finish_button_clicked" swapped="no"/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2989">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1112">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-apply</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label352">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Finish</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -880,21 +883,25 @@ Please wait...</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkListStore" id="liststore1">
|
<object class="GtkListStore" id="server_liststore">
|
||||||
<columns>
|
<columns>
|
||||||
<!-- column-name item -->
|
<!-- column-name gchararray1 -->
|
||||||
<column type="gchararray"/>
|
<column type="gchararray"/>
|
||||||
</columns>
|
</columns>
|
||||||
<data>
|
</object>
|
||||||
<row>
|
<object class="GtkEntryCompletion" id="server_entrycompletion">
|
||||||
<col id="0" translatable="yes">None</col>
|
<property name="model">server_liststore</property>
|
||||||
</row>
|
<property name="text_column">0</property>
|
||||||
</data>
|
</object>
|
||||||
|
<object class="GtkEntryCompletion" id="server_entrycompletion1">
|
||||||
|
<property name="model">server_liststore</property>
|
||||||
|
<property name="text_column">0</property>
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -63,42 +63,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_button">
|
<object class="GtkButton" id="add_button">
|
||||||
|
<property name="label" translatable="yes">Add</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_add_button_clicked"/>
|
<signal name="clicked" handler="on_add_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox4">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-add</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label29">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">Add</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -107,42 +79,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="remove_button">
|
<object class="GtkButton" id="remove_button">
|
||||||
|
<property name="label" translatable="yes">Delete</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_remove_button_clicked"/>
|
<signal name="clicked" handler="on_remove_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment7">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox7">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-remove</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label26">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">Delete</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -151,46 +95,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="rename_button">
|
<object class="GtkButton" id="rename_button">
|
||||||
|
<property name="label" translatable="yes">Re_name</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="image">rename_image</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_rename_button_clicked"/>
|
<signal name="clicked" handler="on_rename_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment6">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox8">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="rename_image">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="stock">gtk-missing-image</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label25">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="label" translatable="yes">Re_name</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -225,7 +137,7 @@
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="enable_checkbutton1">
|
<object class="GtkCheckButton" id="enable_checkbutton1">
|
||||||
<property name="label" translatable="yes">_Enable</property>
|
<property name="label" translatable="yes">Active</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -520,6 +432,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="invisible_char">●</property>
|
<property name="invisible_char">●</property>
|
||||||
|
<signal name="focus_out_event" handler="on_cert_entry1_focus_out_event"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
|
@ -531,6 +444,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_browse_for_client_cert_button_clicked"/>
|
<signal name="clicked" handler="on_browse_for_client_cert_button_clicked"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -1120,7 +1034,7 @@
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="enable_zeroconf_checkbutton2">
|
<object class="GtkCheckButton" id="enable_zeroconf_checkbutton2">
|
||||||
<property name="label" translatable="yes">_Enable</property>
|
<property name="label" translatable="yes">Active</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -1552,4 +1466,16 @@ You might consider to change possible firewall settings.</property>
|
||||||
<property name="step_increment">1</property>
|
<property name="step_increment">1</property>
|
||||||
<property name="page_increment">5</property>
|
<property name="page_increment">5</property>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-add</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-remove</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="rename_image">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-missing-image</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkWindow" id="add_new_contact_window">
|
<object class="GtkWindow" id="add_new_contact_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Add New Contact</property>
|
<property name="title" translatable="yes">Add New Contact</property>
|
||||||
<property name="resizable">False</property>
|
<property name="resizable">False</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_add_new_contact_window_destroy"/>
|
<signal name="destroy" handler="on_add_new_contact_window_destroy" swapped="no"/>
|
||||||
<signal name="key_press_event" handler="on_add_new_contact_window_key_press_event"/>
|
<signal name="key-press-event" handler="on_add_new_contact_window_key_press_event" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox8">
|
<object class="GtkVBox" id="vbox8">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="prompt_label">
|
<object class="GtkLabel" id="prompt_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -27,10 +28,12 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="account_hbox">
|
<object class="GtkHBox" id="account_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="account_label">
|
<object class="GtkLabel" id="account_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">A_ccount:</property>
|
<property name="label" translatable="yes">A_ccount:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -44,8 +47,9 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="account_combobox">
|
<object class="GtkComboBox" id="account_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="model">liststore3</property>
|
<property name="model">liststore3</property>
|
||||||
<signal name="changed" handler="on_account_combobox_changed"/>
|
<signal name="changed" handler="on_account_combobox_changed" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCellRendererText" id="cellrenderertext3"/>
|
<object class="GtkCellRendererText" id="cellrenderertext3"/>
|
||||||
<attributes>
|
<attributes>
|
||||||
|
@ -64,16 +68,20 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="protocol_hbox">
|
<object class="GtkHBox" id="protocol_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="protocol_label">
|
<object class="GtkLabel" id="protocol_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Protocol:</property>
|
<property name="label" translatable="yes">_Protocol:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -88,7 +96,8 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="protocol_combobox">
|
<object class="GtkComboBox" id="protocol_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<signal name="changed" handler="on_protocol_combobox_changed"/>
|
<property name="can_focus">False</property>
|
||||||
|
<signal name="changed" handler="on_protocol_combobox_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -99,9 +108,10 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="protocol_jid_combobox">
|
<object class="GtkComboBox" id="protocol_jid_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="model">liststore2</property>
|
<property name="model">liststore2</property>
|
||||||
<signal name="changed" handler="on_protocol_jid_combobox_changed"/>
|
<signal name="changed" handler="on_protocol_jid_combobox_changed" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||||
<attributes>
|
<attributes>
|
||||||
|
@ -110,17 +120,22 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="subscription_table">
|
<object class="GtkTable" id="subscription_table">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="n_rows">3</property>
|
<property name="n_rows">3</property>
|
||||||
|
@ -130,6 +145,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="uid_label">
|
<object class="GtkLabel" id="uid_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_User ID:</property>
|
<property name="label" translatable="yes">_User ID:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -137,7 +153,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -145,16 +161,18 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
|
<property name="placeholder_text">Type User ID</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label188">
|
<object class="GtkLabel" id="label188">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Nickname:</property>
|
<property name="label" translatable="yes">_Nickname:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -164,7 +182,7 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -172,18 +190,20 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
|
<property name="placeholder_text">Type Nickname</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label223">
|
<object class="GtkLabel" id="label223">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">_Group:</property>
|
<property name="label" translatable="yes">_Group:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
@ -192,37 +212,48 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxEntry" id="group_comboboxentry">
|
<object class="GtkComboBoxText" id="group_comboboxentry">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="model">groups_liststore</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="text_column">0</property>
|
<property name="has_entry">True</property>
|
||||||
|
<property name="entry_text_column">0</property>
|
||||||
|
<property name="id_column">1</property>
|
||||||
|
<child internal-child="entry">
|
||||||
|
<object class="GtkEntry" id="comboboxtext-entry">
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="placeholder_text">Choose a group of type a new group</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="auto_authorize_checkbutton">
|
<object class="GtkCheckButton" id="auto_authorize_checkbutton">
|
||||||
<property name="label" translatable="yes">A_llow this contact to view my status</property>
|
<property name="label" translatable="yes">A_llow this contact to view my status</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -238,9 +269,8 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">etched-in</property>
|
<property name="shadow_type">etched-in</property>
|
||||||
|
<property name="min_content_height">5</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="message_textview">
|
<object class="GtkTextView" id="message_textview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -251,30 +281,39 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">5</property>
|
<property name="position">5</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="save_message_checkbutton">
|
<object class="GtkCheckButton" id="save_message_checkbutton">
|
||||||
<property name="label" translatable="yes">_Save subscription message</property>
|
<property name="label" translatable="yes">_Save subscription message</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">6</property>
|
<property name="position">6</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="register_hbox">
|
<object class="GtkHBox" id="register_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label224">
|
<object class="GtkLabel" id="label224">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">You have to register with this transport
|
<property name="label" translatable="yes">You have to register with this transport
|
||||||
to be able to add a contact from this
|
to be able to add a contact from this
|
||||||
|
@ -283,18 +322,22 @@ proceed.</property>
|
||||||
<property name="wrap">True</property>
|
<property name="wrap">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="register_button">
|
<object class="GtkButton" id="register_button">
|
||||||
<property name="label" translatable="yes">_Register</property>
|
<property name="label" translatable="yes">_Register</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_register_button_clicked"/>
|
<signal name="clicked" handler="on_register_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -304,12 +347,15 @@ proceed.</property>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">7</property>
|
<property name="position">7</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="connected_label">
|
<object class="GtkLabel" id="connected_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="label" translatable="yes">You must be connected to the transport to be able
|
<property name="label" translatable="yes">You must be connected to the transport to be able
|
||||||
to add a contact from this protocol.</property>
|
to add a contact from this protocol.</property>
|
||||||
|
@ -323,18 +369,21 @@ to add a contact from this protocol.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox1">
|
<object class="GtkHButtonBox" id="hbuttonbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="cancel_button">
|
<object class="GtkButton" id="cancel_button">
|
||||||
<property name="label">gtk-cancel</property>
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
<signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -345,13 +394,15 @@ to add a contact from this protocol.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_button">
|
<object class="GtkButton" id="add_button">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_add_button_clicked"/>
|
<signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -369,9 +420,6 @@ to add a contact from this protocol.</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkTextBuffer" id="textbuffer1">
|
|
||||||
<property name="text" translatable="yes">I would like to add you to my contact list.</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkListStore" id="groups_liststore">
|
<object class="GtkListStore" id="groups_liststore">
|
||||||
<columns>
|
<columns>
|
||||||
<!-- column-name item -->
|
<!-- column-name item -->
|
||||||
|
@ -390,4 +438,7 @@ to add a contact from this protocol.</property>
|
||||||
<column type="gchararray"/>
|
<column type="gchararray"/>
|
||||||
</columns>
|
</columns>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkTextBuffer" id="textbuffer1">
|
||||||
|
<property name="text" translatable="yes">I would like to add you to my contact list.</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Advanced Configuration Editor</property>
|
<property name="title" translatable="yes">Advanced Configuration Editor</property>
|
||||||
|
<property name="window_position">center-on-parent</property>
|
||||||
<property name="role">ace</property>
|
<property name="role">ace</property>
|
||||||
<property name="default_width">650</property>
|
<property name="default_width">650</property>
|
||||||
<property name="default_height">540</property>
|
<property name="default_height">540</property>
|
||||||
|
|
|
@ -38,47 +38,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="remove_button">
|
<object class="GtkButton" id="remove_button">
|
||||||
|
<property name="label" translatable="yes">_Unblock</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="border_width">3</property>
|
<property name="border_width">3</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_remove_button_clicked"/>
|
<signal name="clicked" handler="on_remove_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-remove</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Unblock</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -89,4 +56,8 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-remove</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,39 +1,88 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="change_status_message_dialog">
|
<object class="GtkDialog" id="change_status_message_dialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="default_width">270</property>
|
<property name="default_width">270</property>
|
||||||
<property name="default_height">175</property>
|
<property name="default_height">330</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="key_press_event" handler="on_change_status_message_dialog_key_press_event"/>
|
<signal name="key-press-event" handler="on_change_status_message_dialog_key_press_event" swapped="no"/>
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox5">
|
<object class="GtkBox" id="dialog-vbox5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="dialog-action_area">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="cancel_button">
|
||||||
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="ok_button">
|
||||||
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="has_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame" id="frame38">
|
<object class="GtkFrame" id="frame38">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label_xalign">0</property>
|
<property name="label_xalign">0</property>
|
||||||
<property name="shadow_type">none</property>
|
<property name="shadow_type">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment107">
|
<object class="GtkAlignment" id="alignment107">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="left_padding">12</property>
|
<property name="left_padding">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox112">
|
<object class="GtkVBox" id="vbox112">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow24">
|
<object class="GtkScrolledWindow" id="scrolledwindow24">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="message_textview">
|
<object class="GtkTextView" id="message_textview">
|
||||||
|
@ -45,33 +94,41 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox33">
|
<object class="GtkHButtonBox" id="hbuttonbox33">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="save_as_preset_button">
|
<object class="GtkButton" id="save_as_preset_button">
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<signal name="clicked" handler="on_save_as_preset_button_clicked"/>
|
<property name="use_action_appearance">False</property>
|
||||||
|
<signal name="clicked" handler="on_save_as_preset_button_clicked" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment106">
|
<object class="GtkAlignment" id="alignment106">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xscale">0</property>
|
<property name="xscale">0</property>
|
||||||
<property name="yscale">0</property>
|
<property name="yscale">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox3021">
|
<object class="GtkHBox" id="hbox3021">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">2</property>
|
<property name="spacing">2</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image1369">
|
<object class="GtkImage" id="image1369">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-save-as</property>
|
<property name="stock">gtk-save-as</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -83,6 +140,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label380">
|
<object class="GtkLabel" id="label380">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Save as Preset...</property>
|
<property name="label" translatable="yes">Save as Preset...</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -106,44 +164,53 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="under_table">
|
<object class="GtkTable" id="under_table">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="n_rows">3</property>
|
<property name="n_rows">3</property>
|
||||||
<property name="n_columns">2</property>
|
<property name="n_columns">2</property>
|
||||||
<property name="column_spacing">6</property>
|
<property name="column_spacing">6</property>
|
||||||
<property name="row_spacing">6</property>
|
<property name="row_spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="mood_button">
|
<object class="GtkButton" id="mood_button">
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<signal name="clicked" handler="on_mood_button_clicked"/>
|
<property name="use_action_appearance">False</property>
|
||||||
|
<signal name="clicked" handler="on_mood_button_clicked" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2">
|
<object class="GtkHBox" id="hbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="mood_image">
|
<object class="GtkImage" id="mood_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="mood_button_label">
|
<object class="GtkLabel" id="mood_button_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="wrap">True</property>
|
<property name="wrap">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -155,35 +222,44 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="activity_button">
|
<object class="GtkButton" id="activity_button">
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<signal name="clicked" handler="on_activity_button_clicked"/>
|
<property name="use_action_appearance">False</property>
|
||||||
|
<signal name="clicked" handler="on_activity_button_clicked" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="activity_image">
|
<object class="GtkImage" id="activity_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="activity_button_label">
|
<object class="GtkLabel" id="activity_button_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="wrap">True</property>
|
<property name="wrap">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -195,11 +271,13 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="mood_label">
|
<object class="GtkLabel" id="mood_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Mood:</property>
|
<property name="label" translatable="yes">Mood:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -207,11 +285,13 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="activity_label">
|
<object class="GtkLabel" id="activity_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Activity:</property>
|
<property name="label" translatable="yes">Activity:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -219,31 +299,37 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="message_combobox">
|
<object class="GtkComboBox" id="message_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<signal name="changed" handler="on_message_combobox_changed"/>
|
<property name="can_focus">False</property>
|
||||||
|
<signal name="changed" handler="on_message_combobox_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label165">
|
<object class="GtkLabel" id="label165">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Preset messages:</property>
|
<property name="label" translatable="yes">Preset messages:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
|
<property name="y_options">GTK_FILL</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -254,63 +340,19 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkLabel" id="label383">
|
<object class="GtkLabel" id="label383">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes"><b>Type your new status message</b></property>
|
<property name="label" translatable="yes"><b>Type your new status message</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="cancel_button">
|
|
||||||
<property name="label">gtk-cancel</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="ok_button">
|
|
||||||
<property name="label">gtk-ok</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="has_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="pack_type">end</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<action-widgets>
|
|
||||||
<action-widget response="-6">cancel_button</action-widget>
|
|
||||||
<action-widget response="-5">ok_button</action-widget>
|
|
||||||
</action-widgets>
|
|
||||||
</object>
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -75,7 +75,7 @@ Select the contacts you want to invite</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxEntry" id="server_list_comboboxentry">
|
<object class="GtkComboBox" id="server_list_comboboxentry">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -122,46 +122,13 @@ Select the contacts you want to invite</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="invite_button">
|
<object class="GtkButton" id="invite_button">
|
||||||
|
<property name="label" translatable="yes">In_vite</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_invite_button_clicked"/>
|
<signal name="clicked" handler="on_invite_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-jump-to</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">In_vite</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -179,4 +146,8 @@ Select the contacts you want to invite</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-jump-to</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,50 +1,105 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="dubbleinput_dialog">
|
<object class="GtkDialog" id="dubbleinput_dialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<property name="has_separator">False</property>
|
<signal name="destroy" handler="on_dubbleinput_dialog_destroy" swapped="no"/>
|
||||||
<signal name="destroy" handler="on_dubbleinput_dialog_destroy"/>
|
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox10">
|
<object class="GtkBox" id="dialog-vbox10">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="dialog-action_area9">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="cancelbutton">
|
||||||
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="okbutton">
|
||||||
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="has_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox76">
|
<object class="GtkVBox" id="vbox76">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2960">
|
<object class="GtkHBox" id="hbox2960">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image507">
|
<object class="GtkImage" id="image507">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-dialog-question</property>
|
<property name="stock">gtk-dialog-question</property>
|
||||||
<property name="icon-size">6</property>
|
<property name="icon-size">6</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label1">
|
<object class="GtkLabel" id="label1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -63,6 +118,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label2">
|
<object class="GtkLabel" id="label2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -82,50 +138,10 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area9">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="cancelbutton">
|
|
||||||
<property name="label">gtk-cancel</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="okbutton">
|
|
||||||
<property name="label">gtk-ok</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="has_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="pack_type">end</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -1,41 +1,77 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="edit_groups_dialog">
|
<object class="GtkDialog" id="edit_groups_dialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Edit Groups</property>
|
<property name="title" translatable="yes">Edit Groups</property>
|
||||||
<property name="modal">True</property>
|
<property name="modal">True</property>
|
||||||
<property name="default_height">290</property>
|
<property name="default_height">290</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="response" handler="on_edit_groups_dialog_response"/>
|
<signal name="response" handler="on_edit_groups_dialog_response" swapped="no"/>
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox6">
|
<object class="GtkBox" id="dialog-vbox6">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child internal-child="action_area">
|
||||||
<object class="GtkLabel" id="nickname_label">
|
<object class="GtkButtonBox" id="dialog-action_area5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="close_button">
|
||||||
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="nickname_label">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="jid_label">
|
<object class="GtkLabel" id="jid_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2926">
|
<object class="GtkHBox" id="hbox2926">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="group_entry">
|
<object class="GtkEntry" id="group_entry">
|
||||||
|
@ -44,19 +80,23 @@
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_button">
|
<object class="GtkButton" id="add_button">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_add_button_clicked"/>
|
<signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -75,47 +115,24 @@
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow32">
|
<object class="GtkScrolledWindow" id="scrolledwindow32">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeView" id="groups_treeview">
|
<object class="GtkTreeView" id="groups_treeview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="headers_visible">False</property>
|
<property name="headers_visible">False</property>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">5</property>
|
<property name="position">5</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="close_button">
|
|
||||||
<property name="label">gtk-close</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="pack_type">end</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<action-widgets>
|
<action-widgets>
|
||||||
|
|
|
@ -1,93 +1,46 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="esession_info_window">
|
<object class="GtkDialog" id="esession_info_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
<property name="window_position">center-on-parent</property>
|
<property name="window_position">center-on-parent</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<property name="has_separator">False</property>
|
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox1">
|
<object class="GtkBox" id="dialog-vbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">2</property>
|
<property name="spacing">2</property>
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="title-hbox">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="security_image">
|
|
||||||
<property name="width_request">32</property>
|
|
||||||
<property name="height_request">32</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="verification_status_label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox4">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">4</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="info_display">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">(<b>ESession</b> info)</property>
|
|
||||||
<property name="use_markup">True</property>
|
|
||||||
<property name="wrap">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="padding">10</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">2</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child internal-child="action_area">
|
<child internal-child="action_area">
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
<object class="GtkButtonBox" id="dialog-action_area1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="verify_now_button">
|
<object class="GtkButton" id="verify_now_button">
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<signal name="clicked" handler="on_verify_now_button_clicked"/>
|
<property name="use_action_appearance">False</property>
|
||||||
|
<signal name="clicked" handler="on_verify_now_button_clicked" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment2">
|
<object class="GtkAlignment" id="alignment2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xscale">0</property>
|
<property name="xscale">0</property>
|
||||||
<property name="yscale">0</property>
|
<property name="yscale">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox3">
|
<object class="GtkHBox" id="hbox3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">2</property>
|
<property name="spacing">2</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image2">
|
<object class="GtkImage" id="image2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-apply</property>
|
<property name="stock">gtk-apply</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -99,6 +52,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="button_label">
|
<object class="GtkLabel" id="button_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Verify</property>
|
<property name="label" translatable="yes">_Verify</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -122,11 +76,13 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="close_button3">
|
<object class="GtkButton" id="close_button3">
|
||||||
<property name="label">gtk-close</property>
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_close_button_clicked"/>
|
<signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -137,10 +93,74 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="pack_type">end</property>
|
<property name="pack_type">end</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkHBox" id="title-hbox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="security_image">
|
||||||
|
<property name="width_request">32</property>
|
||||||
|
<property name="height_request">32</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="verification_status_label">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkHBox" id="hbox4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="spacing">4</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="info_display">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label">(<b>ESession</b> info)</property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
<property name="wrap">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="padding">10</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<action-widgets>
|
<action-widgets>
|
||||||
|
|
|
@ -41,11 +41,11 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<signal name="button_press_event" handler="on_transfers_list_button_press_event"/>
|
<signal name="button_press_event" handler="on_transfers_list_button_press_event"/>
|
||||||
|
<signal name="row_activated" handler="on_transfers_list_row_activated"/>
|
||||||
<signal name="button_release_event" handler="on_transfers_list_button_release_event"/>
|
<signal name="button_release_event" handler="on_transfers_list_button_release_event"/>
|
||||||
<signal name="key_press_event" handler="on_transfers_list_key_press_event"/>
|
<signal name="key_press_event" handler="on_transfers_list_key_press_event"/>
|
||||||
<signal name="leave_notify_event" handler="on_transfers_list_leave_notify_event"/>
|
|
||||||
<signal name="motion_notify_event" handler="on_transfers_list_motion_notify_event"/>
|
<signal name="motion_notify_event" handler="on_transfers_list_motion_notify_event"/>
|
||||||
<signal name="row_activated" handler="on_transfers_list_row_activated"/>
|
<signal name="leave_notify_event" handler="on_transfers_list_leave_notify_event"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -81,12 +81,15 @@
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="cleanup_button">
|
<object class="GtkButton" id="cleanup_button">
|
||||||
|
<property name="label" translatable="yes">Clean _up</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="tooltip_text" translatable="yes">Removes completed, cancelled and failed file transfers from the list</property>
|
<property name="tooltip_text" translatable="yes">Removes completed, cancelled and failed file transfers from the list</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<child internal-child="accessible">
|
<child internal-child="accessible">
|
||||||
<object class="AtkObject" id="cleanup_button-atkobject">
|
<object class="AtkObject" id="cleanup_button-atkobject">
|
||||||
<property name="AtkObject::accessible-name" translatable="yes">Remove file transfer from the list.</property>
|
<property name="AtkObject::accessible-name" translatable="yes">Remove file transfer from the list.</property>
|
||||||
|
@ -94,42 +97,6 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<signal name="clicked" handler="on_cleanup_button_clicked"/>
|
<signal name="clicked" handler="on_cleanup_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment91">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2992">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1143">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-clear</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label358">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">Clean _up</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -139,48 +106,15 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="pause_restore_button">
|
<object class="GtkButton" id="pause_restore_button">
|
||||||
|
<property name="label" translatable="yes">_Pause</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_pause_restore_button_clicked"/>
|
<signal name="clicked" handler="on_pause_restore_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment92">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2993">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1147">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-media-pause</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label359">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Pause</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -252,7 +186,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="continue_menuitem">
|
<object class="GtkImageMenuItem" id="continue_menuitem">
|
||||||
<property name="label" translatable="yes">_Continue</property>
|
<property name="label">_Continue</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
|
@ -262,7 +196,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="pause_menuitem">
|
<object class="GtkImageMenuItem" id="pause_menuitem">
|
||||||
<property name="label" translatable="yes">_Pause</property>
|
<property name="label">_Pause</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
|
@ -285,7 +219,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="open_folder_menuitem">
|
<object class="GtkImageMenuItem" id="open_folder_menuitem">
|
||||||
<property name="label" translatable="yes">_Open Containing Folder</property>
|
<property name="label">_Open Containing Folder</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
|
@ -294,4 +228,12 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkAccelGroup" id="accelgroup1"/>
|
<object class="GtkAccelGroup" id="accelgroup1"/>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-clear</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-media-pause</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
<object class="GtkWindow" id="gajim_themes_window">
|
<object class="GtkWindow" id="gajim_themes_window">
|
||||||
<property name="border_width">12</property>
|
<property name="border_width">12</property>
|
||||||
<property name="title" translatable="yes">Gajim Themes Customization</property>
|
<property name="title" translatable="yes">Gajim Themes Customization</property>
|
||||||
|
<property name="window_position">center-on-parent</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox97">
|
<object class="GtkVBox" id="vbox97">
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox27">
|
<object class="GtkHButtonBox" id="hbuttonbox27">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
|
<property name="layout_style">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_button">
|
<object class="GtkButton" id="add_button">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
|
@ -148,7 +150,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -165,7 +167,7 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -182,7 +184,7 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -197,7 +199,7 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -211,8 +213,8 @@
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -228,8 +230,8 @@
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -247,7 +249,7 @@
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -269,8 +271,8 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -292,8 +294,8 @@
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options"></property>
|
<property name="x_options"/>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -348,7 +350,7 @@
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="bottom_attach">5</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -364,7 +366,7 @@
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="bottom_attach">5</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -380,7 +382,7 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -393,7 +395,7 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -406,7 +408,7 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -422,7 +424,7 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -435,7 +437,7 @@
|
||||||
<packing>
|
<packing>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -448,7 +450,7 @@
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -464,7 +466,7 @@
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -478,7 +480,7 @@ Messages</property>
|
||||||
<property name="top_attach">7</property>
|
<property name="top_attach">7</property>
|
||||||
<property name="bottom_attach">8</property>
|
<property name="bottom_attach">8</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -494,7 +496,7 @@ Messages</property>
|
||||||
<property name="top_attach">7</property>
|
<property name="top_attach">7</property>
|
||||||
<property name="bottom_attach">8</property>
|
<property name="bottom_attach">8</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -520,7 +522,7 @@ Messages</property>
|
||||||
<property name="top_attach">8</property>
|
<property name="top_attach">8</property>
|
||||||
<property name="bottom_attach">9</property>
|
<property name="bottom_attach">9</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -536,7 +538,7 @@ Messages</property>
|
||||||
<property name="top_attach">8</property>
|
<property name="top_attach">8</property>
|
||||||
<property name="bottom_attach">9</property>
|
<property name="bottom_attach">9</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
|
|
@ -1,29 +1,31 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy project-wide -->
|
|
||||||
<object class="GtkHBox" id="groupchat_control_hbox">
|
<object class="GtkHBox" id="groupchat_control_hbox">
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="groupchat_control_vbox">
|
<object class="GtkVBox" id="groupchat_control_vbox">
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="border_width">3</property>
|
<property name="border_width">3</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment">
|
<object class="GtkAlignment" id="alignment">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="bottom_padding">1</property>
|
<property name="bottom_padding">1</property>
|
||||||
<property name="left_padding">3</property>
|
<property name="left_padding">3</property>
|
||||||
<property name="right_padding">3</property>
|
<property name="right_padding">3</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEventBox" id="banner_eventbox">
|
<object class="GtkEventBox" id="banner_eventbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox3024">
|
<object class="GtkHBox" id="hbox3024">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="gc_banner_status_image">
|
<object class="GtkImage" id="gc_banner_status_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -36,34 +38,42 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="banner_vbox">
|
<object class="GtkVBox" id="banner_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="banner_name_label">
|
<object class="GtkLabel" id="banner_name_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label"><span weight="heavy" size="large">room jid</span></property>
|
<property name="label"><span weight="heavy" size="large">room jid</span></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="banner_label">
|
<object class="GtkLabel" id="banner_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label">label</property>
|
<property name="label">label</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
<property name="selectable">True</property>
|
<property name="selectable">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -85,12 +95,12 @@
|
||||||
<property name="border_width">3</property>
|
<property name="border_width">3</property>
|
||||||
<property name="position">495</property>
|
<property name="position">495</property>
|
||||||
<property name="position_set">True</property>
|
<property name="position_set">True</property>
|
||||||
<signal name="notify" handler="on_hpaned_notify"/>
|
<signal name="notify" handler="on_hpaned_notify" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="gc_textviews_vbox">
|
<object class="GtkVBox" id="gc_textviews_vbox">
|
||||||
<property name="width_request">0</property>
|
<property name="width_request">0</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="conversation_scrolledwindow">
|
<object class="GtkScrolledWindow" id="conversation_scrolledwindow">
|
||||||
|
@ -98,14 +108,14 @@
|
||||||
<property name="height_request">60</property>
|
<property name="height_request">60</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -122,6 +132,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -137,7 +148,6 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">never</property>
|
<property name="hscrollbar_policy">never</property>
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeView" id="list_treeview">
|
<object class="GtkTreeView" id="list_treeview">
|
||||||
|
@ -155,15 +165,19 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="actions_hbox">
|
<object class="GtkHBox" id="actions_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox3023">
|
<object class="GtkHBox" id="hbox3023">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="emoticons_button">
|
<object class="GtkButton" id="emoticons_button">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -176,6 +190,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="emoticons_button_image">
|
<object class="GtkImage" id="emoticons_button_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -190,6 +205,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -206,6 +222,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image11">
|
<object class="GtkImage" id="image11">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-bold</property>
|
<property name="stock">gtk-bold</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -213,16 +230,19 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVSeparator" id="vseparator2">
|
<object class="GtkVSeparator" id="vseparator2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -238,6 +258,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image4">
|
<object class="GtkImage" id="image4">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="stock">gtk-edit</property>
|
<property name="stock">gtk-edit</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
|
@ -262,6 +283,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image6">
|
<object class="GtkImage" id="image6">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="stock">gtk-properties</property>
|
<property name="stock">gtk-properties</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
|
@ -287,6 +309,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image7">
|
<object class="GtkImage" id="image7">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="stock">gtk-add</property>
|
<property name="stock">gtk-add</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
|
@ -309,8 +332,9 @@
|
||||||
<property name="tooltip_text" translatable="yes">Browse the chat history (Ctrl+H)</property>
|
<property name="tooltip_text" translatable="yes">Browse the chat history (Ctrl+H)</property>
|
||||||
<property name="relief">none</property>
|
<property name="relief">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image8">
|
<object class="GtkImage" id="history_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="stock">gtk-justify-fill</property>
|
<property name="stock">gtk-justify-fill</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
|
@ -326,10 +350,12 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVSeparator" id="vseparator4">
|
<object class="GtkVSeparator" id="vseparator4">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">7</property>
|
<property name="position">7</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -346,11 +372,13 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment104">
|
<object class="GtkAlignment" id="alignment104">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xscale">0</property>
|
<property name="xscale">0</property>
|
||||||
<property name="yscale">0</property>
|
<property name="yscale">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image1344">
|
<object class="GtkImage" id="image1344">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-execute</property>
|
<property name="stock">gtk-execute</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -367,65 +395,38 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="label_selector">
|
<object class="GtkComboBox" id="label_selector">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">9</property>
|
<property name="position">9</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment2">
|
<object class="GtkAlignment" id="alignment2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">10</property>
|
<property name="position">10</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="send_button">
|
<object class="GtkButton" id="send_button">
|
||||||
|
<property name="label" translatable="yes">_Send</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="tooltip_text" translatable="yes">Send message</property>
|
<property name="tooltip_text" translatable="yes">Send message</property>
|
||||||
<child>
|
<property name="image">image1</property>
|
||||||
<object class="GtkAlignment" id="alignment105">
|
<property name="use_underline">True</property>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox3016">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1345">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-jump-to</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label377">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes" comments="Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)">_Send</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -436,13 +437,21 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-jump-to</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -212,48 +212,16 @@ If you plan to do massive deletions, please make sure Gajim is not running. Gene
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="search_db_button">
|
<object class="GtkButton" id="search_db_button">
|
||||||
|
<property name="label" translatable="yes">_Search Database</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="image_position">bottom</property>
|
||||||
<signal name="clicked" handler="on_search_db_button_clicked"/>
|
<signal name="clicked" handler="on_search_db_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-find</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Search Database</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -345,4 +313,8 @@ If you plan to do massive deletions, please make sure Gajim is not running. Gene
|
||||||
<action-widget response="-5">save_button</action-widget>
|
<action-widget response="-5">save_button</action-widget>
|
||||||
</action-widgets>
|
</action-widgets>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-find</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,63 +1,49 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkListStore" id="liststore1">
|
|
||||||
<columns>
|
|
||||||
<!-- column-name item -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
</columns>
|
|
||||||
<data>
|
|
||||||
<row>
|
|
||||||
<col id="0" translatable="yes">Enter JID or Contact name</col>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<col id="0" translatable="yes">Groupchat Histories</col>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<col id="0" translatable="yes">All Chat Histories</col>
|
|
||||||
</row>
|
|
||||||
</data>
|
|
||||||
</object>
|
|
||||||
<object class="GtkWindow" id="history_window">
|
<object class="GtkWindow" id="history_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="title" translatable="yes">Conversation History</property>
|
<property name="title" translatable="yes">Conversation History</property>
|
||||||
<property name="role">history</property>
|
<property name="role">history</property>
|
||||||
<property name="default_width">650</property>
|
<property name="default_width">650</property>
|
||||||
<property name="default_height">450</property>
|
<property name="default_height">450</property>
|
||||||
<signal name="destroy" handler="on_history_window_destroy"/>
|
<signal name="destroy" handler="on_history_window_destroy" swapped="no"/>
|
||||||
<signal name="key_press_event" handler="on_history_window_key_press_event"/>
|
<signal name="key-press-event" handler="on_history_window_key_press_event" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox">
|
<object class="GtkVBox" id="vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">12</property>
|
<property name="border_width">12</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox1">
|
<object class="GtkVBox" id="vbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxEntry" id="query_combobox">
|
<object class="GtkEntry" id="query_entry">
|
||||||
<property name="visible">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="invisible_char">●</property>
|
||||||
<property name="model">liststore1</property>
|
<property name="invisible_char_set">True</property>
|
||||||
<property name="text_column">0</property>
|
<property name="placeholder_text">Enter name / JID of contact or groupchat</property>
|
||||||
<signal name="changed" handler="on_query_combobox_changed"/>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label3">
|
<object class="GtkLabel" id="label3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="label" translatable="yes">Search:</property>
|
<property name="label" translatable="yes">Search:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -68,26 +54,30 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="query_entry">
|
<object class="GtkEntry" id="search_entry">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
<signal name="activate" handler="on_query_entry_activate"/>
|
<signal name="activate" handler="on_search_entry_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="search_in_date">
|
<object class="GtkCheckButton" id="search_in_date">
|
||||||
<property name="label" translatable="yes">_In date search</property>
|
<property name="label" translatable="yes">_In date search</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="tooltip_text" translatable="yes">Searching only in the selected day </property>
|
<property name="tooltip_text" translatable="yes">Searching only in the selected day </property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -99,6 +89,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -114,17 +105,18 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox2">
|
<object class="GtkVBox" id="vbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCalendar" id="calendar">
|
<object class="GtkCalendar" id="calendar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<signal name="month_changed" handler="on_calendar_month_changed"/>
|
<signal name="month-changed" handler="on_calendar_month_changed" swapped="no"/>
|
||||||
<signal name="day_selected" handler="on_calendar_day_selected"/>
|
<signal name="day-selected" handler="on_calendar_day_selected" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -141,8 +133,6 @@
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow">
|
<object class="GtkScrolledWindow" id="scrolledwindow">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">etched-in</property>
|
<property name="shadow_type">etched-in</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
|
@ -163,15 +153,16 @@
|
||||||
<object class="GtkScrolledWindow" id="results_scrolledwindow">
|
<object class="GtkScrolledWindow" id="results_scrolledwindow">
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeView" id="results_treeview">
|
<object class="GtkTreeView" id="results_treeview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="rules_hint">True</property>
|
<property name="rules_hint">True</property>
|
||||||
<signal name="row_activated" handler="on_results_treeview_row_activated"/>
|
<signal name="row-activated" handler="on_results_treeview_row_activated" swapped="no"/>
|
||||||
|
<child internal-child="selection">
|
||||||
|
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -182,25 +173,33 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2">
|
<object class="GtkHBox" id="hbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="log_history_checkbutton">
|
<object class="GtkCheckButton" id="log_history_checkbutton">
|
||||||
<property name="label" translatable="yes">_Log conversation history</property>
|
<property name="label" translatable="yes">_Log conversation history</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -230,23 +229,27 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox">
|
<object class="GtkHButtonBox" id="hbuttonbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="close_button">
|
<object class="GtkButton" id="close_button">
|
||||||
<property name="label">gtk-close</property>
|
<property name="label">gtk-close</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_close_button_clicked"/>
|
<signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
|
|
@ -1,51 +1,106 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="input_dialog">
|
<object class="GtkDialog" id="input_dialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<property name="has_separator">False</property>
|
<signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
|
||||||
<signal name="destroy" handler="on_input_dialog_destroy"/>
|
<signal name="delete-event" handler="on_input_dialog_delete_event" swapped="no"/>
|
||||||
<signal name="delete_event" handler="on_input_dialog_delete_event"/>
|
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox10">
|
<object class="GtkBox" id="dialog-vbox10">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkButtonBox" id="dialog-action_area9">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="layout_style">end</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="cancelbutton">
|
||||||
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="okbutton">
|
||||||
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="can_default">True</property>
|
||||||
|
<property name="has_default">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
|
<property name="use_stock">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox">
|
<object class="GtkVBox" id="vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2960">
|
<object class="GtkHBox" id="hbox2960">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image507">
|
<object class="GtkImage" id="image507">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-dialog-question</property>
|
<property name="stock">gtk-dialog-question</property>
|
||||||
<property name="icon-size">6</property>
|
<property name="icon-size">6</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label">
|
<object class="GtkLabel" id="label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -62,50 +117,10 @@
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area9">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="layout_style">end</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="cancelbutton">
|
|
||||||
<property name="label">gtk-cancel</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton" id="okbutton">
|
|
||||||
<property name="label">gtk-ok</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="can_default">True</property>
|
|
||||||
<property name="has_default">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="use_stock">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="pack_type">end</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -1,89 +1,32 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkDialog" id="input_dialog">
|
<object class="GtkDialog" id="input_dialog">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="default_width">400</property>
|
<property name="default_width">400</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<property name="has_separator">False</property>
|
<signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
|
||||||
<signal name="destroy" handler="on_input_dialog_destroy"/>
|
|
||||||
<child internal-child="vbox">
|
<child internal-child="vbox">
|
||||||
<object class="GtkVBox" id="dialog-vbox10">
|
<object class="GtkBox" id="dialog-vbox10">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
|
||||||
<object class="GtkVBox" id="vbox76">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="border_width">6</property>
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2960">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">12</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image507">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-dialog-question</property>
|
|
||||||
<property name="icon-size">6</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="use_markup">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">never</property>
|
|
||||||
<property name="shadow_type">in</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTextView" id="input_textview">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="wrap_mode">word</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child internal-child="action_area">
|
<child internal-child="action_area">
|
||||||
<object class="GtkHButtonBox" id="dialog-action_area9">
|
<object class="GtkButtonBox" id="dialog-action_area9">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="cancelbutton">
|
<object class="GtkButton" id="cancelbutton">
|
||||||
<property name="label">gtk-cancel</property>
|
<property name="label">gtk-cancel</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -95,11 +38,13 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="okbutton">
|
<object class="GtkButton" id="okbutton">
|
||||||
<property name="label">gtk-ok</property>
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -111,10 +56,81 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="pack_type">end</property>
|
<property name="pack_type">end</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkVBox" id="vbox76">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="border_width">6</property>
|
||||||
|
<property name="spacing">6</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkHBox" id="hbox2960">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="spacing">12</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage" id="image507">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-dialog-question</property>
|
||||||
|
<property name="icon-size">6</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="vscrollbar_policy">never</property>
|
||||||
|
<property name="shadow_type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTextView" id="input_textview">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="wrap_mode">word</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<action-widgets>
|
<action-widgets>
|
||||||
|
|
|
@ -1,21 +1,32 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-find</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-apply</property>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="join_groupchat_window">
|
<object class="GtkWindow" id="join_groupchat_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Join Group Chat</property>
|
<property name="title" translatable="yes">Join Group Chat</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_join_groupchat_window_destroy"/>
|
<signal name="destroy" handler="on_join_groupchat_window_destroy" swapped="no"/>
|
||||||
<signal name="key_press_event" handler="on_join_groupchat_window_key_press_event"/>
|
<signal name="key-press-event" handler="on_join_groupchat_window_key_press_event" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox28">
|
<object class="GtkVBox" id="vbox28">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="table15">
|
<object class="GtkTable" id="table15">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="n_rows">8</property>
|
<property name="n_rows">8</property>
|
||||||
<property name="n_columns">2</property>
|
<property name="n_columns">2</property>
|
||||||
<property name="column_spacing">12</property>
|
<property name="column_spacing">12</property>
|
||||||
|
@ -26,14 +37,14 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="has_focus">True</property>
|
<property name="has_focus">True</property>
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
<signal name="changed" handler="on_required_entry_changed"/>
|
<signal name="changed" handler="on_required_entry_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -41,19 +52,20 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="activates_default">True</property>
|
<property name="activates_default">True</property>
|
||||||
<signal name="changed" handler="on_required_entry_changed"/>
|
<signal name="changed" handler="on_required_entry_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label143">
|
<object class="GtkLabel" id="label143">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Room:</property>
|
<property name="label" translatable="yes">Room:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -61,12 +73,13 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label142">
|
<object class="GtkLabel" id="label142">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Nickname:</property>
|
<property name="label" translatable="yes">Nickname:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -74,12 +87,13 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label225">
|
<object class="GtkLabel" id="label225">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Recently:</property>
|
<property name="label" translatable="yes">Recently:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -87,13 +101,14 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="recently_combobox">
|
<object class="GtkComboBox" id="recently_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<signal name="changed" handler="on_recently_combobox_changed"/>
|
<property name="can_focus">False</property>
|
||||||
|
<signal name="changed" handler="on_recently_combobox_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -107,6 +122,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label145">
|
<object class="GtkLabel" id="label145">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Password:</property>
|
<property name="label" translatable="yes">Password:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -114,7 +130,7 @@
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -129,7 +145,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -140,6 +156,7 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -147,24 +164,26 @@
|
||||||
<property name="top_attach">7</property>
|
<property name="top_attach">7</property>
|
||||||
<property name="bottom_attach">8</property>
|
<property name="bottom_attach">8</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="account_label">
|
<object class="GtkLabel" id="account_label">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Account</property>
|
<property name="label" translatable="yes">Account</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="account_combobox">
|
<object class="GtkComboBox" id="account_combobox">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<signal name="changed" handler="on_account_combobox_changed"/>
|
<signal name="changed" handler="on_account_combobox_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -180,20 +199,22 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_bookmark_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_bookmark_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">6</property>
|
<property name="top_attach">6</property>
|
||||||
<property name="bottom_attach">7</property>
|
<property name="bottom_attach">7</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label1">
|
<object class="GtkLabel" id="label1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Server:</property>
|
<property name="label" translatable="yes">Server:</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -205,16 +226,10 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxEntry" id="server_comboboxentry">
|
<placeholder/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="model">liststore1</property>
|
|
||||||
<property name="text_column">0</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="browse_rooms_button">
|
<object class="GtkButton" id="browse_rooms_button">
|
||||||
|
@ -224,9 +239,12 @@
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="image">image1</property>
|
<property name="image">image1</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_browse_rooms_button_clicked"/>
|
<signal name="clicked" handler="on_browse_rooms_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -242,12 +260,14 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox12">
|
<object class="GtkHButtonBox" id="hbuttonbox12">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
|
@ -258,7 +278,7 @@
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
<signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -268,48 +288,15 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="join_button">
|
<object class="GtkButton" id="join_button">
|
||||||
|
<property name="label" translatable="yes">_Join</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<signal name="clicked" handler="on_join_button_clicked"/>
|
<property name="image">image2</property>
|
||||||
<child>
|
<property name="use_underline">True</property>
|
||||||
<object class="GtkAlignment" id="alignment25">
|
<signal name="clicked" handler="on_join_button_clicked" swapped="no"/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox37">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image148">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-apply</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label146">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Join</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -320,6 +307,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="pack_type">end</property>
|
<property name="pack_type">end</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
@ -327,14 +315,4 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkListStore" id="liststore1">
|
|
||||||
<columns>
|
|
||||||
<!-- column-name gchararray1 -->
|
|
||||||
<column type="gchararray"/>
|
|
||||||
</columns>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-find</property>
|
|
||||||
</object>
|
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox25">
|
<object class="GtkHButtonBox" id="hbuttonbox25">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_bookmark_button">
|
<object class="GtkButton" id="add_bookmark_button">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="bottom_attach">5</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -128,7 +128,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="bottom_attach">5</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -156,7 +156,7 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -170,7 +170,7 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -184,7 +184,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -212,7 +212,7 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -224,7 +224,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -236,7 +236,7 @@
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -250,7 +250,7 @@
|
||||||
<property name="top_attach">6</property>
|
<property name="top_attach">6</property>
|
||||||
<property name="bottom_attach">7</property>
|
<property name="bottom_attach">7</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
|
|
@ -55,38 +55,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="configure_button">
|
<object class="GtkButton" id="configure_button">
|
||||||
|
<property name="label" translatable="yes">_Configure</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_configure_button_clicked"/>
|
<signal name="clicked" handler="on_configure_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="stock">gtk-preferences</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="label" translatable="yes">_Configure</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -120,4 +96,8 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-preferences</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
<object class="GtkWindow" id="manage_proxies_window">
|
<object class="GtkWindow" id="manage_proxies_window">
|
||||||
<property name="border_width">12</property>
|
<property name="border_width">12</property>
|
||||||
<property name="title" translatable="yes">Manage Proxy Profiles</property>
|
<property name="title" translatable="yes">Manage Proxy Profiles</property>
|
||||||
|
<property name="window_position">center-on-parent</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_manage_proxies_window_destroy"/>
|
<signal name="destroy" handler="on_manage_proxies_window_destroy"/>
|
||||||
<child>
|
<child>
|
||||||
|
@ -63,7 +64,7 @@
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox21">
|
<object class="GtkHButtonBox" id="hbuttonbox21">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_proxy_button">
|
<object class="GtkButton" id="add_proxy_button">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
|
@ -137,7 +138,7 @@
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -172,7 +173,7 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -185,7 +186,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -237,7 +238,7 @@
|
||||||
<property name="top_attach">1</property>
|
<property name="top_attach">1</property>
|
||||||
<property name="bottom_attach">2</property>
|
<property name="bottom_attach">2</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -249,7 +250,7 @@
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -262,7 +263,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -280,7 +281,7 @@
|
||||||
<property name="top_attach">4</property>
|
<property name="top_attach">4</property>
|
||||||
<property name="bottom_attach">5</property>
|
<property name="bottom_attach">5</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -294,7 +295,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -309,7 +310,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">6</property>
|
<property name="top_attach">6</property>
|
||||||
<property name="bottom_attach">7</property>
|
<property name="bottom_attach">7</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -324,7 +325,7 @@
|
||||||
<property name="top_attach">5</property>
|
<property name="top_attach">5</property>
|
||||||
<property name="bottom_attach">6</property>
|
<property name="bottom_attach">6</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -339,7 +340,7 @@
|
||||||
<property name="top_attach">6</property>
|
<property name="top_attach">6</property>
|
||||||
<property name="bottom_attach">7</property>
|
<property name="bottom_attach">7</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -354,7 +355,7 @@
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -368,7 +369,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -382,7 +383,7 @@
|
||||||
<property name="right_attach">2</property>
|
<property name="right_attach">2</property>
|
||||||
<property name="top_attach">2</property>
|
<property name="top_attach">2</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -397,7 +398,7 @@
|
||||||
<property name="top_attach">3</property>
|
<property name="top_attach">3</property>
|
||||||
<property name="bottom_attach">4</property>
|
<property name="bottom_attach">4</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<property name="height_request">350</property>
|
<property name="height_request">350</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Manage sounds</property>
|
<property name="title" translatable="yes">Manage sounds</property>
|
||||||
|
<property name="window_position">center-on-parent</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="delete_event" handler="on_manage_sounds_window_delete_event"/>
|
<signal name="delete_event" handler="on_manage_sounds_window_delete_event"/>
|
||||||
<child>
|
<child>
|
||||||
|
|
|
@ -1,34 +1,19 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
|
||||||
<object class="GtkWindow" id="message_window">
|
|
||||||
<property name="default_width">480</property>
|
|
||||||
<property name="default_height">440</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="msg_window_alignment">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="top_padding">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkNotebook" id="notebook">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="scrollable">True</property>
|
|
||||||
<property name="tab_border">0</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
<object class="GtkEventBox" id="chat_tab_ebox">
|
<object class="GtkEventBox" id="chat_tab_ebox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="visible_window">False</property>
|
<property name="visible_window">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="tab_hbox">
|
<object class="GtkHBox" id="tab_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">4</property>
|
<property name="spacing">4</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="tab_image">
|
<object class="GtkImage" id="tab_image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -39,25 +24,32 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="tab_label">
|
<object class="GtkLabel" id="tab_label">
|
||||||
|
<property name="width_request">70</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
<property name="ellipsize">end</property>
|
<property name="ellipsize">end</property>
|
||||||
<property name="max_width_chars">9</property>
|
<property name="max_width_chars">9</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="tab_close_button">
|
<object class="GtkButton" id="tab_close_button">
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
<property name="use_action_appearance">False</property>
|
||||||
<property name="relief">none</property>
|
<property name="relief">none</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="image1329">
|
<object class="GtkImage" id="image1329">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="stock">gtk-close</property>
|
<property name="stock">gtk-close</property>
|
||||||
<property name="icon-size">1</property>
|
<property name="icon-size">1</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -72,4 +64,23 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkWindow" id="message_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="default_width">480</property>
|
||||||
|
<property name="default_height">440</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkAlignment" id="msg_window_alignment">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="top_padding">2</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkNotebook" id="notebook">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="scrollable">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,39 +1,55 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-apply</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-cancel</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-preferences</property>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="plugins_window">
|
<object class="GtkWindow" id="plugins_window">
|
||||||
<property name="width_request">650</property>
|
<property name="width_request">650</property>
|
||||||
<property name="height_request">500</property>
|
<property name="height_request">500</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="title" translatable="yes">Plugins</property>
|
<property name="title" translatable="yes">Plugins</property>
|
||||||
<property name="default_width">650</property>
|
<property name="default_width">650</property>
|
||||||
<property name="default_height">500</property>
|
<property name="default_height">500</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_plugins_window_destroy"/>
|
<signal name="destroy" handler="on_plugins_window_destroy" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox1">
|
<object class="GtkVBox" id="vbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkNotebook" id="plugins_notebook">
|
<object class="GtkNotebook" id="plugins_notebook">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<signal name="switch_page" handler="on_plugins_notebook_switch_page"/>
|
<signal name="switch-page" handler="on_plugins_notebook_switch_page" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHPaned" id="hpaned1">
|
<object class="GtkHPaned" id="hpaned1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="position">250</property>
|
<property name="position_set">True</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAlignment" id="alignment1">
|
<object class="GtkAlignment" id="alignment1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox6">
|
<object class="GtkVBox" id="vbox6">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -48,50 +64,32 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkAspectFrame" id="aspectframe1">
|
<object class="GtkAspectFrame" id="aspectframe1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label_xalign">0</property>
|
<property name="label_xalign">0</property>
|
||||||
<property name="shadow_type">none</property>
|
<property name="shadow_type">none</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="install_plugin_button">
|
<object class="GtkButton" id="install_plugin_button">
|
||||||
|
<property name="label" translatable="yes">Install from zip</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<signal name="clicked" handler="on_install_plugin_button_clicked"/>
|
<property name="image">image1</property>
|
||||||
<child>
|
<signal name="clicked" handler="on_install_plugin_button_clicked" swapped="no"/>
|
||||||
<object class="GtkHBox" id="hbox8">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-apply</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="configure_plugin_button_label2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Install from zip</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="padding">5</property>
|
<property name="padding">5</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
@ -107,104 +105,125 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox2">
|
<object class="GtkVBox" id="vbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="plugin_name_label">
|
<object class="GtkLabel" id="plugin_name_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">&lt;empty&gt;</property>
|
<property name="label" translatable="yes">&lt;empty&gt;</property>
|
||||||
<property name="use_markup">True</property>
|
|
||||||
<property name="selectable">True</property>
|
<property name="selectable">True</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="weight" value="bold"/>
|
||||||
|
</attributes>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label5">
|
<object class="GtkLabel" id="label5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Version:</property>
|
<property name="label" translatable="yes">Version:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="plugin_version_label">
|
<object class="GtkLabel" id="plugin_version_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><empty></property>
|
<property name="label"><empty></property>
|
||||||
<property name="selectable">True</property>
|
<property name="selectable">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2">
|
<object class="GtkHBox" id="hbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label4">
|
<object class="GtkLabel" id="label4">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="yalign">0</property>
|
<property name="yalign">0</property>
|
||||||
<property name="label" translatable="yes">Authors:</property>
|
<property name="label" translatable="yes">Authors:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="plugin_authors_label">
|
<object class="GtkLabel" id="plugin_authors_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="yalign">0</property>
|
<property name="yalign">0</property>
|
||||||
<property name="label" translatable="yes"><empty></property>
|
<property name="label"><empty></property>
|
||||||
<property name="wrap_mode">word-char</property>
|
<property name="wrap_mode">word-char</property>
|
||||||
<property name="selectable">True</property>
|
<property name="selectable">True</property>
|
||||||
<property name="ellipsize">end</property>
|
<property name="ellipsize">end</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox3">
|
<object class="GtkHBox" id="hbox3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label6">
|
<object class="GtkLabel" id="label6">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Homepage:</property>
|
<property name="label" translatable="yes">Homepage:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLinkButton" id="plugin_homepage_linkbutton">
|
<object class="GtkLinkButton" id="plugin_homepage_linkbutton">
|
||||||
<property name="label" translatable="yes">homepage url</property>
|
<property name="label">homepage url</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -213,28 +232,35 @@
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox3">
|
<object class="GtkVBox" id="vbox3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox5">
|
<object class="GtkHBox" id="hbox5">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label7">
|
<object class="GtkLabel" id="label7">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Description:</property>
|
<property name="label" translatable="yes">Description:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -244,6 +270,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -251,56 +278,38 @@
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
<property name="shadow_type">in</property>
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">4</property>
|
<property name="position">4</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox3">
|
<object class="GtkHButtonBox" id="hbuttonbox3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">5</property>
|
<property name="spacing">5</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="uninstall_plugin_button">
|
<object class="GtkButton" id="uninstall_plugin_button">
|
||||||
|
<property name="label" translatable="yes">Uninstall</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<signal name="clicked" handler="on_uninstall_plugin_button_clicked"/>
|
<property name="image">image2</property>
|
||||||
<child>
|
<signal name="clicked" handler="on_uninstall_plugin_button_clicked" swapped="no"/>
|
||||||
<object class="GtkHBox" id="hbox6">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-cancel</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="uninstall_plugin_button_label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Uninstall</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -310,34 +319,12 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="configure_plugin_button">
|
<object class="GtkButton" id="configure_plugin_button">
|
||||||
|
<property name="label" translatable="yes">Configure</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<signal name="clicked" handler="on_configure_plugin_button_clicked"/>
|
<property name="image">image3</property>
|
||||||
<child>
|
<signal name="clicked" handler="on_configure_plugin_button_clicked" swapped="no"/>
|
||||||
<object class="GtkHBox" id="hbox7">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image6">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-preferences</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="configure_plugin_button_label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="label" translatable="yes">Configure</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -348,13 +335,14 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">5</property>
|
<property name="position">5</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="resize">True</property>
|
<property name="resize">True</property>
|
||||||
<property name="shrink">True</property>
|
<property name="shrink">False</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -362,6 +350,7 @@
|
||||||
<child type="tab">
|
<child type="tab">
|
||||||
<object class="GtkLabel" id="label1">
|
<object class="GtkLabel" id="label1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Installed</property>
|
<property name="label" translatable="yes">Installed</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -376,12 +365,15 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox1">
|
<object class="GtkHButtonBox" id="hbuttonbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">15</property>
|
<property name="spacing">15</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
|
@ -391,7 +383,7 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_close_button_clicked"/>
|
<signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -402,6 +394,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -531,6 +531,7 @@
|
||||||
<object class="GtkEventBox" id="eventbox1">
|
<object class="GtkEventBox" id="eventbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
||||||
|
<property name="visible_window">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label13">
|
<object class="GtkLabel" id="label13">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -1152,7 +1153,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkStatusbar" id="statusbar">
|
<object class="GtkStatusbar" id="statusbar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="has_resize_grip">False</property>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
|
|
@ -123,47 +123,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="remove_button">
|
<object class="GtkButton" id="remove_button">
|
||||||
|
<property name="label" translatable="yes">_Remove</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_remove_button_clicked"/>
|
<signal name="clicked" handler="on_remove_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment62">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2954">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image501">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-delete</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label245">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Remove</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -181,4 +148,8 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-delete</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,10 +1,95 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkAccelGroup" id="accelgroup1"/>
|
||||||
|
<object class="GtkImage" id="image10">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-help</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image11">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-dialog-question</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image12">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-properties</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image9">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-justify-fill</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-jump-to</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image13">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-disconnect</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image14">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-info</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-new</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-connect</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image4">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-add</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image5">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-find</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image6">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-network</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image7">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-properties</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image8">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-save</property>
|
||||||
|
<property name="icon-size">1</property>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="roster_window">
|
<object class="GtkWindow" id="roster_window">
|
||||||
<property name="width_request">85</property>
|
<property name="width_request">85</property>
|
||||||
<property name="height_request">200</property>
|
<property name="height_request">200</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="title" translatable="yes">Gajim</property>
|
<property name="title" translatable="yes">Gajim</property>
|
||||||
<property name="role">roster</property>
|
<property name="role">roster</property>
|
||||||
<property name="default_width">250</property>
|
<property name="default_width">250</property>
|
||||||
|
@ -12,30 +97,34 @@
|
||||||
<accel-groups>
|
<accel-groups>
|
||||||
<group name="accelgroup1"/>
|
<group name="accelgroup1"/>
|
||||||
</accel-groups>
|
</accel-groups>
|
||||||
<signal name="key_press_event" handler="on_roster_window_key_press_event"/>
|
<signal name="key-press-event" handler="on_roster_window_key_press_event" swapped="no"/>
|
||||||
<signal name="delete_event" handler="on_roster_window_delete_event"/>
|
<signal name="delete-event" handler="on_roster_window_delete_event" swapped="no"/>
|
||||||
<signal name="focus_in_event" handler="on_roster_window_focus_in_event"/>
|
<signal name="focus-in-event" handler="on_roster_window_focus_in_event" swapped="no"/>
|
||||||
<signal name="focus_out_event" handler="on_roster_window_focus_out_event"/>
|
<signal name="focus-out-event" handler="on_roster_window_focus_out_event" swapped="no"/>
|
||||||
<signal name="popup_menu" handler="on_roster_window_popup_menu"/>
|
<signal name="popup-menu" handler="on_roster_window_popup_menu" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="roster_vbox">
|
<object class="GtkVBox" id="roster_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuBar" id="menubar">
|
<object class="GtkMenuBar" id="menubar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="actions_menu">
|
<object class="GtkMenuItem" id="actions_menu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Actions</property>
|
<property name="label" translatable="yes">_Actions</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_actions_menuitem_activate"/>
|
<signal name="activate" handler="on_actions_menuitem_activate" swapped="no"/>
|
||||||
<child type="submenu">
|
<child type="submenu">
|
||||||
<object class="GtkMenu" id="actions_menu_menu">
|
<object class="GtkMenu" id="actions_menu_menu">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="new_chat_menuitem">
|
<object class="GtkImageMenuItem" id="new_chat_menuitem">
|
||||||
<property name="label" translatable="yes">_Start Chat...</property>
|
<property name="label" translatable="yes">_Start Chat...</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image1</property>
|
<property name="image">image1</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -45,6 +134,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="send_single_message_menuitem">
|
<object class="GtkImageMenuItem" id="send_single_message_menuitem">
|
||||||
<property name="label" translatable="yes">Send Single _Message...</property>
|
<property name="label" translatable="yes">Send Single _Message...</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image2</property>
|
<property name="image">image2</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -53,8 +143,9 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="join_gc_menuitem">
|
<object class="GtkImageMenuItem" id="join_gc_menuitem">
|
||||||
<property name="label" translatable="yes">Join _Group Chat...</property>
|
<property name="label" translatable="yes">Join _Group Chat</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image3</property>
|
<property name="image">image3</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -64,12 +155,14 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="add_new_contact_menuitem">
|
<object class="GtkImageMenuItem" id="add_new_contact_menuitem">
|
||||||
<property name="label" translatable="yes">Add _Contact...</property>
|
<property name="label" translatable="yes">Add _Contact...</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image4</property>
|
<property name="image">image4</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -80,6 +173,7 @@
|
||||||
<object class="GtkImageMenuItem" id="service_disco_menuitem">
|
<object class="GtkImageMenuItem" id="service_disco_menuitem">
|
||||||
<property name="label" translatable="yes">_Discover Services</property>
|
<property name="label" translatable="yes">_Discover Services</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image5</property>
|
<property name="image">image5</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -89,6 +183,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="advanced_menuitem">
|
<object class="GtkMenuItem" id="advanced_menuitem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Advanced</property>
|
<property name="label" translatable="yes">_Advanced</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -96,17 +191,19 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="separator1">
|
<object class="GtkSeparatorMenuItem" id="separator1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="quit_menuitem">
|
<object class="GtkImageMenuItem" id="quit_menuitem">
|
||||||
<property name="label">gtk-quit</property>
|
<property name="label">gtk-quit</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<accelerator key="Q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="Q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_quit_request"/>
|
<signal name="activate" handler="on_quit_request" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -116,27 +213,31 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="edit_menu">
|
<object class="GtkMenuItem" id="edit_menu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Edit</property>
|
<property name="label" translatable="yes">_Edit</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_edit_menuitem_activate"/>
|
<signal name="activate" handler="on_edit_menuitem_activate" swapped="no"/>
|
||||||
<child type="submenu">
|
<child type="submenu">
|
||||||
<object class="GtkMenu" id="edit_menu_menu">
|
<object class="GtkMenu" id="edit_menu_menu">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="accounts_menuitem">
|
<object class="GtkImageMenuItem" id="accounts_menuitem">
|
||||||
<property name="label" translatable="yes">_Accounts</property>
|
<property name="label" translatable="yes">_Accounts</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image6</property>
|
<property name="image">image6</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<accelerator key="A" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
|
<accelerator key="A" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_accounts_menuitem_activate"/>
|
<signal name="activate" handler="on_accounts_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="profile_avatar_menuitem">
|
<object class="GtkImageMenuItem" id="profile_avatar_menuitem">
|
||||||
<property name="label" translatable="yes">Profile, A_vatar</property>
|
<property name="label" translatable="yes">Profile, A_vatar</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image7</property>
|
<property name="image">image7</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
|
@ -146,27 +247,30 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="separator2">
|
<object class="GtkSeparatorMenuItem" id="separator2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="preferences_menuitem">
|
<object class="GtkImageMenuItem" id="preferences_menuitem">
|
||||||
<property name="label">gtk-preferences</property>
|
<property name="label">gtk-preferences</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<accelerator key="P" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="P" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_preferences_menuitem_activate"/>
|
<signal name="activate" handler="on_preferences_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="plugins_menuitem">
|
<object class="GtkImageMenuItem" id="plugins_menuitem">
|
||||||
<property name="label" translatable="yes">P_lugins</property>
|
<property name="label" translatable="yes">P_lugins</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image13</property>
|
<property name="image">image13</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<signal name="activate" handler="on_plugins_menuitem_activate"/>
|
<signal name="activate" handler="on_plugins_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -176,75 +280,84 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="view_menu">
|
<object class="GtkMenuItem" id="view_menu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_View</property>
|
<property name="label" translatable="yes">_View</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_view_menu_activate"/>
|
<signal name="activate" handler="on_view_menu_activate" swapped="no"/>
|
||||||
<child type="submenu">
|
<child type="submenu">
|
||||||
<object class="GtkMenu" id="view_menu_menu">
|
<object class="GtkMenu" id="view_menu_menu">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckMenuItem" id="show_offline_contacts_menuitem">
|
<object class="GtkCheckMenuItem" id="show_offline_contacts_menuitem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Show _Offline Contacts</property>
|
<property name="label" translatable="yes">Show _Offline Contacts</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<accelerator key="O" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="O" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_show_offline_contacts_menuitem_activate"/>
|
<signal name="activate" handler="on_show_offline_contacts_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckMenuItem" id="show_only_active_contacts_menuitem">
|
<object class="GtkCheckMenuItem" id="show_only_active_contacts_menuitem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Show Only _Active Contacts</property>
|
<property name="label" translatable="yes">Show Only _Active Contacts</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="Y" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_show_only_active_contacts_menuitem_activate"/>
|
<signal name="activate" handler="on_show_only_active_contacts_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckMenuItem" id="show_transports_menuitem">
|
<object class="GtkCheckMenuItem" id="show_transports_menuitem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">Show T_ransports</property>
|
<property name="label" translatable="yes">Show T_ransports</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="on_show_transports_menuitem_activate"/>
|
<signal name="activate" handler="on_show_transports_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckMenuItem" id="show_roster_menuitem">
|
<object class="GtkCheckMenuItem" id="show_roster_menuitem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="label" translatable="yes">Show _Roster</property>
|
<property name="label" translatable="yes">Show _Roster</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="active">True</property>
|
<property name="active">True</property>
|
||||||
<accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="toggled" handler="on_show_roster_menuitem_toggled"/>
|
<signal name="toggled" handler="on_show_roster_menuitem_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="separator3">
|
<object class="GtkSeparatorMenuItem" id="separator3">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="file_transfers_menuitem">
|
<object class="GtkImageMenuItem" id="file_transfers_menuitem">
|
||||||
<property name="label" translatable="yes">File _Transfers</property>
|
<property name="label" translatable="yes">File _Transfers</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image8</property>
|
<property name="image">image8</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<accelerator key="T" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
<accelerator key="T" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||||
<signal name="activate" handler="on_file_transfers_menuitem_activate"/>
|
<signal name="activate" handler="on_file_transfers_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="history_menuitem">
|
<object class="GtkImageMenuItem" id="history_menuitem">
|
||||||
<property name="label" translatable="yes">_History</property>
|
<property name="label" translatable="yes">_History</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image9</property>
|
<property name="image">image9</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<signal name="activate" handler="on_history_menuitem_activate"/>
|
<signal name="activate" handler="on_history_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -254,69 +367,77 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="help_menu">
|
<object class="GtkMenuItem" id="help_menu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Help</property>
|
<property name="label" translatable="yes">_Help</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<child type="submenu">
|
<child type="submenu">
|
||||||
<object class="GtkMenu" id="help_menu_menu">
|
<object class="GtkMenu" id="help_menu_menu">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="contents_menuitem">
|
<object class="GtkImageMenuItem" id="contents_menuitem">
|
||||||
<property name="label" translatable="yes">_Contents</property>
|
<property name="label" translatable="yes">_Contents</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="tooltip_text" translatable="yes">Help online</property>
|
<property name="tooltip_text" translatable="yes">Help online</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image10</property>
|
<property name="image">image10</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<signal name="activate" handler="on_contents_menuitem_activate"/>
|
<signal name="activate" handler="on_contents_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="faq_menuitem">
|
<object class="GtkImageMenuItem" id="faq_menuitem">
|
||||||
<property name="label" translatable="yes">_FAQ</property>
|
<property name="label" translatable="yes">_FAQ</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="tooltip_text" translatable="yes">Frequently Asked Questions (online)</property>
|
<property name="tooltip_text" translatable="yes">Frequently Asked Questions (online)</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image11</property>
|
<property name="image">image11</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<signal name="activate" handler="on_faq_menuitem_activate"/>
|
<signal name="activate" handler="on_faq_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="keyboard_shortcuts_menuitem">
|
<object class="GtkImageMenuItem" id="keyboard_shortcuts_menuitem">
|
||||||
<property name="label" translatable="yes">Keyboard Shortcuts</property>
|
<property name="label" translatable="yes">Keyboard Shortcuts</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image14</property>
|
<property name="image">image14</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<signal name="activate" handler="on_keyboard_shortcuts_menuitem_activate"/>
|
<signal name="activate" handler="on_keyboard_shortcuts_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="menuitem1">
|
<object class="GtkSeparatorMenuItem" id="menuitem1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="features_menuitem">
|
<object class="GtkImageMenuItem" id="features_menuitem">
|
||||||
<property name="label" translatable="yes">Fea_tures</property>
|
<property name="label" translatable="yes">Fea_tures</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image12</property>
|
<property name="image">image12</property>
|
||||||
<property name="use_stock">False</property>
|
<property name="use_stock">False</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<signal name="activate" handler="on_features_menuitem_activate"/>
|
<signal name="activate" handler="on_features_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="about_menuitem">
|
<object class="GtkImageMenuItem" id="about_menuitem">
|
||||||
<property name="label">gtk-about</property>
|
<property name="label">gtk-about</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<property name="accel_group">accelgroup1</property>
|
<property name="accel_group">accelgroup1</property>
|
||||||
<signal name="activate" handler="on_about_menuitem_activate"/>
|
<signal name="activate" handler="on_about_menuitem_activate" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -335,24 +456,24 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<signal name="notify" handler="on_roster_hpaned_notify"/>
|
<signal name="notify" handler="on_roster_hpaned_notify" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="roster_vbox2">
|
<object class="GtkVBox" id="roster_vbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="rfilter_entry">
|
<object class="GtkEntry" id="rfilter_entry">
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="editable">False</property>
|
<property name="editable">False</property>
|
||||||
<property name="primary_icon_stock">gtk-clear</property>
|
<property name="primary_icon_stock">gtk-clear</property>
|
||||||
<property name="primary_icon_activatable">True</property>
|
<signal name="changed" handler="on_rfilter_entry_changed" swapped="no"/>
|
||||||
<signal name="changed" handler="on_rfilter_entry_changed"/>
|
<signal name="icon-press" handler="on_rfilter_entry_icon_press" swapped="no"/>
|
||||||
<signal name="icon_press" handler="on_rfilter_entry_icon_press"/>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -361,36 +482,40 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">never</property>
|
<property name="hscrollbar_policy">never</property>
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeView" id="roster_treeview">
|
<object class="GtkTreeView" id="roster_treeview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
<property name="has_tooltip">True</property>
|
||||||
<property name="headers_visible">False</property>
|
<property name="headers_visible">False</property>
|
||||||
<property name="reorderable">True</property>
|
<property name="reorderable">True</property>
|
||||||
<signal name="row_expanded" handler="on_roster_treeview_row_expanded"/>
|
<signal name="row-expanded" handler="on_roster_treeview_row_expanded" swapped="no"/>
|
||||||
<signal name="key_press_event" handler="on_roster_treeview_key_press_event"/>
|
<signal name="key-press-event" handler="on_roster_treeview_key_press_event" swapped="no"/>
|
||||||
<signal name="scroll_event" handler="on_roster_treeview_scroll_event"/>
|
<signal name="scroll-event" handler="on_roster_treeview_scroll_event" swapped="no"/>
|
||||||
<signal name="leave_notify_event" handler="on_roster_treeview_leave_notify_event"/>
|
<signal name="leave-notify-event" handler="on_roster_treeview_leave_notify_event" swapped="no"/>
|
||||||
<signal name="button_press_event" handler="on_roster_treeview_button_press_event"/>
|
<signal name="button-press-event" handler="on_roster_treeview_button_press_event" swapped="no"/>
|
||||||
<signal name="row_activated" handler="on_roster_treeview_row_activated"/>
|
<signal name="row-activated" handler="on_roster_treeview_row_activated" swapped="no"/>
|
||||||
<signal name="row_collapsed" handler="on_roster_treeview_row_collapsed"/>
|
<signal name="row-collapsed" handler="on_roster_treeview_row_collapsed" swapped="no"/>
|
||||||
<signal name="motion_notify_event" handler="on_roster_treeview_motion_notify_event"/>
|
<signal name="motion-notify-event" handler="on_roster_treeview_motion_notify_event" swapped="no"/>
|
||||||
<signal name="button_release_event" handler="on_roster_treeview_button_release_event"/>
|
<signal name="button-release-event" handler="on_roster_treeview_button_release_event" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="status_combobox">
|
<object class="GtkComboBox" id="status_combobox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<signal name="changed" handler="on_status_combobox_changed"/>
|
<property name="can_focus">False</property>
|
||||||
|
<signal name="changed" handler="on_status_combobox_changed" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -405,81 +530,12 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkAccelGroup" id="accelgroup1"/>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-jump-to</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-new</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image3">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-connect</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image4">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-add</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-find</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image6">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-network</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image7">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-properties</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image8">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-save</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image9">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-justify-fill</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image10">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-help</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image11">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-dialog-question</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image12">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-properties</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image13">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-disconnect</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
<object class="GtkImage" id="image14">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-info</property>
|
|
||||||
<property name="icon-size">1</property>
|
|
||||||
</object>
|
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -52,50 +52,15 @@
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="add_contact_button">
|
<object class="GtkButton" id="add_contact_button">
|
||||||
|
<property name="label" translatable="yes">_Add contact</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_add_contact_button_clicked"/>
|
<signal name="clicked" handler="on_add_contact_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="stock">gtk-add</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="label" translatable="yes">_Add contact</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -105,50 +70,15 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="information_button">
|
<object class="GtkButton" id="information_button">
|
||||||
|
<property name="label" translatable="yes">_Information</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
|
<property name="image">image3</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_information_button_clicked"/>
|
<signal name="clicked" handler="on_information_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment3">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image3">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="stock">gtk-info</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label2">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
|
||||||
<property name="label" translatable="yes">_Information</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -158,47 +88,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="search_button">
|
<object class="GtkButton" id="search_button">
|
||||||
|
<property name="label" translatable="yes">_Search</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_search_button_clicked"/>
|
<signal name="clicked" handler="on_search_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox5">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-find</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label58">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Search</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -231,4 +128,16 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-add</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-find</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image3">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-dialog-info</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-jump-to</property>
|
||||||
|
</object>
|
||||||
<object class="GtkListStore" id="liststore1">
|
<object class="GtkListStore" id="liststore1">
|
||||||
<columns>
|
<columns>
|
||||||
<!-- column-name item -->
|
<!-- column-name item -->
|
||||||
|
@ -9,27 +13,31 @@
|
||||||
</columns>
|
</columns>
|
||||||
</object>
|
</object>
|
||||||
<object class="GtkWindow" id="service_discovery_window">
|
<object class="GtkWindow" id="service_discovery_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">6</property>
|
<property name="border_width">6</property>
|
||||||
<property name="role">Service Discovery</property>
|
<property name="role">Service Discovery</property>
|
||||||
<property name="default_width">550</property>
|
<property name="default_width">550</property>
|
||||||
<property name="default_height">420</property>
|
<property name="default_height">420</property>
|
||||||
<property name="type_hint">dialog</property>
|
<property name="type_hint">dialog</property>
|
||||||
<signal name="destroy" handler="on_service_discovery_window_destroy"/>
|
<signal name="destroy" handler="on_service_discovery_window_destroy" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox11">
|
<object class="GtkVBox" id="vbox11">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEventBox" id="banner_agent_eventbox">
|
<object class="GtkEventBox" id="banner_agent_eventbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="banner_agent_hbox">
|
<object class="GtkHBox" id="banner_agent_hbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="banner_agent_label">
|
<object class="GtkLabel" id="banner_agent_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0.05000000074505806</property>
|
<property name="xalign">0.05000000074505806</property>
|
||||||
<property name="ypad">6</property>
|
<property name="ypad">6</property>
|
||||||
<property name="label"><span weight="heavy" size="large">Agent name</span>
|
<property name="label"><span weight="heavy" size="large">Agent name</span>
|
||||||
|
@ -37,18 +45,22 @@ Agent JID - node</property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage" id="banner_agent_icon">
|
<object class="GtkImage" id="banner_agent_icon">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xpad">6</property>
|
<property name="xpad">6</property>
|
||||||
<property name="ypad">6</property>
|
<property name="ypad">6</property>
|
||||||
<property name="stock">gtk-missing-image</property>
|
<property name="stock">gtk-missing-image</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -64,99 +76,56 @@ Agent JID - node</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTable" id="address_table">
|
<object class="GtkTable" id="address_table">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="n_rows">3</property>
|
<property name="n_rows">3</property>
|
||||||
<property name="n_columns">3</property>
|
<property name="n_columns">3</property>
|
||||||
<property name="column_spacing">6</property>
|
<property name="column_spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBoxEntry" id="address_comboboxentry">
|
<placeholder/>
|
||||||
<property name="visible">True</property>
|
</child>
|
||||||
<property name="model">liststore1</property>
|
<child>
|
||||||
<property name="text_column">0</property>
|
<placeholder/>
|
||||||
<signal name="changed" handler="on_address_comboboxentry_changed"/>
|
</child>
|
||||||
</object>
|
<child>
|
||||||
<packing>
|
<placeholder/>
|
||||||
<property name="left_attach">1</property>
|
|
||||||
<property name="right_attach">2</property>
|
|
||||||
<property name="top_attach">1</property>
|
|
||||||
<property name="bottom_attach">2</property>
|
|
||||||
<property name="y_options">GTK_FILL</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="browse_button">
|
<object class="GtkButton" id="browse_button">
|
||||||
|
<property name="label" translatable="yes">G_o</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<signal name="clicked" handler="on_go_button_clicked"/>
|
<property name="image">image1</property>
|
||||||
<child>
|
<property name="use_underline">True</property>
|
||||||
<object class="GtkAlignment" id="alignment93">
|
<signal name="clicked" handler="on_go_button_clicked" swapped="no"/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2995">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image1148">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-jump-to</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label362">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">G_o</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">2</property>
|
<property name="left_attach">2</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</property>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label224">
|
<object class="GtkLabel" id="label224">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="label" translatable="yes">_Address:</property>
|
<property name="label" translatable="yes">_Address:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="mnemonic_widget">address_comboboxentry</property>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="bottom_attach">3</property>
|
<property name="bottom_attach">3</property>
|
||||||
<property name="x_options">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<placeholder/>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -164,29 +133,31 @@ Agent JID - node</property>
|
||||||
<object class="GtkScrolledWindow" id="services_scrollwin">
|
<object class="GtkScrolledWindow" id="services_scrollwin">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">etched-in</property>
|
<property name="shadow_type">etched-in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTreeView" id="services_treeview">
|
<object class="GtkTreeView" id="services_treeview">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="headers_visible">False</property>
|
<property name="headers_visible">False</property>
|
||||||
<signal name="row_activated" handler="on_services_treeview_row_activated"/>
|
<signal name="row-activated" handler="on_services_treeview_row_activated" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2994">
|
<object class="GtkHBox" id="hbox2994">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkProgressBar" id="services_progressbar">
|
<object class="GtkProgressBar" id="services_progressbar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="no_show_all">True</property>
|
<property name="no_show_all">True</property>
|
||||||
<property name="pulse_step">0.10000000149</property>
|
<property name="pulse_step">0.10000000149</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -199,14 +170,18 @@ Agent JID - node</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label363">
|
<object class="GtkLabel" id="label363">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="action_buttonbox">
|
<object class="GtkHBox" id="action_buttonbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="close_button">
|
<object class="GtkButton" id="close_button">
|
||||||
|
@ -217,7 +192,7 @@ Agent JID - node</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_close_button_clicked"/>
|
<signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -229,12 +204,14 @@ Agent JID - node</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="padding">2</property>
|
<property name="padding">2</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
|
|
|
@ -35,47 +35,14 @@
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="cancel_button">
|
<object class="GtkButton" id="cancel_button">
|
||||||
|
<property name="label" translatable="yes">_Cancel</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image2</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment18">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox22">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image107">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-cancel</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label34">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Cancel</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -85,48 +52,15 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="ok_button">
|
<object class="GtkButton" id="ok_button">
|
||||||
|
<property name="label" translatable="yes">_OK</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="has_default">True</property>
|
<property name="has_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="image">image1</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_ok_button_clicked"/>
|
<signal name="clicked" handler="on_ok_button_clicked"/>
|
||||||
<child>
|
|
||||||
<object class="GtkAlignment" id="alignment17">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox21">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image106">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-ok</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label33">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_OK</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -143,4 +77,12 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-apply</property>
|
||||||
|
</object>
|
||||||
|
<object class="GtkImage" id="image2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="stock">gtk-cancel</property>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="chat_with_menuitem">
|
<object class="GtkImageMenuItem" id="chat_with_menuitem">
|
||||||
<property name="label" translatable="yes">_Start Chat</property>
|
<property name="label" translatable="yes">_Start Chat...</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image2</property>
|
<property name="image">image2</property>
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="join_gc_menuitem">
|
<object class="GtkImageMenuItem" id="join_gc_menuitem">
|
||||||
<property name="label" translatable="yes">_Group Chat</property>
|
<property name="label" translatable="yes">Join _Group Chat</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image3</property>
|
<property name="image">image3</property>
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImageMenuItem" id="single_message_menuitem">
|
<object class="GtkImageMenuItem" id="single_message_menuitem">
|
||||||
<property name="label" translatable="yes">Send Single _Message</property>
|
<property name="label" translatable="yes">Send Single _Message...</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="image">image4</property>
|
<property name="image">image4</property>
|
||||||
|
|
|
@ -201,6 +201,7 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEventBox" id="status_label_eventbox">
|
<object class="GtkEventBox" id="status_label_eventbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="visible_window">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="status_label">
|
<object class="GtkLabel" id="status_label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -942,6 +943,7 @@
|
||||||
<object class="GtkEventBox" id="eventbox1">
|
<object class="GtkEventBox" id="eventbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
||||||
|
<property name="visible_window">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label13">
|
<object class="GtkLabel" id="label13">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
|
@ -1,20 +1,26 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="2.16"/>
|
<!-- interface-requires gtk+ 3.0 -->
|
||||||
<!-- interface-naming-policy toplevel-contextual -->
|
<object class="GtkImage" id="image1">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="stock">gtk-apply</property>
|
||||||
|
</object>
|
||||||
<object class="GtkWindow" id="xml_console_window">
|
<object class="GtkWindow" id="xml_console_window">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">12</property>
|
<property name="border_width">12</property>
|
||||||
<property name="default_width">550</property>
|
<property name="default_width">550</property>
|
||||||
<property name="default_height">450</property>
|
<property name="default_height">450</property>
|
||||||
<signal name="destroy" handler="on_xml_console_window_destroy"/>
|
<signal name="destroy" handler="on_xml_console_window_destroy" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="vbox">
|
<object class="GtkVBox" id="vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label342">
|
<object class="GtkLabel" id="label342">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><b>Jabber Traffic</b></property>
|
<property name="label" translatable="yes"><b>Jabber Traffic</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
|
@ -29,8 +35,6 @@
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow43">
|
<object class="GtkScrolledWindow" id="scrolledwindow43">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">automatic</property>
|
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="stanzas_log_textview">
|
<object class="GtkTextView" id="stanzas_log_textview">
|
||||||
|
@ -42,12 +46,15 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2988">
|
<object class="GtkHBox" id="hbox2988">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="enable_checkbutton">
|
<object class="GtkCheckButton" id="enable_checkbutton">
|
||||||
<property name="label" translatable="yes" comments="XML Console enable checkbutton">_Enable</property>
|
<property name="label" translatable="yes" comments="XML Console enable checkbutton">_Enable</property>
|
||||||
|
@ -55,23 +62,16 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_enable_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_enable_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">True</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label351">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="clear_button">
|
<object class="GtkButton" id="clear_button">
|
||||||
<property name="label">gtk-clear</property>
|
<property name="label">gtk-clear</property>
|
||||||
|
@ -79,12 +79,12 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_stock">True</property>
|
<property name="use_stock">True</property>
|
||||||
<signal name="clicked" handler="on_clear_button_clicked"/>
|
<signal name="clicked" handler="on_clear_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="fill">False</property>
|
<property name="fill">False</property>
|
||||||
<property name="position">2</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -102,21 +102,25 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="input_vbox1">
|
<object class="GtkVBox" id="input_vbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox1">
|
<object class="GtkHBox" id="hbox1">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="in_stanza_checkbutton">
|
<object class="GtkCheckButton" id="in_stanza_checkbutton">
|
||||||
<property name="label" translatable="yes">Hide IN stanzas</property>
|
<property name="label" translatable="yes">Hide IN stanzas</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_in_stanza_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_in_stanza_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -126,10 +130,13 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_out_stanza_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_out_stanza_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -139,10 +146,13 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_presence_stanza_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_presence_stanza_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -152,10 +162,13 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_iq_stanza_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_iq_stanza_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -165,21 +178,27 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="xalign">0.5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
<signal name="toggled" handler="on_message_stanza_checkbutton_toggled"/>
|
<signal name="toggled" handler="on_message_stanza_checkbutton_toggled" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">4</property>
|
<property name="position">4</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHBox" id="hbox2">
|
<object class="GtkHBox" id="hbox2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
|
@ -188,6 +207,8 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -196,6 +217,7 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkLabel" id="label2">
|
<object class="GtkLabel" id="label2">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><b>Filter</b></property>
|
<property name="label" translatable="yes"><b>Filter</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
|
@ -204,6 +226,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">3</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
@ -212,18 +235,17 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<signal name="activate" handler="on_expander_activate"/>
|
<signal name="activate" handler="on_expander_activate" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkVBox" id="input_vbox">
|
<object class="GtkVBox" id="input_vbox">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow42">
|
<object class="GtkScrolledWindow" id="scrolledwindow42">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="hscrollbar_policy">never</property>
|
<property name="hscrollbar_policy">never</property>
|
||||||
<property name="vscrollbar_policy">automatic</property>
|
|
||||||
<property name="shadow_type">in</property>
|
<property name="shadow_type">in</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkTextView" id="input_textview">
|
<object class="GtkTextView" id="input_textview">
|
||||||
|
@ -235,12 +257,15 @@
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkHButtonBox" id="hbuttonbox31">
|
<object class="GtkHButtonBox" id="hbuttonbox31">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<property name="layout_style">end</property>
|
<property name="layout_style">end</property>
|
||||||
<child>
|
<child>
|
||||||
|
@ -251,7 +276,7 @@
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="tooltip_text" translatable="yes">Info/Query</property>
|
<property name="tooltip_text" translatable="yes">Info/Query</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_iq_button_clicked"/>
|
<signal name="clicked" handler="on_iq_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -266,7 +291,7 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_presence_button_clicked"/>
|
<signal name="clicked" handler="on_presence_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -281,7 +306,7 @@
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="clicked" handler="on_message_button_clicked"/>
|
<signal name="clicked" handler="on_message_button_clicked" swapped="no"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -291,47 +316,14 @@
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="send_button">
|
<object class="GtkButton" id="send_button">
|
||||||
|
<property name="label" translatable="yes">_Send</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="can_default">True</property>
|
<property name="can_default">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
<signal name="clicked" handler="on_send_button_clicked"/>
|
<property name="image">image1</property>
|
||||||
<child>
|
<property name="use_underline">True</property>
|
||||||
<object class="GtkAlignment" id="alignment80">
|
<signal name="clicked" handler="on_send_button_clicked" swapped="no"/>
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="xscale">0</property>
|
|
||||||
<property name="yscale">0</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkHBox" id="hbox2980">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="spacing">2</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage" id="image833">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="stock">gtk-apply</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">0</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label341">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="label" translatable="yes">_Send</property>
|
|
||||||
<property name="use_underline">True</property>
|
|
||||||
</object>
|
|
||||||
<packing>
|
|
||||||
<property name="expand">False</property>
|
|
||||||
<property name="fill">False</property>
|
|
||||||
<property name="position">1</property>
|
|
||||||
</packing>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -351,6 +343,7 @@
|
||||||
<child type="label">
|
<child type="label">
|
||||||
<object class="GtkLabel" id="label343">
|
<object class="GtkLabel" id="label343">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes"><b>XML Input</b></property>
|
<property name="label" translatable="yes"><b>XML Input</b></property>
|
||||||
<property name="use_markup">True</property>
|
<property name="use_markup">True</property>
|
||||||
|
@ -359,6 +352,7 @@
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
<property name="position">4</property>
|
<property name="position">4</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
21
data/other/dh4096.pem
Normal file
21
data/other/dh4096.pem
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
-----BEGIN DH PARAMETERS-----
|
||||||
|
MIICCAKCAgEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
|
||||||
|
IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
|
||||||
|
awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
|
||||||
|
mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
|
||||||
|
fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
|
||||||
|
5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
|
||||||
|
fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
|
||||||
|
ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEI
|
||||||
|
ARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O
|
||||||
|
+S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBI
|
||||||
|
HNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0BjGZ//////////8CAQI=
|
||||||
|
-----END DH PARAMETERS-----
|
||||||
|
|
||||||
|
"4096-bit MODP Group" from RFC3526, Section 5.
|
||||||
|
|
||||||
|
The prime is: 2^4096 - 2^4032 - 1 + 2^64 * { [2^3966 pi] + 240904 }
|
||||||
|
|
||||||
|
RFC3526 specifies a generator of 2.
|
||||||
|
|
||||||
|
The generation of the group is described in RFC 2412.
|
|
@ -182,8 +182,10 @@ Section "Gajim" SecGajim
|
||||||
File "bin\library.zip"
|
File "bin\library.zip"
|
||||||
File "bin\pangocairo.pyd"
|
File "bin\pangocairo.pyd"
|
||||||
File "bin\pango.pyd"
|
File "bin\pango.pyd"
|
||||||
|
File "bin\pycurl.pyd"
|
||||||
File "bin\pyexpat.pyd"
|
File "bin\pyexpat.pyd"
|
||||||
File "bin\python27.dll"
|
File "bin\python27.dll"
|
||||||
|
File "bin\pythoncom27.dll"
|
||||||
File "bin\pywintypes27.dll"
|
File "bin\pywintypes27.dll"
|
||||||
File "bin\OpenSSL.rand.pyd"
|
File "bin\OpenSSL.rand.pyd"
|
||||||
File "bin\select.pyd"
|
File "bin\select.pyd"
|
||||||
|
@ -194,8 +196,10 @@ Section "Gajim" SecGajim
|
||||||
File "bin\win32api.pyd"
|
File "bin\win32api.pyd"
|
||||||
File "bin\win32file.pyd"
|
File "bin\win32file.pyd"
|
||||||
File "bin\win32pipe.pyd"
|
File "bin\win32pipe.pyd"
|
||||||
|
File "bin\win32ui.pyd"
|
||||||
File "bin\winsound.pyd"
|
File "bin\winsound.pyd"
|
||||||
File "msvcr90.dll"
|
File "msvcr90.dll"
|
||||||
|
File /r "bin\win32com"
|
||||||
|
|
||||||
WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
|
WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
|
||||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gajim" "DisplayName" "Gajim"
|
||||||
|
@ -530,6 +534,7 @@ Section "Uninstall"
|
||||||
RMDir /r "$INSTDIR\bin\gtk\lib"
|
RMDir /r "$INSTDIR\bin\gtk\lib"
|
||||||
RMDir /r "$INSTDIR\bin\gtk\share"
|
RMDir /r "$INSTDIR\bin\gtk\share"
|
||||||
RMDir "$INSTDIR\bin\gtk"
|
RMDir "$INSTDIR\bin\gtk"
|
||||||
|
RMDir "$INSTDIR\bin\win32com"
|
||||||
Delete "$INSTDIR\bin\_bsddb.pyd"
|
Delete "$INSTDIR\bin\_bsddb.pyd"
|
||||||
Delete "$INSTDIR\bin\_ctypes.pyd"
|
Delete "$INSTDIR\bin\_ctypes.pyd"
|
||||||
Delete "$INSTDIR\bin\_hashlib.pyd"
|
Delete "$INSTDIR\bin\_hashlib.pyd"
|
||||||
|
@ -558,8 +563,10 @@ Section "Uninstall"
|
||||||
Delete "$INSTDIR\bin\OpenSSL.SSL.pyd"
|
Delete "$INSTDIR\bin\OpenSSL.SSL.pyd"
|
||||||
Delete "$INSTDIR\bin\pango.pyd"
|
Delete "$INSTDIR\bin\pango.pyd"
|
||||||
Delete "$INSTDIR\bin\pangocairo.pyd"
|
Delete "$INSTDIR\bin\pangocairo.pyd"
|
||||||
|
Delete "$INSTDIR\bin\pycurl.pyd"
|
||||||
Delete "$INSTDIR\bin\pyexpat.pyd"
|
Delete "$INSTDIR\bin\pyexpat.pyd"
|
||||||
Delete "$INSTDIR\bin\python27.dll"
|
Delete "$INSTDIR\bin\python27.dll"
|
||||||
|
Delete "$INSTDIR\bin\pythoncom27.dll"
|
||||||
Delete "$INSTDIR\bin\pywintypes27.dll"
|
Delete "$INSTDIR\bin\pywintypes27.dll"
|
||||||
Delete "$INSTDIR\bin\select.pyd"
|
Delete "$INSTDIR\bin\select.pyd"
|
||||||
Delete "$INSTDIR\bin\sqlite3.dll"
|
Delete "$INSTDIR\bin\sqlite3.dll"
|
||||||
|
@ -568,6 +575,7 @@ Section "Uninstall"
|
||||||
Delete "$INSTDIR\bin\win32api.pyd"
|
Delete "$INSTDIR\bin\win32api.pyd"
|
||||||
Delete "$INSTDIR\bin\win32file.pyd"
|
Delete "$INSTDIR\bin\win32file.pyd"
|
||||||
Delete "$INSTDIR\bin\win32pipe.pyd"
|
Delete "$INSTDIR\bin\win32pipe.pyd"
|
||||||
|
Delete "$INSTDIR\bin\win32ui.pyd"
|
||||||
Delete "$INSTDIR\bin\winsound.pyd"
|
Delete "$INSTDIR\bin\winsound.pyd"
|
||||||
Delete "$INSTDIR\bin\msvcr90.dll"
|
Delete "$INSTDIR\bin\msvcr90.dll"
|
||||||
RMDir /r "$INSTDIR\bin"
|
RMDir /r "$INSTDIR\bin"
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 209 B |
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
if [ ! $PYTHON ]; then
|
if [ ! $PYTHON ]; then
|
||||||
PYTHON="python";
|
PYTHON="python3";
|
||||||
fi
|
fi
|
||||||
cd "$(dirname $0)/src"
|
cd "$(dirname $0)/src"
|
||||||
exec $PYTHON -OOt gajim.py "$@"
|
exec $PYTHON -OOt gajim.py "$@"
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
from acronyms_expander import AcronymsExpanderPlugin
|
from .acronyms_expander import AcronymsExpanderPlugin
|
||||||
|
|
|
@ -26,8 +26,8 @@ Acronyms expander plugin.
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
import gobject
|
from gi.repository import GObject
|
||||||
|
|
||||||
from plugins import GajimPlugin
|
from plugins import GajimPlugin
|
||||||
from plugins.helpers import log, log_calls
|
from plugins.helpers import log, log_calls
|
||||||
|
@ -62,7 +62,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
||||||
|
|
||||||
@log_calls('AcronymsExpanderPlugin')
|
@log_calls('AcronymsExpanderPlugin')
|
||||||
def get_own_acronyms_list(self):
|
def get_own_acronyms_list(self):
|
||||||
data_file = self.local_file_path('acronyms.py')
|
data_file = self.local_file_path('acronyms')
|
||||||
data = open(data_file, 'r')
|
data = open(data_file, 'r')
|
||||||
acronyms = eval(data.read())
|
acronyms = eval(data.read())
|
||||||
data.close()
|
data.close()
|
||||||
|
@ -76,7 +76,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
||||||
#assert isinstance(tb,gtk.TextBuffer)
|
#assert isinstance(tb,gtk.TextBuffer)
|
||||||
ACRONYMS = self.config['ACRONYMS']
|
ACRONYMS = self.config['ACRONYMS']
|
||||||
INVOKER = self.config['INVOKER']
|
INVOKER = self.config['INVOKER']
|
||||||
t = tb.get_text(tb.get_start_iter(), tb.get_end_iter())
|
t = tb.get_text(tb.get_start_iter(), tb.get_end_iter(), True)
|
||||||
#log.debug('%s %d'%(t, len(t)))
|
#log.debug('%s %d'%(t, len(t)))
|
||||||
if t and t[-1] == INVOKER:
|
if t and t[-1] == INVOKER:
|
||||||
#log.debug('changing msg text')
|
#log.debug('changing msg text')
|
||||||
|
@ -87,7 +87,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
||||||
#log.debug('head: %s'%(head))
|
#log.debug('head: %s'%(head))
|
||||||
t = ''.join((base, sep, head, INVOKER))
|
t = ''.join((base, sep, head, INVOKER))
|
||||||
#log.debug("setting text: '%s'"%(t))
|
#log.debug("setting text: '%s'"%(t))
|
||||||
gobject.idle_add(tb.set_text, t)
|
GObject.idle_add(tb.set_text, t)
|
||||||
|
|
||||||
@log_calls('AcronymsExpanderPlugin')
|
@log_calls('AcronymsExpanderPlugin')
|
||||||
def connect_with_chat_control_base(self, chat_control):
|
def connect_with_chat_control_base(self, chat_control):
|
||||||
|
|
|
@ -407,7 +407,7 @@ if dbus_support.supported:
|
||||||
return DBUS_DICT_SV()
|
return DBUS_DICT_SV()
|
||||||
jid = self._get_real_jid(jid)
|
jid = self._get_real_jid(jid)
|
||||||
|
|
||||||
cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
|
cached_vcard = list(gajim.connections.values())[0].get_cached_vcard(jid)
|
||||||
if cached_vcard:
|
if cached_vcard:
|
||||||
return get_dbus_struct(cached_vcard)
|
return get_dbus_struct(cached_vcard)
|
||||||
|
|
||||||
|
@ -428,7 +428,7 @@ if dbus_support.supported:
|
||||||
def account_info(self, account):
|
def account_info(self, account):
|
||||||
'''show info on account: resource, jid, nick, prio, message'''
|
'''show info on account: resource, jid, nick, prio, message'''
|
||||||
result = DBUS_DICT_SS()
|
result = DBUS_DICT_SS()
|
||||||
if gajim.connections.has_key(account):
|
if account in gajim.connections:
|
||||||
# account is valid
|
# account is valid
|
||||||
con = gajim.connections[account]
|
con = gajim.connections[account]
|
||||||
index = con.connected
|
index = con.connected
|
||||||
|
@ -508,7 +508,7 @@ if dbus_support.supported:
|
||||||
def prefs_store(self):
|
def prefs_store(self):
|
||||||
try:
|
try:
|
||||||
gajim.interface.save_config()
|
gajim.interface.save_config()
|
||||||
except Exception, e:
|
except Exception:
|
||||||
return DBUS_BOOLEAN(False)
|
return DBUS_BOOLEAN(False)
|
||||||
return DBUS_BOOLEAN(True)
|
return DBUS_BOOLEAN(True)
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,9 @@ if 'gtk' in os.listdir('.'):
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
'build_exe': {
|
'build_exe': {
|
||||||
'includes': ['gtk.keysyms', 'dumbdbm', 'dbhash', 'bsddb', 'new',
|
'includes': ['Gdk.KEY_, 'dumbdbm', 'dbhash', 'bsddb', 'new',
|
||||||
'goocanvas', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
|
'goocanvas', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
|
||||||
'numbers'],
|
'numbers', 'win32com.client', 'win32com.server'],
|
||||||
'base': 'Win32GUI',
|
'base': 'Win32GUI',
|
||||||
'bin_excludes': [
|
'bin_excludes': [
|
||||||
'iconv.dll', 'intl.dll', 'libatk-1.0-0.dll',
|
'iconv.dll', 'intl.dll', 'libatk-1.0-0.dll',
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
# FIXME: think if we need caching command list. it may be wrong if there will
|
# FIXME: think if we need caching command list. it may be wrong if there will
|
||||||
# be entities that often change the list, it may be slow to fetch it every time
|
# be entities that often change the list, it may be slow to fetch it every time
|
||||||
|
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from common import gajim
|
from common import gajim
|
||||||
|
@ -91,7 +91,7 @@ class CommandWindow:
|
||||||
self.data_form_widget.destroy()
|
self.data_form_widget.destroy()
|
||||||
self.data_form_widget = dataforms_widget.DataFormWidget()
|
self.data_form_widget = dataforms_widget.DataFormWidget()
|
||||||
self.data_form_widget.show()
|
self.data_form_widget.show()
|
||||||
self.sending_form_stage_vbox.pack_start(self.data_form_widget)
|
self.sending_form_stage_vbox.pack_start(self.data_form_widget, True, True, 0)
|
||||||
|
|
||||||
if self.commandnode:
|
if self.commandnode:
|
||||||
# Execute command
|
# Execute command
|
||||||
|
@ -159,7 +159,7 @@ class CommandWindow:
|
||||||
return self.stage_adhoc_commands_window_delete_event(self.window)
|
return self.stage_adhoc_commands_window_delete_event(self.window)
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
print 'Object has been deleted.'
|
print('Object has been deleted.')
|
||||||
|
|
||||||
# stage 1: waiting for command list
|
# stage 1: waiting for command list
|
||||||
def stage1(self):
|
def stage1(self):
|
||||||
|
@ -236,13 +236,13 @@ class CommandWindow:
|
||||||
# build the commands list radiobuttons
|
# build the commands list radiobuttons
|
||||||
first_radio = None
|
first_radio = None
|
||||||
for (commandnode, commandname) in self.commandlist:
|
for (commandnode, commandname) in self.commandlist:
|
||||||
radio = gtk.RadioButton(first_radio, label=commandname)
|
radio = Gtk.RadioButton.new_with_label_from_widget(first_radio, commandname)
|
||||||
radio.connect("toggled", self.on_command_radiobutton_toggled,
|
radio.connect("toggled", self.on_command_radiobutton_toggled,
|
||||||
commandnode)
|
commandnode)
|
||||||
if not first_radio:
|
if not first_radio:
|
||||||
first_radio = radio
|
first_radio = radio
|
||||||
self.commandnode = commandnode
|
self.commandnode = commandnode
|
||||||
self.command_list_vbox.pack_start(radio, expand=False)
|
self.command_list_vbox.pack_start(radio, False, True, 0)
|
||||||
self.command_list_vbox.show_all()
|
self.command_list_vbox.show_all()
|
||||||
|
|
||||||
self.stage_finish = self.stage2_finish
|
self.stage_finish = self.stage2_finish
|
||||||
|
@ -255,9 +255,9 @@ class CommandWindow:
|
||||||
"""
|
"""
|
||||||
Remove widgets we created. Not needed when the window is destroyed
|
Remove widgets we created. Not needed when the window is destroyed
|
||||||
"""
|
"""
|
||||||
def remove_widget(widget):
|
def remove_widget(widget, param):
|
||||||
self.command_list_vbox.remove(widget)
|
self.command_list_vbox.remove(widget)
|
||||||
self.command_list_vbox.foreach(remove_widget)
|
self.command_list_vbox.foreach(remove_widget, None)
|
||||||
|
|
||||||
def stage2_close_button_clicked(self, widget):
|
def stage2_close_button_clicked(self, widget):
|
||||||
self.stage_finish()
|
self.stage_finish()
|
||||||
|
@ -281,8 +281,6 @@ class CommandWindow:
|
||||||
# close old stage
|
# close old stage
|
||||||
self.stage_finish()
|
self.stage_finish()
|
||||||
|
|
||||||
assert isinstance(self.commandnode, unicode)
|
|
||||||
|
|
||||||
self.form_status = None
|
self.form_status = None
|
||||||
|
|
||||||
self.stages_notebook.set_current_page(
|
self.stages_notebook.set_current_page(
|
||||||
|
@ -321,8 +319,8 @@ class CommandWindow:
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
cb()
|
cb()
|
||||||
|
|
||||||
dialog = dialogs.HigDialog(self.window, gtk.MESSAGE_WARNING,
|
dialog = dialogs.HigDialog(self.window, Gtk.MessageType.WARNING,
|
||||||
gtk.BUTTONS_YES_NO, _('Cancel confirmation'),
|
Gtk.ButtonsType.YES_NO, _('Cancel confirmation'),
|
||||||
_('You are in process of executing command. Do you really want to '
|
_('You are in process of executing command. Do you really want to '
|
||||||
'cancel it?'), on_response_yes=on_yes)
|
'cancel it?'), on_response_yes=on_yes)
|
||||||
dialog.popup()
|
dialog.popup()
|
||||||
|
@ -452,7 +450,7 @@ class CommandWindow:
|
||||||
|
|
||||||
note = command.getTag('note')
|
note = command.getTag('note')
|
||||||
if note:
|
if note:
|
||||||
self.notes_label.set_text(note.getData().decode('utf-8'))
|
self.notes_label.set_text(note.getData())
|
||||||
self.notes_label.set_no_show_all(False)
|
self.notes_label.set_no_show_all(False)
|
||||||
self.notes_label.show()
|
self.notes_label.show()
|
||||||
else:
|
else:
|
||||||
|
@ -510,7 +508,7 @@ class CommandWindow:
|
||||||
try:
|
try:
|
||||||
errorname = nbxmpp.NS_STANZAS + ' ' + str(errorid)
|
errorname = nbxmpp.NS_STANZAS + ' ' + str(errorid)
|
||||||
errordesc = nbxmpp.ERRORS[errorname][2]
|
errordesc = nbxmpp.ERRORS[errorname][2]
|
||||||
error = errordesc.decode('utf-8')
|
error = errordesc
|
||||||
del errorname, errordesc
|
del errorname, errordesc
|
||||||
except KeyError: # when stanza doesn't have error description
|
except KeyError: # when stanza doesn't have error description
|
||||||
error = _('Service returned an error.')
|
error = _('Service returned an error.')
|
||||||
|
@ -550,21 +548,21 @@ class CommandWindow:
|
||||||
progressbar.pulse() method
|
progressbar.pulse() method
|
||||||
"""
|
"""
|
||||||
assert not self.pulse_id
|
assert not self.pulse_id
|
||||||
assert isinstance(progressbar, gtk.ProgressBar)
|
assert isinstance(progressbar, Gtk.ProgressBar)
|
||||||
|
|
||||||
def callback():
|
def callback():
|
||||||
progressbar.pulse()
|
progressbar.pulse()
|
||||||
return True # important to keep callback be called back!
|
return True # important to keep callback be called back!
|
||||||
|
|
||||||
# 12 times per second (80 miliseconds)
|
# 12 times per second (80 miliseconds)
|
||||||
self.pulse_id = gobject.timeout_add(80, callback)
|
self.pulse_id = GLib.timeout_add(80, callback)
|
||||||
|
|
||||||
def remove_pulsing(self):
|
def remove_pulsing(self):
|
||||||
"""
|
"""
|
||||||
Stop pulsing, useful when especially when removing widget
|
Stop pulsing, useful when especially when removing widget
|
||||||
"""
|
"""
|
||||||
if self.pulse_id:
|
if self.pulse_id:
|
||||||
gobject.source_remove(self.pulse_id)
|
GLib.source_remove(self.pulse_id)
|
||||||
self.pulse_id = None
|
self.pulse_id = None
|
||||||
|
|
||||||
# handling xml stanzas
|
# handling xml stanzas
|
||||||
|
@ -608,7 +606,6 @@ class CommandWindow:
|
||||||
Send the command with data form. Wait for reply
|
Send the command with data form. Wait for reply
|
||||||
"""
|
"""
|
||||||
# create the stanza
|
# create the stanza
|
||||||
assert isinstance(self.commandnode, unicode)
|
|
||||||
assert action in ('execute', 'prev', 'next', 'complete')
|
assert action in ('execute', 'prev', 'next', 'complete')
|
||||||
|
|
||||||
stanza = nbxmpp.Iq(typ='set', to=self.jid)
|
stanza = nbxmpp.Iq(typ='set', to=self.jid)
|
||||||
|
|
|
@ -23,11 +23,12 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
import gtkgui_helpers
|
import gtkgui_helpers
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
|
from common import helpers
|
||||||
|
|
||||||
(
|
(
|
||||||
OPT_TYPE,
|
OPT_TYPE,
|
||||||
|
@ -50,12 +51,12 @@ def rate_limit(rate):
|
||||||
timeout = [None]
|
timeout = [None]
|
||||||
def f(*args, **kwargs):
|
def f(*args, **kwargs):
|
||||||
if timeout[0] is not None:
|
if timeout[0] is not None:
|
||||||
gobject.source_remove(timeout[0])
|
GLib.source_remove(timeout[0])
|
||||||
timeout[0] = None
|
timeout[0] = None
|
||||||
def timeout_func():
|
def timeout_func():
|
||||||
func(*args, **kwargs)
|
func(*args, **kwargs)
|
||||||
timeout[0] = None
|
timeout[0] = None
|
||||||
timeout[0] = gobject.timeout_add(int(1000.0 / rate), timeout_func)
|
timeout[0] = GLib.timeout_add(int(1000.0 / rate), timeout_func)
|
||||||
return f
|
return f
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
@ -98,32 +99,32 @@ class AdvancedConfigurationWindow(object):
|
||||||
|
|
||||||
treeview = self.xml.get_object('advanced_treeview')
|
treeview = self.xml.get_object('advanced_treeview')
|
||||||
self.treeview = treeview
|
self.treeview = treeview
|
||||||
self.model = gtk.TreeStore(str, str, str)
|
self.model = Gtk.TreeStore(str, str, str)
|
||||||
self.fill_model()
|
self.fill_model()
|
||||||
self.model.set_sort_column_id(0, gtk.SORT_ASCENDING)
|
self.model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
|
||||||
self.modelfilter = self.model.filter_new()
|
self.modelfilter = self.model.filter_new()
|
||||||
self.modelfilter.set_visible_func(self.visible_func)
|
self.modelfilter.set_visible_func(self.visible_func)
|
||||||
|
|
||||||
renderer_text = gtk.CellRendererText()
|
renderer_text = Gtk.CellRendererText()
|
||||||
col = treeview.insert_column_with_attributes(-1, _('Preference Name'),
|
col = Gtk.TreeViewColumn(_('Preference Name'), renderer_text, text = 0)
|
||||||
renderer_text, text = 0)
|
treeview.insert_column(col, -1)
|
||||||
col.set_resizable(True)
|
col.set_resizable(True)
|
||||||
|
|
||||||
renderer_text = gtk.CellRendererText()
|
renderer_text = Gtk.CellRendererText()
|
||||||
renderer_text.connect('edited', self.on_config_edited)
|
renderer_text.connect('edited', self.on_config_edited)
|
||||||
col = treeview.insert_column_with_attributes(-1, _('Value'),
|
col = Gtk.TreeViewColumn(_('Value'),renderer_text, text = 1)
|
||||||
renderer_text, text = 1)
|
treeview.insert_column(col, -1)
|
||||||
col.set_cell_data_func(renderer_text, self.cb_value_column_data)
|
col.set_cell_data_func(renderer_text, self.cb_value_column_data)
|
||||||
|
|
||||||
col.props.resizable = True
|
col.props.resizable = True
|
||||||
col.set_property('expand',True)
|
col.props.expand = True
|
||||||
col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
|
col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
|
||||||
|
|
||||||
renderer_text = gtk.CellRendererText()
|
renderer_text = Gtk.CellRendererText()
|
||||||
col = treeview.insert_column_with_attributes(-1, _('Type'),
|
col = Gtk.TreeViewColumn(_('Type'), renderer_text, text = 2)
|
||||||
renderer_text, text = 2)
|
treeview.insert_column(col, -1)
|
||||||
col.set_property('expand',True)
|
col.props.expand = True
|
||||||
col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
|
col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
|
||||||
|
|
||||||
treeview.set_model(self.modelfilter)
|
treeview.set_model(self.modelfilter)
|
||||||
|
|
||||||
|
@ -136,7 +137,7 @@ class AdvancedConfigurationWindow(object):
|
||||||
self.restart_label.hide()
|
self.restart_label.hide()
|
||||||
gajim.interface.instances['advanced_config'] = self
|
gajim.interface.instances['advanced_config'] = self
|
||||||
|
|
||||||
def cb_value_column_data(self, col, cell, model, iter_):
|
def cb_value_column_data(self, col, cell, model, iter_, data):
|
||||||
"""
|
"""
|
||||||
Check if it's boolen or holds password stuff and if yes make the
|
Check if it's boolen or holds password stuff and if yes make the
|
||||||
cellrenderertext not editable, else - it's editable
|
cellrenderertext not editable, else - it's editable
|
||||||
|
@ -154,10 +155,10 @@ class AdvancedConfigurationWindow(object):
|
||||||
# path[1] is the key name
|
# path[1] is the key name
|
||||||
# path[2] is the root of tree
|
# path[2] is the root of tree
|
||||||
# last two is optional
|
# last two is optional
|
||||||
path = [model[iter_][0].decode('utf-8')]
|
path = [model[iter_][0]]
|
||||||
parent = model.iter_parent(iter_)
|
parent = model.iter_parent(iter_)
|
||||||
while parent:
|
while parent:
|
||||||
path.append(model[parent][0].decode('utf-8'))
|
path.append(model[parent][0])
|
||||||
parent = model.iter_parent(parent)
|
parent = model.iter_parent(parent)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
@ -195,17 +196,18 @@ class AdvancedConfigurationWindow(object):
|
||||||
def on_advanced_treeview_row_activated(self, treeview, path, column):
|
def on_advanced_treeview_row_activated(self, treeview, path, column):
|
||||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||||
modelrow = self.model[modelpath]
|
modelrow = self.model[modelpath]
|
||||||
option = modelrow[0].decode('utf-8')
|
option = modelrow[0]
|
||||||
if modelrow[2] == self.types['boolean']:
|
if modelrow[2] == self.types['boolean']:
|
||||||
for key in self.right_true_dict.keys():
|
for key in self.right_true_dict.keys():
|
||||||
if self.right_true_dict[key] == modelrow[1]:
|
if self.right_true_dict[key] == modelrow[1]:
|
||||||
modelrow[1] = key
|
modelrow[1] = str(key)
|
||||||
newval = {'False': True, 'True': False}[modelrow[1]]
|
newval = {'False': True, 'True': False}[modelrow[1]]
|
||||||
if len(modelpath) > 1:
|
if len(modelpath.get_indices()) > 1:
|
||||||
optnamerow = self.model[modelpath[0]]
|
optnamerow = self.model[modelpath.get_indices()[0]]
|
||||||
optname = optnamerow[0].decode('utf-8')
|
optname = optnamerow[0]
|
||||||
keyrow = self.model[modelpath[:2]]
|
modelpath.up()
|
||||||
key = keyrow[0].decode('utf-8')
|
keyrow = self.model[modelpath]
|
||||||
|
key = keyrow[0]
|
||||||
self.remember_option(option + '\n' + key + '\n' + optname,
|
self.remember_option(option + '\n' + key + '\n' + optname,
|
||||||
modelrow[1], newval)
|
modelrow[1], newval)
|
||||||
gajim.config.set_per(optname, key, option, newval)
|
gajim.config.set_per(optname, key, option, newval)
|
||||||
|
@ -231,15 +233,17 @@ class AdvancedConfigurationWindow(object):
|
||||||
|
|
||||||
def on_config_edited(self, cell, path, text):
|
def on_config_edited(self, cell, path, text):
|
||||||
# convert modelfilter path to model path
|
# convert modelfilter path to model path
|
||||||
|
path=Gtk.TreePath.new_from_string(path)
|
||||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||||
modelrow = self.model[modelpath]
|
modelrow = self.model[modelpath]
|
||||||
option = modelrow[0].decode('utf-8')
|
option = modelrow[0]
|
||||||
text = text.decode('utf-8')
|
if modelpath.get_depth() > 2:
|
||||||
if len(modelpath) > 1:
|
modelpath.up() # Get parent
|
||||||
optnamerow = self.model[modelpath[0]]
|
keyrow = self.model[modelpath]
|
||||||
optname = optnamerow[0].decode('utf-8')
|
key = keyrow[0]
|
||||||
keyrow = self.model[modelpath[:2]]
|
modelpath.up() # Get parent
|
||||||
key = keyrow[0].decode('utf-8')
|
optnamerow = self.model[modelpath]
|
||||||
|
optname = optnamerow[0]
|
||||||
self.remember_option(option + '\n' + key + '\n' + optname, modelrow[1],
|
self.remember_option(option + '\n' + key + '\n' + optname, modelrow[1],
|
||||||
text)
|
text)
|
||||||
gajim.config.set_per(optname, key, option, text)
|
gajim.config.set_per(optname, key, option, text)
|
||||||
|
@ -268,12 +272,12 @@ class AdvancedConfigurationWindow(object):
|
||||||
return
|
return
|
||||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||||
modelrow = self.model[modelpath]
|
modelrow = self.model[modelpath]
|
||||||
option = modelrow[0].decode('utf-8')
|
option = modelrow[0]
|
||||||
if len(modelpath) > 1:
|
if len(modelpath) > 1:
|
||||||
optnamerow = self.model[modelpath[0]]
|
optnamerow = self.model[modelpath[0]]
|
||||||
optname = optnamerow[0].decode('utf-8')
|
optname = optnamerow[0]
|
||||||
keyrow = self.model[modelpath[:2]]
|
keyrow = self.model[modelpath[:2]]
|
||||||
key = keyrow[0].decode('utf-8')
|
key = keyrow[0]
|
||||||
self.remember_option(option + '\n' + key + '\n' + optname,
|
self.remember_option(option + '\n' + key + '\n' + optname,
|
||||||
modelrow[C_VALUE], default)
|
modelrow[C_VALUE], default)
|
||||||
gajim.config.set_per(optname, key, option, default)
|
gajim.config.set_per(optname, key, option, default)
|
||||||
|
@ -285,7 +289,7 @@ class AdvancedConfigurationWindow(object):
|
||||||
else:
|
else:
|
||||||
if str(default) == model[iter_][C_VALUE]:
|
if str(default) == model[iter_][C_VALUE]:
|
||||||
return
|
return
|
||||||
self.on_config_edited(None, path, str(default))
|
self.on_config_edited(None, path.to_string(), str(default))
|
||||||
|
|
||||||
def on_advanced_close_button_clicked(self, widget):
|
def on_advanced_close_button_clicked(self, widget):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
@ -308,11 +312,14 @@ class AdvancedConfigurationWindow(object):
|
||||||
if type_ == self.types['boolean']:
|
if type_ == self.types['boolean']:
|
||||||
value = self.right_true_dict[option]
|
value = self.right_true_dict[option]
|
||||||
else:
|
else:
|
||||||
value = option
|
try:
|
||||||
|
value = str(option)
|
||||||
|
except:
|
||||||
|
value = option
|
||||||
self.model.append(parent, [name, value, type_])
|
self.model.append(parent, [name, value, type_])
|
||||||
|
|
||||||
def visible_func(self, model, treeiter):
|
def visible_func(self, model, treeiter, data):
|
||||||
search_string = self.entry.get_text().decode('utf-8').lower()
|
search_string = self.entry.get_text().lower()
|
||||||
for it in tree_model_pre_order(model, treeiter):
|
for it in tree_model_pre_order(model, treeiter):
|
||||||
if model[it][C_TYPE] != '':
|
if model[it][C_TYPE] != '':
|
||||||
opt_path = self.get_option_path(model, it)
|
opt_path = self.get_option_path(model, it)
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|
||||||
import gtk
|
from gi.repository import Gtk
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
|
|
||||||
import gtkgui_helpers
|
import gtkgui_helpers
|
||||||
from common import helpers
|
from common import helpers
|
||||||
|
@ -70,8 +70,8 @@ class AtomWindow:
|
||||||
self.xml.connect_signals(self)
|
self.xml.connect_signals(self)
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
|
||||||
self.entry_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
|
self.entry_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
|
||||||
self.feed_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
|
self.feed_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
|
||||||
|
|
||||||
def displayNextEntry(self):
|
def displayNextEntry(self):
|
||||||
"""
|
"""
|
||||||
|
@ -84,24 +84,24 @@ class AtomWindow:
|
||||||
# fill the fields
|
# fill the fields
|
||||||
if newentry.feed_link is not None:
|
if newentry.feed_link is not None:
|
||||||
self.feed_title_label.set_markup(
|
self.feed_title_label.set_markup(
|
||||||
u'<span foreground="blue" underline="single">%s</span>' % \
|
'<span foreground="blue" underline="single">%s</span>' % \
|
||||||
gobject.markup_escape_text(newentry.feed_title))
|
GLib.markup_escape_text(newentry.feed_title))
|
||||||
else:
|
else:
|
||||||
self.feed_title_label.set_markup(
|
self.feed_title_label.set_markup(GLib.markup_escape_text(
|
||||||
gobject.markup_escape_text(newentry.feed_title))
|
newentry.feed_title))
|
||||||
|
|
||||||
self.feed_tagline_label.set_markup(
|
self.feed_tagline_label.set_markup(
|
||||||
u'<small>%s</small>' % \
|
'<small>%s</small>' % GLib.markup_escape_text(
|
||||||
gobject.markup_escape_text(newentry.feed_tagline))
|
newentry.feed_tagline))
|
||||||
|
|
||||||
if newentry.title:
|
if newentry.title:
|
||||||
if newentry.uri is not None:
|
if newentry.uri is not None:
|
||||||
self.entry_title_label.set_markup(
|
self.entry_title_label.set_markup(
|
||||||
u'<span foreground="blue" underline="single">%s</span>' % \
|
'<span foreground="blue" underline="single">%s</span>' % \
|
||||||
gobject.markup_escape_text(newentry.title))
|
GLib.markup_escape_text(newentry.title))
|
||||||
else:
|
else:
|
||||||
self.entry_title_label.set_markup(
|
self.entry_title_label.set_markup(GLib.markup_escape_text(
|
||||||
gobject.markup_escape_text(newentry.title))
|
newentry.title))
|
||||||
else:
|
else:
|
||||||
self.entry_title_label.set_markup('')
|
self.entry_title_label.set_markup('')
|
||||||
|
|
||||||
|
|
|
@ -21,19 +21,20 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
|
from gi.repository import GLib
|
||||||
|
from gi.repository import Gtk
|
||||||
|
from gi.repository import Gdk
|
||||||
|
from gi.repository import GObject
|
||||||
|
|
||||||
import gtk
|
class CellRendererImage(Gtk.CellRendererPixbuf):
|
||||||
import gobject
|
|
||||||
|
|
||||||
class CellRendererImage(gtk.GenericCellRenderer):
|
|
||||||
|
|
||||||
__gproperties__ = {
|
__gproperties__ = {
|
||||||
'image': (gobject.TYPE_OBJECT, 'Image',
|
'image': (GObject.TYPE_OBJECT, 'Image',
|
||||||
'Image', gobject.PARAM_READWRITE),
|
'Image', GObject.PARAM_READWRITE),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, col_index, tv_index):
|
def __init__(self, col_index, tv_index):
|
||||||
self.__gobject_init__()
|
super(CellRendererImage, self).__init__()
|
||||||
self.image = None
|
self.image = None
|
||||||
self.col_index = col_index
|
self.col_index = col_index
|
||||||
self.tv_index = tv_index
|
self.tv_index = tv_index
|
||||||
|
@ -45,6 +46,14 @@ class CellRendererImage(gtk.GenericCellRenderer):
|
||||||
def do_get_property(self, pspec):
|
def do_get_property(self, pspec):
|
||||||
return getattr(self, pspec.name)
|
return getattr(self, pspec.name)
|
||||||
|
|
||||||
|
def do_activate(event, widget, path, bg_area, cell_area, flags):
|
||||||
|
"""Renderers cannot be activated; always return True."""
|
||||||
|
return True
|
||||||
|
|
||||||
|
def do_editing_started(event, widget, path, fb_area, cell_area, flags):
|
||||||
|
"""Renderers cannot be edited; always return None."""
|
||||||
|
return None
|
||||||
|
|
||||||
def func(self, model, path, iter_, image_tree):
|
def func(self, model, path, iter_, image_tree):
|
||||||
image, tree = image_tree
|
image, tree = image_tree
|
||||||
if model.get_value(iter_, self.tv_index) != image:
|
if model.get_value(iter_, self.tv_index) != image:
|
||||||
|
@ -53,71 +62,67 @@ class CellRendererImage(gtk.GenericCellRenderer):
|
||||||
col = tree.get_column(self.col_index)
|
col = tree.get_column(self.col_index)
|
||||||
cell_area = tree.get_cell_area(path, col)
|
cell_area = tree.get_cell_area(path, col)
|
||||||
|
|
||||||
tree.queue_draw_area(cell_area.x, cell_area.y,
|
tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width,
|
||||||
cell_area.width, cell_area.height)
|
cell_area.height)
|
||||||
|
|
||||||
def animation_timeout(self, tree, image):
|
def animation_timeout(self, tree, image):
|
||||||
if image.get_storage_type() != gtk.IMAGE_ANIMATION:
|
if image.get_storage_type() != Gtk.ImageType.ANIMATION:
|
||||||
return
|
return
|
||||||
self.redraw = 0
|
self.redraw = 0
|
||||||
iter_ = self.iters[image]
|
iter_ = self.iters[image]
|
||||||
iter_.advance()
|
timeval = GLib.TimeVal()
|
||||||
|
timeval.tv_sec = GLib.get_monotonic_time() / 1000000
|
||||||
|
iter_.advance(timeval)
|
||||||
model = tree.get_model()
|
model = tree.get_model()
|
||||||
if model:
|
if model:
|
||||||
model.foreach(self.func, (image, tree))
|
model.foreach(self.func, (image, tree))
|
||||||
if self.redraw:
|
if self.redraw:
|
||||||
gobject.timeout_add(iter_.get_delay_time(),
|
GLib.timeout_add(iter_.get_delay_time(),
|
||||||
self.animation_timeout, tree, image)
|
self.animation_timeout, tree, image)
|
||||||
elif image in self.iters:
|
elif image in self.iters:
|
||||||
del self.iters[image]
|
del self.iters[image]
|
||||||
|
|
||||||
def on_render(self, window, widget, background_area, cell_area,
|
def do_render(self, ctx, widget, background_area, cell_area, flags):
|
||||||
expose_area, flags):
|
|
||||||
if not self.image:
|
if not self.image:
|
||||||
return
|
return
|
||||||
pix_rect = gtk.gdk.Rectangle()
|
|
||||||
pix_rect.x, pix_rect.y, pix_rect.width, pix_rect.height = \
|
|
||||||
self.on_get_size(widget, cell_area)
|
|
||||||
|
|
||||||
pix_rect.x += cell_area.x
|
if self.image.get_storage_type() == Gtk.ImageType.ANIMATION:
|
||||||
pix_rect.y += cell_area.y
|
|
||||||
pix_rect.width -= 2 * self.get_property('xpad')
|
|
||||||
pix_rect.height -= 2 * self.get_property('ypad')
|
|
||||||
|
|
||||||
draw_rect = cell_area.intersect(pix_rect)
|
|
||||||
draw_rect = expose_area.intersect(draw_rect)
|
|
||||||
|
|
||||||
if self.image.get_storage_type() == gtk.IMAGE_ANIMATION:
|
|
||||||
if self.image not in self.iters:
|
if self.image not in self.iters:
|
||||||
if not isinstance(widget, gtk.TreeView):
|
if not isinstance(widget, Gtk.TreeView):
|
||||||
return
|
return
|
||||||
animation = self.image.get_animation()
|
animation = self.image.get_animation()
|
||||||
iter_ = animation.get_iter()
|
timeval = GLib.TimeVal()
|
||||||
|
timeval.tv_sec = GLib.get_monotonic_time() / 1000000
|
||||||
|
iter_ = animation.get_iter(timeval)
|
||||||
self.iters[self.image] = iter_
|
self.iters[self.image] = iter_
|
||||||
gobject.timeout_add(iter_.get_delay_time(),
|
GLib.timeout_add(iter_.get_delay_time(), self.animation_timeout,
|
||||||
self.animation_timeout, widget, self.image)
|
widget, self.image)
|
||||||
|
|
||||||
pix = self.iters[self.image].get_pixbuf()
|
pix = self.iters[self.image].get_pixbuf()
|
||||||
elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF:
|
elif self.image.get_storage_type() == Gtk.ImageType.PIXBUF:
|
||||||
pix = self.image.get_pixbuf()
|
pix = self.image.get_pixbuf()
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
if draw_rect.x < 1:
|
|
||||||
return
|
|
||||||
window.draw_pixbuf(widget.style.black_gc, pix,
|
|
||||||
draw_rect.x - pix_rect.x,
|
|
||||||
draw_rect.y - pix_rect.y,
|
|
||||||
draw_rect.x, draw_rect.y,
|
|
||||||
draw_rect.width, draw_rect.height,
|
|
||||||
gtk.gdk.RGB_DITHER_NONE, 0, 0)
|
|
||||||
|
|
||||||
def on_get_size(self, widget, cell_area):
|
Gdk.cairo_set_source_pixbuf(ctx, pix, cell_area.x, cell_area.y)
|
||||||
|
ctx.paint()
|
||||||
|
|
||||||
|
def do_get_size(self, widget, cell_area):
|
||||||
|
"""
|
||||||
|
Return the size we need for this cell.
|
||||||
|
|
||||||
|
Each cell is drawn individually and is only as wide as it needs
|
||||||
|
to be, we let the TreeViewColumn take care of making them all
|
||||||
|
line up.
|
||||||
|
"""
|
||||||
if not self.image:
|
if not self.image:
|
||||||
return 0, 0, 0, 0
|
return 0, 0, 0, 0
|
||||||
if self.image.get_storage_type() == gtk.IMAGE_ANIMATION:
|
if self.image.get_storage_type() == Gtk.ImageType.ANIMATION:
|
||||||
animation = self.image.get_animation()
|
animation = self.image.get_animation()
|
||||||
pix = animation.get_iter().get_pixbuf()
|
timeval = GLib.TimeVal()
|
||||||
elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF:
|
timeval.tv_sec = GLib.get_monotonic_time() / 1000000
|
||||||
|
pix = animation.get_iter(timeval).get_pixbuf()
|
||||||
|
elif self.image.get_storage_type() == Gtk.ImageType.PIXBUF:
|
||||||
pix = self.image.get_pixbuf()
|
pix = self.image.get_pixbuf()
|
||||||
else:
|
else:
|
||||||
return 0, 0, 0, 0
|
return 0, 0, 0, 0
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -31,8 +31,7 @@ to automatic discovery and dispatching, also features manual control
|
||||||
over the process.
|
over the process.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from types import NoneType
|
from .tools import remove
|
||||||
from tools import remove
|
|
||||||
|
|
||||||
COMMANDS = {}
|
COMMANDS = {}
|
||||||
CONTAINERS = {}
|
CONTAINERS = {}
|
||||||
|
@ -67,11 +66,13 @@ def traverse_commands(container):
|
||||||
yield attribute
|
yield attribute
|
||||||
|
|
||||||
def is_command(attribute):
|
def is_command(attribute):
|
||||||
from framework import Command
|
from .framework import Command
|
||||||
return isinstance(attribute, Command)
|
return isinstance(attribute, Command)
|
||||||
|
|
||||||
def is_root(namespace):
|
def is_root(namespace):
|
||||||
metaclass = namespace.get("__metaclass__", NoneType)
|
metaclass = namespace.get("__metaclass__", None)
|
||||||
|
if not metaclass:
|
||||||
|
return False
|
||||||
return issubclass(metaclass, Dispatchable)
|
return issubclass(metaclass, Dispatchable)
|
||||||
|
|
||||||
def get_command(host, name):
|
def get_command(host, name):
|
||||||
|
@ -83,7 +84,7 @@ def get_command(host, name):
|
||||||
def list_commands(host):
|
def list_commands(host):
|
||||||
for container in CONTAINERS[host]:
|
for container in CONTAINERS[host]:
|
||||||
commands = COMMANDS[container]
|
commands = COMMANDS[container]
|
||||||
for name, command in commands.iteritems():
|
for name, command in commands.items():
|
||||||
yield name, command
|
yield name, command
|
||||||
|
|
||||||
class Dispatchable(type):
|
class Dispatchable(type):
|
||||||
|
|
|
@ -23,12 +23,12 @@ import re
|
||||||
from types import FunctionType
|
from types import FunctionType
|
||||||
from inspect import getargspec, getdoc
|
from inspect import getargspec, getdoc
|
||||||
|
|
||||||
from dispatcher import Host, Container
|
from .dispatcher import Host, Container
|
||||||
from dispatcher import get_command, list_commands
|
from .dispatcher import get_command, list_commands
|
||||||
from mapping import parse_arguments, adapt_arguments
|
from .mapping import parse_arguments, adapt_arguments
|
||||||
from errors import DefinitionError, CommandError, NoCommandError
|
from .errors import DefinitionError, CommandError, NoCommandError
|
||||||
|
|
||||||
class CommandHost(object):
|
class CommandHost(metaclass=Host):
|
||||||
"""
|
"""
|
||||||
Command host is a hub between numerous command processors and
|
Command host is a hub between numerous command processors and
|
||||||
command containers. Aimed to participate in a dispatching process in
|
command containers. Aimed to participate in a dispatching process in
|
||||||
|
@ -40,7 +40,7 @@ class CommandHost(object):
|
||||||
"""
|
"""
|
||||||
__metaclass__ = Host
|
__metaclass__ = Host
|
||||||
|
|
||||||
class CommandContainer(object):
|
class CommandContainer(metaclass=Container):
|
||||||
"""
|
"""
|
||||||
Command container is an entity which holds defined commands,
|
Command container is an entity which holds defined commands,
|
||||||
allowing them to be dispatched and proccessed correctly. Each
|
allowing them to be dispatched and proccessed correctly. Each
|
||||||
|
@ -143,7 +143,7 @@ class CommandProcessor(object):
|
||||||
def list_commands(self):
|
def list_commands(self):
|
||||||
commands = list_commands(self.COMMAND_HOST)
|
commands = list_commands(self.COMMAND_HOST)
|
||||||
commands = dict(commands)
|
commands = dict(commands)
|
||||||
return sorted(set(commands.itervalues()))
|
return sorted(list(commands.values()), key=lambda k: k.__repr__())
|
||||||
|
|
||||||
class Command(object):
|
class Command(object):
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ class Command(object):
|
||||||
|
|
||||||
# Automatically set all the properties passed to a constructor
|
# Automatically set all the properties passed to a constructor
|
||||||
# by the command decorator.
|
# by the command decorator.
|
||||||
for key, value in properties.iteritems():
|
for key, value in properties.items():
|
||||||
setattr(self, key, value)
|
setattr(self, key, value)
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
|
@ -165,7 +165,7 @@ class Command(object):
|
||||||
# command or name attributes set. They will be set to a
|
# command or name attributes set. They will be set to a
|
||||||
# corresponding values right here in case if they was not set by
|
# corresponding values right here in case if they was not set by
|
||||||
# the one who raised an exception.
|
# the one who raised an exception.
|
||||||
except CommandError, error:
|
except CommandError as error:
|
||||||
if not error.command and not error.name:
|
if not error.command and not error.name:
|
||||||
raise CommandError(error.message, self)
|
raise CommandError(error.message, self)
|
||||||
raise
|
raise
|
||||||
|
@ -181,7 +181,11 @@ class Command(object):
|
||||||
return "<Command %s>" % ', '.join(self.names)
|
return "<Command %s>" % ', '.join(self.names)
|
||||||
|
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
return cmp(self.first_name, other.first_name)
|
if self.first_name > other.first_name:
|
||||||
|
return 1
|
||||||
|
if self.first_name < other.first_name:
|
||||||
|
return -1
|
||||||
|
return 0
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def first_name(self):
|
def first_name(self):
|
||||||
|
|
|
@ -35,7 +35,7 @@ detected.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from ..framework import CommandContainer, command, doc
|
from ..framework import CommandContainer, command, doc
|
||||||
from hosts import *
|
from .hosts import *
|
||||||
|
|
||||||
class CustomCommonCommands(CommandContainer):
|
class CustomCommonCommands(CommandContainer):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -35,10 +35,10 @@ commands as a frontend.
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
from os.path import expanduser
|
from os.path import expanduser
|
||||||
|
|
||||||
from glib import timeout_add
|
from gi.repository import GLib
|
||||||
|
|
||||||
from ..framework import CommandContainer, command, doc
|
from ..framework import CommandContainer, command, doc
|
||||||
from hosts import *
|
from .hosts import *
|
||||||
|
|
||||||
class Execute(CommandContainer):
|
class Execute(CommandContainer):
|
||||||
AUTOMATIC = True
|
AUTOMATIC = True
|
||||||
|
@ -64,11 +64,11 @@ class Execute(CommandContainer):
|
||||||
@classmethod
|
@classmethod
|
||||||
def monitor(cls, processor, popen):
|
def monitor(cls, processor, popen):
|
||||||
poller = cls.poller(processor, popen)
|
poller = cls.poller(processor, popen)
|
||||||
timeout_add(cls.POLL_INTERVAL, poller.next)
|
GLib.timeout_add(cls.POLL_INTERVAL, next, poller)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poller(cls, processor, popen):
|
def poller(cls, processor, popen):
|
||||||
for x in xrange(cls.POLL_COUNT):
|
for x in list(range(cls.POLL_COUNT)):
|
||||||
yield cls.brush(processor, popen)
|
yield cls.brush(processor, popen)
|
||||||
cls.overdue(processor, popen)
|
cls.overdue(processor, popen)
|
||||||
yield False
|
yield False
|
||||||
|
@ -101,7 +101,7 @@ class Execute(CommandContainer):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def clean(text):
|
def clean(text):
|
||||||
strip = chr(10) + chr(32)
|
strip = chr(10) + chr(32)
|
||||||
return text.strip(strip)
|
return text.decode().strip(strip)
|
||||||
|
|
||||||
class Show(Execute):
|
class Show(Execute):
|
||||||
|
|
||||||
|
@ -115,6 +115,6 @@ class Show(Execute):
|
||||||
stdout, stderr = cls.fetch(popen)
|
stdout, stderr = cls.fetch(popen)
|
||||||
success = popen.returncode == 0
|
success = popen.returncode == 0
|
||||||
if success and stdout:
|
if success and stdout:
|
||||||
processor.send(stdout.decode('utf8'))
|
processor.send(stdout)
|
||||||
elif not success and stderr:
|
elif not success and stderr:
|
||||||
processor.echo_error(stderr)
|
processor.echo_error(stderr)
|
||||||
|
|
|
@ -31,10 +31,9 @@ support interaction between the two and a few utility methods so you
|
||||||
don't need to dig up the code itself to write basic commands.
|
don't need to dig up the code itself to write basic commands.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from types import StringTypes
|
|
||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
|
|
||||||
from pango import FontDescription
|
from gi.repository import Pango
|
||||||
from common import gajim
|
from common import gajim
|
||||||
|
|
||||||
from ..framework import CommandProcessor
|
from ..framework import CommandProcessor
|
||||||
|
@ -62,13 +61,13 @@ class ChatCommandProcessor(CommandProcessor):
|
||||||
try:
|
try:
|
||||||
parents = super(ChatCommandProcessor, self)
|
parents = super(ChatCommandProcessor, self)
|
||||||
parents.execute_command(name, arguments)
|
parents.execute_command(name, arguments)
|
||||||
except NoCommandError, error:
|
except NoCommandError as error:
|
||||||
details = dict(name=error.name, message=error.message)
|
details = dict(name=error.name, message=error.message)
|
||||||
message = "%(name)s: %(message)s\n" % details
|
message = "%(name)s: %(message)s\n" % details
|
||||||
message += "Try using the //%(name)s or /say /%(name)s " % details
|
message += "Try using the //%(name)s or /say /%(name)s " % details
|
||||||
message += "construct if you intended to send it as a text."
|
message += "construct if you intended to send it as a text."
|
||||||
self.echo_error(message)
|
self.echo_error(message)
|
||||||
except CommandError, error:
|
except CommandError as error:
|
||||||
self.echo_error("%s: %s" % (error.name, error.message))
|
self.echo_error("%s: %s" % (error.name, error.message))
|
||||||
except Exception:
|
except Exception:
|
||||||
self.echo_error(_("Error during command execution!"))
|
self.echo_error(_("Error during command execution!"))
|
||||||
|
@ -98,7 +97,7 @@ class ChatCommandProcessor(CommandProcessor):
|
||||||
def command_postprocessor(self, command, name, arguments, args, kwargs, value):
|
def command_postprocessor(self, command, name, arguments, args, kwargs, value):
|
||||||
# If command returns a string - print it to a user. A convenient
|
# If command returns a string - print it to a user. A convenient
|
||||||
# and sufficient in most simple cases shortcut to a using echo.
|
# and sufficient in most simple cases shortcut to a using echo.
|
||||||
if value and isinstance(value, StringTypes):
|
if value and isinstance(value, str):
|
||||||
self.echo(value)
|
self.echo(value)
|
||||||
|
|
||||||
class CommandTools:
|
class CommandTools:
|
||||||
|
@ -117,7 +116,7 @@ class CommandTools:
|
||||||
|
|
||||||
name = gconf("/desktop/gnome/interface/monospace_font_name")
|
name = gconf("/desktop/gnome/interface/monospace_font_name")
|
||||||
name = name if name else "Monospace"
|
name = name if name else "Monospace"
|
||||||
font = FontDescription(name)
|
font = Pango.FontDescription(name)
|
||||||
|
|
||||||
command_ok_tag = buffer.create_tag("command_ok")
|
command_ok_tag = buffer.create_tag("command_ok")
|
||||||
command_ok_tag.set_property("font-desc", font)
|
command_ok_tag.set_property("font-desc", font)
|
||||||
|
|
|
@ -30,8 +30,8 @@ from ..errors import CommandError
|
||||||
from ..framework import CommandContainer, command, doc
|
from ..framework import CommandContainer, command, doc
|
||||||
from ..mapping import generate_usage
|
from ..mapping import generate_usage
|
||||||
|
|
||||||
from hosts import *
|
from .hosts import *
|
||||||
import execute
|
from . import execute
|
||||||
|
|
||||||
# This holds constants fron the logger, which we'll be using in some of our
|
# This holds constants fron the logger, which we'll be using in some of our
|
||||||
# commands.
|
# commands.
|
||||||
|
@ -136,7 +136,7 @@ class StandardCommonCommands(CommandContainer):
|
||||||
def status(self, status, message):
|
def status(self, status, message):
|
||||||
if status not in ('online', 'away', 'chat', 'xa', 'dnd'):
|
if status not in ('online', 'away', 'chat', 'xa', 'dnd'):
|
||||||
raise CommandError("Invalid status given")
|
raise CommandError("Invalid status given")
|
||||||
for connection in gajim.connections.itervalues():
|
for connection in gajim.connections.values():
|
||||||
if not gajim.config.get_per('accounts', connection.name,
|
if not gajim.config.get_per('accounts', connection.name,
|
||||||
'sync_with_global_status'):
|
'sync_with_global_status'):
|
||||||
continue
|
continue
|
||||||
|
@ -150,7 +150,7 @@ class StandardCommonCommands(CommandContainer):
|
||||||
if not message:
|
if not message:
|
||||||
message = _("Away")
|
message = _("Away")
|
||||||
|
|
||||||
for connection in gajim.connections.itervalues():
|
for connection in gajim.connections.values():
|
||||||
if not gajim.config.get_per('accounts', connection.name,
|
if not gajim.config.get_per('accounts', connection.name,
|
||||||
'sync_with_global_status'):
|
'sync_with_global_status'):
|
||||||
continue
|
continue
|
||||||
|
@ -164,7 +164,7 @@ class StandardCommonCommands(CommandContainer):
|
||||||
if not message:
|
if not message:
|
||||||
message = _("Available")
|
message = _("Available")
|
||||||
|
|
||||||
for connection in gajim.connections.itervalues():
|
for connection in gajim.connections.values():
|
||||||
if not gajim.config.get_per('accounts', connection.name,
|
if not gajim.config.get_per('accounts', connection.name,
|
||||||
'sync_with_global_status'):
|
'sync_with_global_status'):
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -23,10 +23,9 @@ according to the command properties.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from types import BooleanType, UnicodeType
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
from errors import DefinitionError, CommandError
|
from .errors import DefinitionError, CommandError
|
||||||
|
|
||||||
# Quite complex piece of regular expression logic to parse options and
|
# Quite complex piece of regular expression logic to parse options and
|
||||||
# arguments. Might need some tweaking along the way.
|
# arguments. Might need some tweaking along the way.
|
||||||
|
@ -62,7 +61,7 @@ def parse_arguments(arguments):
|
||||||
"""
|
"""
|
||||||
args, opts = [], []
|
args, opts = [], []
|
||||||
|
|
||||||
def intersects_opts((given_start, given_end)):
|
def intersects_opts(given_start, given_end):
|
||||||
"""
|
"""
|
||||||
Check if given span intersects with any of options.
|
Check if given span intersects with any of options.
|
||||||
"""
|
"""
|
||||||
|
@ -71,7 +70,7 @@ def parse_arguments(arguments):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def intersects_args((given_start, given_end)):
|
def intersects_args(given_start, given_end):
|
||||||
"""
|
"""
|
||||||
Check if given span intersects with any of arguments.
|
Check if given span intersects with any of arguments.
|
||||||
"""
|
"""
|
||||||
|
@ -97,14 +96,14 @@ def parse_arguments(arguments):
|
||||||
# conflicted sectors. Remove any arguments that intersect with
|
# conflicted sectors. Remove any arguments that intersect with
|
||||||
# options.
|
# options.
|
||||||
for arg, position in args[:]:
|
for arg, position in args[:]:
|
||||||
if intersects_opts(position):
|
if intersects_opts(*position):
|
||||||
args.remove((arg, position))
|
args.remove((arg, position))
|
||||||
|
|
||||||
# Primitive but sufficiently effective way of disposing of
|
# Primitive but sufficiently effective way of disposing of
|
||||||
# conflicted sectors. Remove any options that intersect with
|
# conflicted sectors. Remove any options that intersect with
|
||||||
# arguments.
|
# arguments.
|
||||||
for key, value, position in opts[:]:
|
for key, value, position in opts[:]:
|
||||||
if intersects_args(position):
|
if intersects_args(*position):
|
||||||
opts.remove((key, value, position))
|
opts.remove((key, value, position))
|
||||||
|
|
||||||
return args, opts
|
return args, opts
|
||||||
|
@ -207,7 +206,7 @@ def adapt_arguments(command, arguments, args, opts):
|
||||||
# corresponding optin has been given.
|
# corresponding optin has been given.
|
||||||
if command.expand:
|
if command.expand:
|
||||||
expanded = []
|
expanded = []
|
||||||
for spec_key, spec_value in norm_kwargs.iteritems():
|
for spec_key, spec_value in norm_kwargs.items():
|
||||||
letter = spec_key[0] if len(spec_key) > 1 else None
|
letter = spec_key[0] if len(spec_key) > 1 else None
|
||||||
if letter and letter not in expanded:
|
if letter and letter not in expanded:
|
||||||
for index, (key, value, position) in enumerate(opts):
|
for index, (key, value, position) in enumerate(opts):
|
||||||
|
@ -219,7 +218,7 @@ def adapt_arguments(command, arguments, args, opts):
|
||||||
# Detect switches and set their values accordingly. If any of them
|
# Detect switches and set their values accordingly. If any of them
|
||||||
# carries a value - append it to args.
|
# carries a value - append it to args.
|
||||||
for index, (key, value, position) in enumerate(opts):
|
for index, (key, value, position) in enumerate(opts):
|
||||||
if isinstance(norm_kwargs.get(key), BooleanType):
|
if isinstance(norm_kwargs.get(key), bool):
|
||||||
opts[index] = (key, True, position)
|
opts[index] = (key, True, position)
|
||||||
if value:
|
if value:
|
||||||
args.append((value, position))
|
args.append((value, position))
|
||||||
|
@ -231,8 +230,8 @@ def adapt_arguments(command, arguments, args, opts):
|
||||||
|
|
||||||
# Stripping down position information supplied with arguments and
|
# Stripping down position information supplied with arguments and
|
||||||
# options as it won't be needed again.
|
# options as it won't be needed again.
|
||||||
args = map(lambda (arg, position): arg, args)
|
args = list(map(lambda t: t[0], args))
|
||||||
opts = map(lambda (key, value, position): (key, value), opts)
|
opts = list(map(lambda t: (t[0], t[1]), opts))
|
||||||
|
|
||||||
# If command has extra option enabled - collect all extra arguments
|
# If command has extra option enabled - collect all extra arguments
|
||||||
# and pass them to a last positional argument command defines as a
|
# and pass them to a last positional argument command defines as a
|
||||||
|
@ -265,16 +264,10 @@ def adapt_arguments(command, arguments, args, opts):
|
||||||
# Normally this does not happen unless overlapping is enabled.
|
# Normally this does not happen unless overlapping is enabled.
|
||||||
for key, value in opts:
|
for key, value in opts:
|
||||||
initial = norm_kwargs.get(key)
|
initial = norm_kwargs.get(key)
|
||||||
if isinstance(initial, BooleanType):
|
if isinstance(initial, bool):
|
||||||
if not isinstance(value, BooleanType):
|
if not isinstance(value, bool):
|
||||||
raise CommandError("%s: Switch can not take an argument" % key, command)
|
raise CommandError("%s: Switch can not take an argument" % key, command)
|
||||||
|
|
||||||
# We need to encode every keyword argument to a simple string, not
|
|
||||||
# the unicode one, because ** expansion does not support it.
|
|
||||||
for index, (key, value) in enumerate(opts):
|
|
||||||
if isinstance(key, UnicodeType):
|
|
||||||
opts[index] = (key.encode(KEY_ENCODING), value)
|
|
||||||
|
|
||||||
# Inject the source arguments as a string as a first argument, if
|
# Inject the source arguments as a string as a first argument, if
|
||||||
# command has enabled the corresponding option.
|
# command has enabled the corresponding option.
|
||||||
if command.source:
|
if command.source:
|
||||||
|
@ -305,7 +298,7 @@ def generate_usage(command, complete=True):
|
||||||
letter = key[0]
|
letter = key[0]
|
||||||
key = key.replace('_', '-')
|
key = key.replace('_', '-')
|
||||||
|
|
||||||
if isinstance(value, BooleanType):
|
if isinstance(value, bool):
|
||||||
value = str()
|
value = str()
|
||||||
else:
|
else:
|
||||||
value = '=%s' % value
|
value = '=%s' % value
|
||||||
|
|
|
@ -25,20 +25,19 @@
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
from types import *
|
from types import *
|
||||||
from glib import GError
|
|
||||||
|
|
||||||
def remove(sequence, target):
|
def remove(sequence, target):
|
||||||
if isinstance(sequence, ListType):
|
if isinstance(sequence, list):
|
||||||
if target in sequence:
|
if target in sequence:
|
||||||
sequence.remove(target)
|
sequence.remove(target)
|
||||||
elif isinstance(sequence, DictType):
|
elif isinstance(sequence, dict):
|
||||||
if target in sequence:
|
if target in sequence:
|
||||||
del sequence[target]
|
del sequence[target]
|
||||||
|
|
||||||
def gconf(path):
|
def gconf(path):
|
||||||
try:
|
try:
|
||||||
from gconf import client_get_default
|
from gi.repository import GConf
|
||||||
client = client_get_default()
|
client = GConf.Client.get_default()
|
||||||
return client.get_string(path)
|
return client.get_string(path)
|
||||||
except ImportError, GError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -100,13 +100,13 @@ class OldEntry(nbxmpp.Node, object):
|
||||||
|
|
||||||
|
|
||||||
if main_feed is not None and source_feed is not None:
|
if main_feed is not None and source_feed is not None:
|
||||||
return u'%s: %s' % (main_feed, source_feed)
|
return '%s: %s' % (main_feed, source_feed)
|
||||||
elif main_feed is not None:
|
elif main_feed is not None:
|
||||||
return main_feed
|
return main_feed
|
||||||
elif source_feed is not None:
|
elif source_feed is not None:
|
||||||
return source_feed
|
return source_feed
|
||||||
else:
|
else:
|
||||||
return u''
|
return ''
|
||||||
|
|
||||||
feed_title = property(get_feed_title, None, None,
|
feed_title = property(get_feed_title, None, None,
|
||||||
''' Title of feed. It is built from entry''s original feed title and title of feed
|
''' Title of feed. It is built from entry''s original feed title and title of feed
|
||||||
|
@ -173,4 +173,4 @@ class OldEntry(nbxmpp.Node, object):
|
||||||
updated = property(get_updated, None, None,
|
updated = property(get_updated, None, None,
|
||||||
''' Last significant modification time. ''')
|
''' Last significant modification time. ''')
|
||||||
|
|
||||||
feed_tagline = u''
|
feed_tagline = ''
|
||||||
|
|
|
@ -130,7 +130,8 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
S = ''
|
S = ''
|
||||||
identities.sort(cmp=sort_identities_func)
|
from functools import cmp_to_key
|
||||||
|
identities.sort(key=cmp_to_key(sort_identities_func))
|
||||||
for i in identities:
|
for i in identities:
|
||||||
c = i['category']
|
c = i['category']
|
||||||
type_ = i.get('type', '')
|
type_ = i.get('type', '')
|
||||||
|
@ -140,7 +141,7 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
||||||
features.sort()
|
features.sort()
|
||||||
for f in features:
|
for f in features:
|
||||||
S += '%s<' % f
|
S += '%s<' % f
|
||||||
dataforms.sort(cmp=sort_dataforms_func)
|
dataforms.sort(key=cmp_to_key(sort_dataforms_func))
|
||||||
for dataform in dataforms:
|
for dataform in dataforms:
|
||||||
# fields indexed by var
|
# fields indexed by var
|
||||||
fields = {}
|
fields = {}
|
||||||
|
@ -157,12 +158,12 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
||||||
S += '%s<' % value
|
S += '%s<' % value
|
||||||
|
|
||||||
if hash_method == 'sha-1':
|
if hash_method == 'sha-1':
|
||||||
hash_ = hashlib.sha1(S)
|
hash_ = hashlib.sha1(S.encode('utf-8'))
|
||||||
elif hash_method == 'md5':
|
elif hash_method == 'md5':
|
||||||
hash_ = hashlib.md5(S)
|
hash_ = hashlib.md5(S.encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
return ''
|
return ''
|
||||||
return base64.b64encode(hash_.digest())
|
return base64.b64encode(hash_.digest()).decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
|
@ -173,7 +173,7 @@ try:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
except ImportError:
|
except ImportError:
|
||||||
log.warn('Import of PyOpenSSL or pyasn1 failed. Cannot correctly check '
|
log.warning('Import of PyOpenSSL or pyasn1 failed. Cannot correctly check '
|
||||||
'SSL certificate')
|
'SSL certificate')
|
||||||
|
|
||||||
def check_certificate(cert, domain):
|
def check_certificate(cert, domain):
|
||||||
|
|
|
@ -29,16 +29,16 @@ import sys
|
||||||
import stat
|
import stat
|
||||||
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
import logger
|
from common import logger
|
||||||
from common import jingle_xtls
|
from common import jingle_xtls
|
||||||
|
|
||||||
# DO NOT MOVE ABOVE OF import gajim
|
# DO NOT MOVE ABOVE OF import gajim
|
||||||
import sqlite3 as sqlite
|
import sqlite3 as sqlite
|
||||||
|
|
||||||
def create_log_db():
|
def create_log_db():
|
||||||
print _('creating logs database')
|
print(_('creating logs database'))
|
||||||
con = sqlite.connect(logger.LOG_DB_PATH)
|
con = sqlite.connect(logger.LOG_DB_PATH)
|
||||||
os.chmod(logger.LOG_DB_PATH, 0600) # rw only for us
|
os.chmod(logger.LOG_DB_PATH, 0o600) # rw only for us
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
# create the tables
|
# create the tables
|
||||||
# kind can be
|
# kind can be
|
||||||
|
@ -84,9 +84,9 @@ def create_log_db():
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
def create_cache_db():
|
def create_cache_db():
|
||||||
print _('creating cache database')
|
print(_('creating cache database'))
|
||||||
con = sqlite.connect(logger.CACHE_DB_PATH)
|
con = sqlite.connect(logger.CACHE_DB_PATH)
|
||||||
os.chmod(logger.CACHE_DB_PATH, 0600) # rw only for us
|
os.chmod(logger.CACHE_DB_PATH, 0o600) # rw only for us
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
cur.executescript(
|
cur.executescript(
|
||||||
'''
|
'''
|
||||||
|
@ -128,16 +128,16 @@ def create_cache_db():
|
||||||
con.close()
|
con.close()
|
||||||
|
|
||||||
def split_db():
|
def split_db():
|
||||||
print 'spliting database'
|
print('spliting database')
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
try:
|
try:
|
||||||
import configpaths
|
import configpaths
|
||||||
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
||||||
os.environ[u'appdata']), u'Gajim')
|
os.environ['appdata']), 'Gajim')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
OLD_LOG_DB_FOLDER = u'.'
|
OLD_LOG_DB_FOLDER = '.'
|
||||||
else:
|
else:
|
||||||
OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
|
OLD_LOG_DB_FOLDER = os.path.expanduser('~/.gajim')
|
||||||
|
|
||||||
tmp = logger.CACHE_DB_PATH
|
tmp = logger.CACHE_DB_PATH
|
||||||
logger.CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
|
logger.CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
|
||||||
|
@ -148,7 +148,7 @@ def split_db():
|
||||||
os.chdir(back)
|
os.chdir(back)
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
cur.execute('''SELECT name FROM sqlite_master WHERE type = 'table';''')
|
cur.execute('''SELECT name FROM sqlite_master WHERE type = 'table';''')
|
||||||
tables = cur.fetchall() # we get [(u'jids',), (u'unread_messages',), ...
|
tables = cur.fetchall() # we get [('jids',), ('unread_messages',), ...
|
||||||
tables = [t[0] for t in tables]
|
tables = [t[0] for t in tables]
|
||||||
cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
|
cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
|
||||||
for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
|
for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
|
||||||
|
@ -161,9 +161,9 @@ def split_db():
|
||||||
con.commit()
|
con.commit()
|
||||||
cur.executescript('DROP TABLE %s;' % table)
|
cur.executescript('DROP TABLE %s;' % table)
|
||||||
con.commit()
|
con.commit()
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
print >> sys.stderr, 'error moving table %s to cache.db: %s' % \
|
print('error moving table %s to cache.db: %s' % (table, str(e)),
|
||||||
(table, str(e))
|
file=sys.stderr)
|
||||||
con.close()
|
con.close()
|
||||||
logger.CACHE_DB_PATH = tmp
|
logger.CACHE_DB_PATH = tmp
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ def check_and_possibly_move_config():
|
||||||
vars['MY_ICONSETS_PATH'] = gajim.MY_ICONSETS_PATH
|
vars['MY_ICONSETS_PATH'] = gajim.MY_ICONSETS_PATH
|
||||||
vars['MY_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_ICONSETS_PATH
|
vars['MY_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_ICONSETS_PATH
|
||||||
vars['MY_ACTIVITY_ICONSETS_PATH'] = gajim.MY_ACTIVITY_ICONSETS_PATH
|
vars['MY_ACTIVITY_ICONSETS_PATH'] = gajim.MY_ACTIVITY_ICONSETS_PATH
|
||||||
import configpaths
|
from common import configpaths
|
||||||
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
||||||
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||||
|
@ -189,22 +189,22 @@ def check_and_possibly_move_config():
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
try:
|
try:
|
||||||
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
||||||
os.environ[u'appdata']), u'Gajim')
|
os.environ['appdata']), 'Gajim')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
OLD_LOG_DB_FOLDER = u'.'
|
OLD_LOG_DB_FOLDER = '.'
|
||||||
else:
|
else:
|
||||||
OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
|
OLD_LOG_DB_FOLDER = os.path.expanduser('~/.gajim')
|
||||||
if not os.path.exists(OLD_LOG_DB_FOLDER):
|
if not os.path.exists(OLD_LOG_DB_FOLDER):
|
||||||
return
|
return
|
||||||
OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'logs.db')
|
OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'logs.db')
|
||||||
OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'cache.db')
|
OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
|
||||||
vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'vcards')
|
vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'vcards')
|
||||||
vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'avatars')
|
vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'avatars')
|
||||||
vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'emoticons')
|
vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'emoticons')
|
||||||
vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'iconsets')
|
vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'iconsets')
|
||||||
vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'moods')
|
vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'moods')
|
||||||
vars['OLD_MY_ACTIVITY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER,
|
vars['OLD_MY_ACTIVITY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER,
|
||||||
u'activities')
|
'activities')
|
||||||
OLD_CONFIG_FILES = []
|
OLD_CONFIG_FILES = []
|
||||||
OLD_DATA_FILES = []
|
OLD_DATA_FILES = []
|
||||||
for f in os.listdir(OLD_LOG_DB_FOLDER):
|
for f in os.listdir(OLD_LOG_DB_FOLDER):
|
||||||
|
@ -249,7 +249,7 @@ def check_and_possibly_move_config():
|
||||||
continue
|
continue
|
||||||
if not os.path.exists(src):
|
if not os.path.exists(src):
|
||||||
continue
|
continue
|
||||||
print 'moving %s to %s' % (src, dst)
|
print(_('moving %s to %s') % (src, dst))
|
||||||
shutil.move(src, dst)
|
shutil.move(src, dst)
|
||||||
gajim.logger.init_vars()
|
gajim.logger.init_vars()
|
||||||
gajim.logger.attach_cache_database()
|
gajim.logger.attach_cache_database()
|
||||||
|
@ -263,7 +263,7 @@ def check_and_possibly_create_paths():
|
||||||
|
|
||||||
VCARD_PATH = gajim.VCARD_PATH
|
VCARD_PATH = gajim.VCARD_PATH
|
||||||
AVATAR_PATH = gajim.AVATAR_PATH
|
AVATAR_PATH = gajim.AVATAR_PATH
|
||||||
import configpaths
|
from common import configpaths
|
||||||
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
||||||
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||||
|
@ -275,57 +275,57 @@ def check_and_possibly_create_paths():
|
||||||
if not os.path.exists(MY_DATA):
|
if not os.path.exists(MY_DATA):
|
||||||
create_path(MY_DATA)
|
create_path(MY_DATA)
|
||||||
elif os.path.isfile(MY_DATA):
|
elif os.path.isfile(MY_DATA):
|
||||||
print _('%s is a file but it should be a directory') % MY_DATA
|
print(_('%s is a file but it should be a directory') % MY_DATA)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(MY_CONFIG):
|
if not os.path.exists(MY_CONFIG):
|
||||||
create_path(MY_CONFIG)
|
create_path(MY_CONFIG)
|
||||||
elif os.path.isfile(MY_CONFIG):
|
elif os.path.isfile(MY_CONFIG):
|
||||||
print _('%s is a file but it should be a directory') % MY_CONFIG
|
print(_('%s is a file but it should be a directory') % MY_CONFIG)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(MY_CACHE):
|
if not os.path.exists(MY_CACHE):
|
||||||
create_path(MY_CACHE)
|
create_path(MY_CACHE)
|
||||||
elif os.path.isfile(MY_CACHE):
|
elif os.path.isfile(MY_CACHE):
|
||||||
print _('%s is a file but it should be a directory') % MY_CACHE
|
print(_('%s is a file but it should be a directory') % MY_CACHE)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(VCARD_PATH):
|
if not os.path.exists(VCARD_PATH):
|
||||||
create_path(VCARD_PATH)
|
create_path(VCARD_PATH)
|
||||||
elif os.path.isfile(VCARD_PATH):
|
elif os.path.isfile(VCARD_PATH):
|
||||||
print _('%s is a file but it should be a directory') % VCARD_PATH
|
print(_('%s is a file but it should be a directory') % VCARD_PATH)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(AVATAR_PATH):
|
if not os.path.exists(AVATAR_PATH):
|
||||||
create_path(AVATAR_PATH)
|
create_path(AVATAR_PATH)
|
||||||
elif os.path.isfile(AVATAR_PATH):
|
elif os.path.isfile(AVATAR_PATH):
|
||||||
print _('%s is a file but it should be a directory') % AVATAR_PATH
|
print(_('%s is a file but it should be a directory') % AVATAR_PATH)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(LOG_DB_FOLDER):
|
if not os.path.exists(LOG_DB_FOLDER):
|
||||||
create_path(LOG_DB_FOLDER)
|
create_path(LOG_DB_FOLDER)
|
||||||
elif os.path.isfile(LOG_DB_FOLDER):
|
elif os.path.isfile(LOG_DB_FOLDER):
|
||||||
print _('%s is a file but it should be a directory') % LOG_DB_FOLDER
|
print(_('%s is a file but it should be a directory') % LOG_DB_FOLDER)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(PLUGINS_CONFIG_PATH):
|
if not os.path.exists(PLUGINS_CONFIG_PATH):
|
||||||
create_path(PLUGINS_CONFIG_PATH)
|
create_path(PLUGINS_CONFIG_PATH)
|
||||||
elif os.path.isfile(PLUGINS_CONFIG_PATH):
|
elif os.path.isfile(PLUGINS_CONFIG_PATH):
|
||||||
print _('%s is a file but it should be a directory') % PLUGINS_CONFIG_PATH
|
print(_('%s is a file but it should be a directory') % PLUGINS_CONFIG_PATH)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(CACHE_DB_FOLDER):
|
if not os.path.exists(CACHE_DB_FOLDER):
|
||||||
create_path(CACHE_DB_FOLDER)
|
create_path(CACHE_DB_FOLDER)
|
||||||
elif os.path.isfile(CACHE_DB_FOLDER):
|
elif os.path.isfile(CACHE_DB_FOLDER):
|
||||||
print _('%s is a file but it should be a directory') % CACHE_DB_FOLDER
|
print(_('%s is a file but it should be a directory') % CACHE_DB_FOLDER)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
check_and_possibly_move_config()
|
check_and_possibly_move_config()
|
||||||
|
@ -334,18 +334,18 @@ def check_and_possibly_create_paths():
|
||||||
create_log_db()
|
create_log_db()
|
||||||
gajim.logger.init_vars()
|
gajim.logger.init_vars()
|
||||||
elif os.path.isdir(LOG_DB_PATH):
|
elif os.path.isdir(LOG_DB_PATH):
|
||||||
print _('%s is a directory but should be a file') % LOG_DB_PATH
|
print(_('%s is a directory but should be a file') % LOG_DB_PATH)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(CACHE_DB_PATH):
|
if not os.path.exists(CACHE_DB_PATH):
|
||||||
create_cache_db()
|
create_cache_db()
|
||||||
gajim.logger.attach_cache_database()
|
gajim.logger.attach_cache_database()
|
||||||
elif os.path.isdir(CACHE_DB_PATH):
|
elif os.path.isdir(CACHE_DB_PATH):
|
||||||
print _('%s is a directory but should be a file') % CACHE_DB_PATH
|
print(_('%s is a directory but should be a file') % CACHE_DB_PATH)
|
||||||
print _('Gajim will now exit')
|
print(_('Gajim will now exit'))
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
if not os.path.exists(XTLS_CERTS):
|
if not os.path.exists(XTLS_CERTS):
|
||||||
create_path(XTLS_CERTS)
|
create_path(XTLS_CERTS)
|
||||||
if not os.path.exists(LOCAL_XTLS_CERTS):
|
if not os.path.exists(LOCAL_XTLS_CERTS):
|
||||||
|
@ -363,5 +363,5 @@ def create_path(directory):
|
||||||
create_path(head)
|
create_path(head)
|
||||||
if os.path.exists(directory):
|
if os.path.exists(directory):
|
||||||
return
|
return
|
||||||
print _('creating %s directory') % directory
|
print(('creating %s directory') % directory)
|
||||||
os.mkdir(directory, 0700)
|
os.mkdir(directory, 0o700)
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import helpers
|
from common import helpers
|
||||||
import dataforms
|
from common import dataforms
|
||||||
import gajim
|
from common import gajim
|
||||||
from common.connection_handlers_events import MessageOutgoingEvent
|
from common.connection_handlers_events import MessageOutgoingEvent
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -105,12 +105,12 @@ class ChangeStatusCommand(AdHocCommand):
|
||||||
var = 'presence-type',
|
var = 'presence-type',
|
||||||
label = 'Type of presence:',
|
label = 'Type of presence:',
|
||||||
options = [
|
options = [
|
||||||
(u'chat', _('Free for chat')),
|
('chat', _('Free for chat')),
|
||||||
(u'online', _('Online')),
|
('online', _('Online')),
|
||||||
(u'away', _('Away')),
|
('away', _('Away')),
|
||||||
(u'xa', _('Extended away')),
|
('xa', _('Extended away')),
|
||||||
(u'dnd', _('Do not disturb')),
|
('dnd', _('Do not disturb')),
|
||||||
(u'offline', _('Offline - disconnect'))],
|
('offline', _('Offline - disconnect'))],
|
||||||
value = 'online',
|
value = 'online',
|
||||||
required = True),
|
required = True),
|
||||||
dataforms.Field('text-multi',
|
dataforms.Field('text-multi',
|
||||||
|
@ -147,7 +147,7 @@ class ChangeStatusCommand(AdHocCommand):
|
||||||
try:
|
try:
|
||||||
presencedesc = form['presence-desc'].value
|
presencedesc = form['presence-desc'].value
|
||||||
except Exception: # same exceptions as in last comment
|
except Exception: # same exceptions as in last comment
|
||||||
presencedesc = u''
|
presencedesc = ''
|
||||||
|
|
||||||
response, cmd = self.buildResponse(request, status = 'completed')
|
response, cmd = self.buildResponse(request, status = 'completed')
|
||||||
cmd.addChild('note', {}, _('The status has been changed.'))
|
cmd.addChild('note', {}, _('The status has been changed.'))
|
||||||
|
@ -198,7 +198,7 @@ class LeaveGroupchatsCommand(AdHocCommand):
|
||||||
options = []
|
options = []
|
||||||
account = self.connection.name
|
account = self.connection.name
|
||||||
for gc in find_current_groupchats(account):
|
for gc in find_current_groupchats(account):
|
||||||
options.append((u'%s' %(gc[0]), _('%(nickname)s on %(room_jid)s') % \
|
options.append(('%s' %(gc[0]), _('%(nickname)s on %(room_jid)s') % \
|
||||||
{'nickname': gc[1], 'room_jid': gc[0]}))
|
{'nickname': gc[1], 'room_jid': gc[0]}))
|
||||||
if not len(options):
|
if not len(options):
|
||||||
response, cmd = self.buildResponse(request, status = 'completed')
|
response, cmd = self.buildResponse(request, status = 'completed')
|
||||||
|
@ -369,11 +369,11 @@ class ConnectionCommands:
|
||||||
# buildReply don't copy the node attribute. Re-add it
|
# buildReply don't copy the node attribute. Re-add it
|
||||||
q.setAttr('node', nbxmpp.NS_COMMANDS)
|
q.setAttr('node', nbxmpp.NS_COMMANDS)
|
||||||
|
|
||||||
for node, cmd in self.__commands.iteritems():
|
for node, cmd in self.__commands.items():
|
||||||
if cmd.isVisibleFor(self.isSameJID(jid)):
|
if cmd.isVisibleFor(self.isSameJID(jid)):
|
||||||
q.addChild('item', {
|
q.addChild('item', {
|
||||||
# TODO: find the jid
|
# TODO: find the jid
|
||||||
'jid': self.getOurBareJID() + u'/' + self.server_resource,
|
'jid': self.getOurBareJID() + '/' + self.server_resource,
|
||||||
'node': node,
|
'node': node,
|
||||||
'name': cmd.commandname})
|
'name': cmd.commandname})
|
||||||
|
|
||||||
|
@ -387,7 +387,7 @@ class ConnectionCommands:
|
||||||
try:
|
try:
|
||||||
jid = helpers.get_full_jid_from_iq(iq_obj)
|
jid = helpers.get_full_jid_from_iq(iq_obj)
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
|
log.warning('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
|
||||||
return
|
return
|
||||||
node = iq_obj.getTagAttr('query', 'node')
|
node = iq_obj.getTagAttr('query', 'node')
|
||||||
|
|
||||||
|
|
|
@ -35,8 +35,8 @@
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
import copy
|
import copy
|
||||||
import defs
|
from common import defs
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
|
|
||||||
(
|
(
|
||||||
OPT_TYPE,
|
OPT_TYPE,
|
||||||
|
@ -191,7 +191,7 @@ class Config:
|
||||||
'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
|
'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
|
||||||
'always_english_wikipedia': [opt_bool, False],
|
'always_english_wikipedia': [opt_bool, False],
|
||||||
'always_english_wiktionary': [opt_bool, True],
|
'always_english_wiktionary': [opt_bool, True],
|
||||||
'remote_control': [opt_bool, True, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
|
'remote_control': [opt_bool, False, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
|
||||||
'networkmanager_support': [opt_bool, True, _('If True, listen to D-Bus signals from NetworkManager and change the status of accounts (provided they do not have listen_to_network_manager set to False and they sync with global status) based upon the status of the network connection.'), True],
|
'networkmanager_support': [opt_bool, True, _('If True, listen to D-Bus signals from NetworkManager and change the status of accounts (provided they do not have listen_to_network_manager set to False and they sync with global status) based upon the status of the network connection.'), True],
|
||||||
'outgoing_chat_state_notifications': [opt_str, 'all', _('Sent chat state notifications. Can be one of all, composing_only, disabled.')],
|
'outgoing_chat_state_notifications': [opt_str, 'all', _('Sent chat state notifications. Can be one of all, composing_only, disabled.')],
|
||||||
'displayed_chat_state_notifications': [opt_str, 'all', _('Displayed chat state notifications in chat windows. Can be one of all, composing_only, disabled.')],
|
'displayed_chat_state_notifications': [opt_str, 'all', _('Displayed chat state notifications in chat windows. Can be one of all, composing_only, disabled.')],
|
||||||
|
@ -217,7 +217,7 @@ class Config:
|
||||||
'tabs_always_visible': [opt_bool, False, _('Show tab when only one conversation?')],
|
'tabs_always_visible': [opt_bool, False, _('Show tab when only one conversation?')],
|
||||||
'tabs_border': [opt_bool, False, _('Show tabbed notebook border in chat windows?')],
|
'tabs_border': [opt_bool, False, _('Show tabbed notebook border in chat windows?')],
|
||||||
'tabs_close_button': [opt_bool, True, _('Show close button in tab?')],
|
'tabs_close_button': [opt_bool, True, _('Show close button in tab?')],
|
||||||
'esession_modp': [opt_str, '5,14', _('A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session.')],
|
'esession_modp': [opt_str, '15,16,14', _('A list of modp groups to use in a Diffie-Hellman, highest preference first, separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher numbers are more secure, but take longer to calculate when you start a session.')],
|
||||||
'chat_avatar_width': [opt_int, 52],
|
'chat_avatar_width': [opt_int, 52],
|
||||||
'chat_avatar_height': [opt_int, 52],
|
'chat_avatar_height': [opt_int, 52],
|
||||||
'roster_avatar_width': [opt_int, 32],
|
'roster_avatar_width': [opt_int, 32],
|
||||||
|
@ -349,7 +349,6 @@ class Config:
|
||||||
'enable_esessions': [opt_bool, True, _('Enable ESessions encryption for this account.')],
|
'enable_esessions': [opt_bool, True, _('Enable ESessions encryption for this account.')],
|
||||||
'autonegotiate_esessions': [opt_bool, True, _('Should Gajim automatically start an encrypted session when possible?')],
|
'autonegotiate_esessions': [opt_bool, True, _('Should Gajim automatically start an encrypted session when possible?')],
|
||||||
'connection_types': [ opt_str, 'tls ssl plain', _('Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain')],
|
'connection_types': [ opt_str, 'tls ssl plain', _('Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain')],
|
||||||
'tls_version': [ opt_str, '1.0', '' ],
|
|
||||||
'cipher_list': [ opt_str, 'HIGH:!aNULL:RC4-SHA', '' ],
|
'cipher_list': [ opt_str, 'HIGH:!aNULL:RC4-SHA', '' ],
|
||||||
'action_when_plaintext_connection': [ opt_str, 'warn', _('Show a warning dialog before sending password on an plaintext connection. Can be \'warn\', \'connect\', \'disconnect\'') ],
|
'action_when_plaintext_connection': [ opt_str, 'warn', _('Show a warning dialog before sending password on an plaintext connection. Can be \'warn\', \'connect\', \'disconnect\'') ],
|
||||||
'warn_when_insecure_ssl_connection': [ opt_bool, True, _('Show a warning dialog before using standard SSL library.') ],
|
'warn_when_insecure_ssl_connection': [ opt_bool, True, _('Show a warning dialog before using standard SSL library.') ],
|
||||||
|
@ -573,7 +572,7 @@ class Config:
|
||||||
Tree-like interface
|
Tree-like interface
|
||||||
"""
|
"""
|
||||||
if node is None:
|
if node is None:
|
||||||
for child, option in self.__options[1].iteritems():
|
for child, option in self.__options[1].items():
|
||||||
yield (child, ), option
|
yield (child, ), option
|
||||||
for grandparent in self.__options_per_key:
|
for grandparent in self.__options_per_key:
|
||||||
yield (grandparent, ), None
|
yield (grandparent, ), None
|
||||||
|
@ -584,7 +583,7 @@ class Config:
|
||||||
elif len(node) == 2:
|
elif len(node) == 2:
|
||||||
grandparent, parent = node
|
grandparent, parent = node
|
||||||
children = self.__options_per_key[grandparent][1][parent]
|
children = self.__options_per_key[grandparent][1][parent]
|
||||||
for child, option in children.iteritems():
|
for child, option in children.items():
|
||||||
yield (grandparent, parent, child), option
|
yield (grandparent, parent, child), option
|
||||||
else:
|
else:
|
||||||
raise ValueError('Invalid node')
|
raise ValueError('Invalid node')
|
||||||
|
@ -630,11 +629,9 @@ class Config:
|
||||||
|
|
||||||
def set(self, optname, value):
|
def set(self, optname, value):
|
||||||
if optname not in self.__options[1]:
|
if optname not in self.__options[1]:
|
||||||
# raise RuntimeError, 'option %s does not exist' % optname
|
|
||||||
return
|
return
|
||||||
value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
|
value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
|
||||||
if value is None:
|
if value is None:
|
||||||
# raise RuntimeError, 'value of %s cannot be None' % optname
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self.__options[1][optname] = value
|
self.__options[1][optname] = value
|
||||||
|
@ -642,7 +639,7 @@ class Config:
|
||||||
|
|
||||||
def get(self, optname=None):
|
def get(self, optname=None):
|
||||||
if not optname:
|
if not optname:
|
||||||
return self.__options[1].keys()
|
return list(self.__options[1].keys())
|
||||||
if optname not in self.__options[1]:
|
if optname not in self.__options[1]:
|
||||||
return None
|
return None
|
||||||
return self.__options[1][optname]
|
return self.__options[1][optname]
|
||||||
|
@ -671,7 +668,6 @@ class Config:
|
||||||
|
|
||||||
def add_per(self, typename, name): # per_group_of_option
|
def add_per(self, typename, name): # per_group_of_option
|
||||||
if typename not in self.__options_per_key:
|
if typename not in self.__options_per_key:
|
||||||
# raise RuntimeError, 'option %s does not exist' % typename
|
|
||||||
return
|
return
|
||||||
|
|
||||||
opt = self.__options_per_key[typename]
|
opt = self.__options_per_key[typename]
|
||||||
|
@ -685,7 +681,6 @@ class Config:
|
||||||
|
|
||||||
def del_per(self, typename, name, subname = None): # per_group_of_option
|
def del_per(self, typename, name, subname = None): # per_group_of_option
|
||||||
if typename not in self.__options_per_key:
|
if typename not in self.__options_per_key:
|
||||||
# raise RuntimeError, 'option %s does not exist' % typename
|
|
||||||
return
|
return
|
||||||
|
|
||||||
opt = self.__options_per_key[typename]
|
opt = self.__options_per_key[typename]
|
||||||
|
@ -698,22 +693,18 @@ class Config:
|
||||||
|
|
||||||
def set_per(self, optname, key, subname, value): # per_group_of_option
|
def set_per(self, optname, key, subname, value): # per_group_of_option
|
||||||
if optname not in self.__options_per_key:
|
if optname not in self.__options_per_key:
|
||||||
# raise RuntimeError, 'option %s does not exist' % optname
|
|
||||||
return
|
return
|
||||||
if not key:
|
if not key:
|
||||||
return
|
return
|
||||||
dict_ = self.__options_per_key[optname][1]
|
dict_ = self.__options_per_key[optname][1]
|
||||||
if key not in dict_:
|
if key not in dict_:
|
||||||
# raise RuntimeError, '%s is not a key of %s' % (key, dict_)
|
|
||||||
self.add_per(optname, key)
|
self.add_per(optname, key)
|
||||||
obj = dict_[key]
|
obj = dict_[key]
|
||||||
if subname not in obj:
|
if subname not in obj:
|
||||||
# raise RuntimeError, '%s is not a key of %s' % (subname, obj)
|
|
||||||
return
|
return
|
||||||
typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
|
typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
|
||||||
value = self.is_valid(typ, value)
|
value = self.is_valid(typ, value)
|
||||||
if value is None:
|
if value is None:
|
||||||
# raise RuntimeError, '%s of %s cannot be None' % optname
|
|
||||||
return
|
return
|
||||||
obj[subname] = value
|
obj[subname] = value
|
||||||
self._timeout_save()
|
self._timeout_save()
|
||||||
|
@ -723,7 +714,7 @@ class Config:
|
||||||
return None
|
return None
|
||||||
dict_ = self.__options_per_key[optname][1]
|
dict_ = self.__options_per_key[optname][1]
|
||||||
if not key:
|
if not key:
|
||||||
return dict_.keys()
|
return list(dict_.keys())
|
||||||
if key not in dict_:
|
if key not in dict_:
|
||||||
if subname in self.__options_per_key[optname][0]:
|
if subname in self.__options_per_key[optname][0]:
|
||||||
return self.__options_per_key[optname][0][subname][1]
|
return self.__options_per_key[optname][0][subname][1]
|
||||||
|
@ -812,7 +803,7 @@ class Config:
|
||||||
def _timeout_save(self):
|
def _timeout_save(self):
|
||||||
if self.save_timeout_id:
|
if self.save_timeout_id:
|
||||||
return
|
return
|
||||||
self.save_timeout_id = gobject.timeout_add(1000, self._really_save)
|
self.save_timeout_id = GLib.timeout_add(1000, self._really_save)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
#init default values
|
#init default values
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import defs
|
from common import defs
|
||||||
HAVE_XDG = True
|
HAVE_XDG = True
|
||||||
try:
|
try:
|
||||||
__import__(xdg)
|
__import__(xdg)
|
||||||
|
@ -61,7 +61,7 @@ def fse(s):
|
||||||
"""
|
"""
|
||||||
Convert from filesystem encoding if not already Unicode
|
Convert from filesystem encoding if not already Unicode
|
||||||
"""
|
"""
|
||||||
return unicode(s, sys.getfilesystemencoding())
|
return s
|
||||||
|
|
||||||
def windowsify(s):
|
def windowsify(s):
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
|
@ -82,10 +82,10 @@ class ConfigPaths:
|
||||||
# variable 'appdata' is in? Assuming it to be in filesystem
|
# variable 'appdata' is in? Assuming it to be in filesystem
|
||||||
# encoding.
|
# encoding.
|
||||||
self.config_root = self.cache_root = self.data_root = \
|
self.config_root = self.cache_root = self.data_root = \
|
||||||
os.path.join(fse(os.environ[u'appdata']), u'Gajim')
|
os.path.join(fse(os.environ['appdata']), 'Gajim')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# win9x, in cwd
|
# win9x, in cwd
|
||||||
self.config_root = self.cache_root = self.data_root = u'.'
|
self.config_root = self.cache_root = self.data_root = '.'
|
||||||
else: # Unices
|
else: # Unices
|
||||||
# Pass in an Unicode string, and hopefully get one back.
|
# Pass in an Unicode string, and hopefully get one back.
|
||||||
if HAVE_XDG:
|
if HAVE_XDG:
|
||||||
|
@ -93,23 +93,23 @@ class ConfigPaths:
|
||||||
if not self.config_root:
|
if not self.config_root:
|
||||||
# Folder doesn't exist yet.
|
# Folder doesn't exist yet.
|
||||||
self.config_root = os.path.join(xdg.BaseDirectory.\
|
self.config_root = os.path.join(xdg.BaseDirectory.\
|
||||||
xdg_config_dirs[0], u'gajim')
|
xdg_config_dirs[0], 'gajim')
|
||||||
|
|
||||||
self.cache_root = os.path.join(xdg.BaseDirectory.xdg_cache_home,
|
self.cache_root = os.path.join(xdg.BaseDirectory.xdg_cache_home,
|
||||||
u'gajim')
|
'gajim')
|
||||||
|
|
||||||
self.data_root = xdg.BaseDirectory.save_data_path('gajim')
|
self.data_root = xdg.BaseDirectory.save_data_path('gajim')
|
||||||
if not self.data_root:
|
if not self.data_root:
|
||||||
self.data_root = os.path.join(xdg.BaseDirectory.\
|
self.data_root = os.path.join(xdg.BaseDirectory.\
|
||||||
xdg_data_dirs[0], u'gajim')
|
xdg_data_dirs[0], 'gajim')
|
||||||
else:
|
else:
|
||||||
expand = os.path.expanduser
|
expand = os.path.expanduser
|
||||||
base = os.getenv('XDG_CONFIG_HOME') or expand(u'~/.config')
|
base = os.getenv('XDG_CONFIG_HOME') or expand('~/.config')
|
||||||
self.config_root = os.path.join(base, u'gajim')
|
self.config_root = os.path.join(base, 'gajim')
|
||||||
base = os.getenv('XDG_CACHE_HOME') or expand(u'~/.cache')
|
base = os.getenv('XDG_CACHE_HOME') or expand('~/.cache')
|
||||||
self.cache_root = os.path.join(base, u'gajim')
|
self.cache_root = os.path.join(base, 'gajim')
|
||||||
base = os.getenv('XDG_DATA_HOME') or expand(u'~/.local/share')
|
base = os.getenv('XDG_DATA_HOME') or expand('~/.local/share')
|
||||||
self.data_root = os.path.join(base, u'gajim')
|
self.data_root = os.path.join(base, 'gajim')
|
||||||
|
|
||||||
def add(self, name, type_, path):
|
def add(self, name, type_, path):
|
||||||
self.paths[name] = (type_, path)
|
self.paths[name] = (type_, path)
|
||||||
|
@ -130,40 +130,41 @@ class ConfigPaths:
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return default
|
return default
|
||||||
|
|
||||||
def iteritems(self):
|
def items(self):
|
||||||
for key in self.paths.iterkeys():
|
for key in self.paths.keys():
|
||||||
yield (key, self[key])
|
yield (key, self[key])
|
||||||
|
|
||||||
def init(self, root=None):
|
def init(self, root=None):
|
||||||
if root is not None:
|
if root is not None:
|
||||||
self.config_root = self.cache_root = self.data_root = root
|
self.config_root = self.cache_root = self.data_root = root
|
||||||
|
|
||||||
d = {'MY_DATA': '', 'LOG_DB': u'logs.db', 'MY_CACERTS': u'cacerts.pem',
|
d = {'MY_DATA': '', 'LOG_DB': 'logs.db', 'MY_CACERTS': 'cacerts.pem',
|
||||||
'MY_EMOTS': u'emoticons', 'MY_ICONSETS': u'iconsets',
|
'MY_EMOTS': 'emoticons', 'MY_ICONSETS': 'iconsets',
|
||||||
'MY_MOOD_ICONSETS': u'moods', 'MY_ACTIVITY_ICONSETS': u'activities',
|
'MY_MOOD_ICONSETS': 'moods', 'MY_ACTIVITY_ICONSETS': 'activities',
|
||||||
'PLUGINS_USER': u'plugins', 'MY_PEER_CERTS': u'certs'}
|
'PLUGINS_USER': 'plugins', 'MY_PEER_CERTS': 'certs',
|
||||||
|
'RNG_SEED': 'rng_seed'}
|
||||||
for name in d:
|
for name in d:
|
||||||
self.add(name, TYPE_DATA, windowsify(d[name]))
|
self.add(name, TYPE_DATA, windowsify(d[name]))
|
||||||
|
|
||||||
d = {'MY_CACHE': '', 'CACHE_DB': u'cache.db', 'VCARD': u'vcards',
|
d = {'MY_CACHE': '', 'CACHE_DB': 'cache.db', 'VCARD': 'vcards',
|
||||||
'AVATAR': u'avatars'}
|
'AVATAR': 'avatars'}
|
||||||
for name in d:
|
for name in d:
|
||||||
self.add(name, TYPE_CACHE, windowsify(d[name]))
|
self.add(name, TYPE_CACHE, windowsify(d[name]))
|
||||||
|
|
||||||
self.add('MY_CONFIG', TYPE_CONFIG, '')
|
self.add('MY_CONFIG', TYPE_CONFIG, '')
|
||||||
self.add('MY_CERT', TYPE_CONFIG, '')
|
self.add('MY_CERT', TYPE_CONFIG, '')
|
||||||
|
|
||||||
basedir = fse(os.environ.get(u'GAJIM_BASEDIR', defs.basedir))
|
basedir = fse(os.environ.get('GAJIM_BASEDIR', defs.basedir))
|
||||||
self.add('DATA', None, os.path.join(basedir, windowsify(u'data')))
|
self.add('DATA', None, os.path.join(basedir, windowsify('data')))
|
||||||
self.add('ICONS', None, os.path.join(basedir, windowsify(u'icons')))
|
self.add('ICONS', None, os.path.join(basedir, windowsify('icons')))
|
||||||
self.add('HOME', None, fse(os.path.expanduser('~')))
|
self.add('HOME', None, fse(os.path.expanduser('~')))
|
||||||
self.add('PLUGINS_BASE', None, os.path.join(basedir,
|
self.add('PLUGINS_BASE', None, os.path.join(basedir,
|
||||||
windowsify(u'plugins')))
|
windowsify('plugins')))
|
||||||
try:
|
try:
|
||||||
self.add('TMP', None, fse(tempfile.gettempdir()))
|
self.add('TMP', None, fse(tempfile.gettempdir()))
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
print >> sys.stderr, 'Error opening tmp folder: %s\nUsing %s' % (
|
print('Error opening tmp folder: %s\nUsing %s' % (str(e),
|
||||||
str(e), os.path.expanduser('~'))
|
os.path.expanduser('~')), file=sys.stderr)
|
||||||
self.add('TMP', None, fse(os.path.expanduser('~')))
|
self.add('TMP', None, fse(os.path.expanduser('~')))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -173,17 +174,17 @@ class ConfigPaths:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def init_profile(self, profile=''):
|
def init_profile(self, profile=''):
|
||||||
conffile = windowsify(u'config')
|
conffile = windowsify('config')
|
||||||
pidfile = windowsify(u'gajim')
|
pidfile = windowsify('gajim')
|
||||||
secretsfile = windowsify(u'secrets')
|
secretsfile = windowsify('secrets')
|
||||||
pluginsconfdir = windowsify(u'pluginsconfig')
|
pluginsconfdir = windowsify('pluginsconfig')
|
||||||
|
|
||||||
if len(profile) > 0:
|
if len(profile) > 0:
|
||||||
conffile += u'.' + profile
|
conffile += '.' + profile
|
||||||
pidfile += u'.' + profile
|
pidfile += '.' + profile
|
||||||
secretsfile += u'.' + profile
|
secretsfile += '.' + profile
|
||||||
pluginsconfdir += u'.' + profile
|
pluginsconfdir += '.' + profile
|
||||||
pidfile += u'.pid'
|
pidfile += '.pid'
|
||||||
self.add('CONFIG_FILE', TYPE_CONFIG, conffile)
|
self.add('CONFIG_FILE', TYPE_CONFIG, conffile)
|
||||||
self.add('PID_FILE', TYPE_CACHE, pidfile)
|
self.add('PID_FILE', TYPE_CACHE, pidfile)
|
||||||
self.add('SECRETS_FILE', TYPE_DATA, secretsfile)
|
self.add('SECRETS_FILE', TYPE_DATA, secretsfile)
|
||||||
|
|
|
@ -59,7 +59,7 @@ from common import gpg
|
||||||
from common import passwords
|
from common import passwords
|
||||||
from common import exceptions
|
from common import exceptions
|
||||||
from common import check_X509
|
from common import check_X509
|
||||||
from connection_handlers import *
|
from common.connection_handlers import *
|
||||||
|
|
||||||
if gajim.HAVE_PYOPENSSL:
|
if gajim.HAVE_PYOPENSSL:
|
||||||
import OpenSSL.crypto
|
import OpenSSL.crypto
|
||||||
|
@ -312,8 +312,7 @@ class CommonConnection:
|
||||||
else:
|
else:
|
||||||
def encrypt_thread(msg, keyID, always_trust=False):
|
def encrypt_thread(msg, keyID, always_trust=False):
|
||||||
# encrypt message. This function returns (msgenc, error)
|
# encrypt message. This function returns (msgenc, error)
|
||||||
return self.gpg.encrypt(msg.encode('utf-8'), [keyID],
|
return self.gpg.encrypt(msg, [keyID], always_trust)
|
||||||
always_trust)
|
|
||||||
def _on_encrypted(output):
|
def _on_encrypted(output):
|
||||||
msgenc, error = output
|
msgenc, error = output
|
||||||
if error == 'NOT_TRUSTED':
|
if error == 'NOT_TRUSTED':
|
||||||
|
@ -329,7 +328,7 @@ class CommonConnection:
|
||||||
form_node, user_nick, keyID, attention,
|
form_node, user_nick, keyID, attention,
|
||||||
correction_msg, callback)
|
correction_msg, callback)
|
||||||
gajim.nec.push_incoming_event(GPGTrustKeyEvent(None,
|
gajim.nec.push_incoming_event(GPGTrustKeyEvent(None,
|
||||||
conn=self, callback=_on_always_trust))
|
conn=self, keyID=keyID, callback=_on_always_trust))
|
||||||
else:
|
else:
|
||||||
self._message_encrypted_cb(output, type_, msg, msgtxt,
|
self._message_encrypted_cb(output, type_, msg, msgtxt,
|
||||||
original_message, fjid, resource, jid, xhtml,
|
original_message, fjid, resource, jid, xhtml,
|
||||||
|
@ -519,7 +518,7 @@ class CommonConnection:
|
||||||
log_msg = '<body xmlns="%s">%s</body>' % (
|
log_msg = '<body xmlns="%s">%s</body>' % (
|
||||||
nbxmpp.NS_XHTML, xhtml)
|
nbxmpp.NS_XHTML, xhtml)
|
||||||
gajim.logger.write(kind, jid, log_msg)
|
gajim.logger.write(kind, jid, log_msg)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
self.dispatch('DB_ERROR', (_('Disk Write Error'),
|
self.dispatch('DB_ERROR', (_('Disk Write Error'),
|
||||||
str(e)))
|
str(e)))
|
||||||
except exceptions.DatabaseMalformed:
|
except exceptions.DatabaseMalformed:
|
||||||
|
@ -680,10 +679,10 @@ class CommonConnection:
|
||||||
if realm == '':
|
if realm == '':
|
||||||
if event == nbxmpp.transports_nb.DATA_RECEIVED:
|
if event == nbxmpp.transports_nb.DATA_RECEIVED:
|
||||||
gajim.nec.push_incoming_event(StanzaReceivedEvent(None,
|
gajim.nec.push_incoming_event(StanzaReceivedEvent(None,
|
||||||
conn=self, stanza_str=unicode(data, errors='ignore')))
|
conn=self, stanza_str=data))
|
||||||
elif event == nbxmpp.transports_nb.DATA_SENT:
|
elif event == nbxmpp.transports_nb.DATA_SENT:
|
||||||
gajim.nec.push_incoming_event(StanzaSentEvent(None, conn=self,
|
gajim.nec.push_incoming_event(StanzaSentEvent(None, conn=self,
|
||||||
stanza_str=unicode(data)))
|
stanza_str=data))
|
||||||
|
|
||||||
def change_status(self, show, msg, auto=False):
|
def change_status(self, show, msg, auto=False):
|
||||||
if not msg:
|
if not msg:
|
||||||
|
@ -779,7 +778,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.private_storage_supported = True
|
self.private_storage_supported = True
|
||||||
self.privacy_rules_requested = False
|
self.privacy_rules_requested = False
|
||||||
self.streamError = ''
|
self.streamError = ''
|
||||||
self.secret_hmac = str(random.random())[2:]
|
self.secret_hmac = str(random.random())[2:].encode('utf-8')
|
||||||
|
|
||||||
self.sm = Smacks(self) # Stream Management
|
self.sm = Smacks(self) # Stream Management
|
||||||
|
|
||||||
|
@ -981,8 +980,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.connection.SendAndCallForResponse(iq,
|
self.connection.SendAndCallForResponse(iq,
|
||||||
_on_register_result)
|
_on_register_result)
|
||||||
else:
|
else:
|
||||||
if self.new_account_form.keys().sort() != \
|
if list(self.new_account_form.keys()).sort() != \
|
||||||
conf.keys().sort():
|
list(conf.keys()).sort():
|
||||||
# requested config has changed since first connection
|
# requested config has changed since first connection
|
||||||
reason = _('Server %s provided a different '
|
reason = _('Server %s provided a different '
|
||||||
'registration form') % data[0]
|
'registration form') % data[0]
|
||||||
|
@ -1239,11 +1238,9 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
if not os.path.exists(cacerts):
|
if not os.path.exists(cacerts):
|
||||||
cacerts = ''
|
cacerts = ''
|
||||||
mycerts = common.gajim.MY_CACERTS
|
mycerts = common.gajim.MY_CACERTS
|
||||||
tls_version = gajim.config.get_per('accounts', self.name,
|
|
||||||
'tls_version')
|
|
||||||
cipher_list = gajim.config.get_per('accounts', self.name,
|
cipher_list = gajim.config.get_per('accounts', self.name,
|
||||||
'cipher_list')
|
'cipher_list')
|
||||||
secure_tuple = (self._current_type, cacerts, mycerts, tls_version, cipher_list)
|
secure_tuple = (self._current_type, cacerts, mycerts, cipher_list)
|
||||||
|
|
||||||
con = nbxmpp.NonBlockingClient(
|
con = nbxmpp.NonBlockingClient(
|
||||||
domain=self._hostname,
|
domain=self._hostname,
|
||||||
|
@ -1391,41 +1388,40 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
cert = con.Connection.ssl_certificate
|
cert = con.Connection.ssl_certificate
|
||||||
if errnum > 0 and str(errnum) not in gajim.config.get_per('accounts',
|
if errnum > 0 and str(errnum) not in gajim.config.get_per('accounts',
|
||||||
self.name, 'ignore_ssl_errors').split():
|
self.name, 'ignore_ssl_errors').split():
|
||||||
text = _('The authenticity of the %s certificate could be invlid') \
|
text = _('The authenticity of the %s certificate could be invalid'
|
||||||
% hostname
|
) % hostname
|
||||||
if errnum in ssl_error:
|
if errnum in ssl_error:
|
||||||
text += _('\nSSL Error: <b>%s</b>') % ssl_error[errnum]
|
text += _('\nSSL Error: <b>%s</b>') % ssl_error[errnum]
|
||||||
else:
|
else:
|
||||||
text += _('\nUnknown SSL error: %d') % errnum
|
text += _('\nUnknown SSL error: %d') % errnum
|
||||||
fingerprint = cert.digest('sha1')
|
fingerprint = cert.digest('sha1').decode('utf-8')
|
||||||
pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM,
|
pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM,
|
||||||
cert)
|
cert).decode('utf-8')
|
||||||
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
||||||
error_text=text, error_num=errnum, cert=pem,
|
error_text=text, error_num=errnum, cert=pem,
|
||||||
fingerprint=fingerprint, certificate=cert))
|
fingerprint=fingerprint, certificate=cert))
|
||||||
return True
|
return True
|
||||||
if cert:
|
if cert:
|
||||||
fingerprint = cert.digest('sha1')
|
fingerprint = cert.digest('sha1').decode('utf-8')
|
||||||
saved_fingerprint = gajim.config.get_per('accounts', self.name,
|
saved_fingerprint = gajim.config.get_per('accounts', self.name,
|
||||||
'ssl_fingerprint_sha1')
|
'ssl_fingerprint_sha1')
|
||||||
if saved_fingerprint:
|
if saved_fingerprint:
|
||||||
# Check sha1 fingerprint
|
# Check sha1 fingerprint
|
||||||
if fingerprint != saved_fingerprint:
|
if fingerprint != saved_fingerprint:
|
||||||
gajim.nec.push_incoming_event(FingerprintErrorEvent(None,
|
gajim.nec.push_incoming_event(FingerprintErrorEvent(None,
|
||||||
conn=self, certificate=con.Connection.ssl_certificate,
|
conn=self, certificate=cert,
|
||||||
new_fingerprint=fingerprint))
|
new_fingerprint=fingerprint))
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
gajim.config.set_per('accounts', self.name,
|
gajim.config.set_per('accounts', self.name,
|
||||||
'ssl_fingerprint_sha1', fingerprint)
|
'ssl_fingerprint_sha1', fingerprint)
|
||||||
if not check_X509.check_certificate(con.Connection.ssl_certificate,
|
if not check_X509.check_certificate(cert, hostname) and \
|
||||||
hostname) and '100' not in gajim.config.get_per('accounts',
|
'100' not in gajim.config.get_per('accounts', self.name,
|
||||||
self.name, 'ignore_ssl_errors').split():
|
'ignore_ssl_errors').split():
|
||||||
fingerprint = cert.digest('sha1')
|
|
||||||
pem = OpenSSL.crypto.dump_certificate(
|
pem = OpenSSL.crypto.dump_certificate(
|
||||||
OpenSSL.crypto.FILETYPE_PEM, cert)
|
OpenSSL.crypto.FILETYPE_PEM, cert).decode('utf-8')
|
||||||
txt = _('The authenticity of the %s certificate could be '
|
txt = _('The authenticity of the %s certificate could be '
|
||||||
'invalid.\nThe certificate does not cover this domain.') % \
|
'invalid.\nThe certificate does not cover this domain.') %\
|
||||||
hostname
|
hostname
|
||||||
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
||||||
error_text=txt, error_num=100, cert=pem,
|
error_text=txt, error_num=100, cert=pem,
|
||||||
|
@ -1523,7 +1519,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.connection.send(' ')
|
self.connection.send(' ')
|
||||||
|
|
||||||
def _on_xmpp_ping_answer(self, iq_obj):
|
def _on_xmpp_ping_answer(self, iq_obj):
|
||||||
id_ = unicode(iq_obj.getAttr('id'))
|
id_ = iq_obj.getAttr('id')
|
||||||
assert id_ == self.awaiting_xmpp_ping_id
|
assert id_ == self.awaiting_xmpp_ping_id
|
||||||
self.awaiting_xmpp_ping_id = None
|
self.awaiting_xmpp_ping_id = None
|
||||||
|
|
||||||
|
@ -1772,9 +1768,9 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
gajim.nec.push_incoming_event(OurShowEvent(None, conn=self,
|
gajim.nec.push_incoming_event(OurShowEvent(None, conn=self,
|
||||||
show=gajim.SHOW_LIST[self.connected]))
|
show=gajim.SHOW_LIST[self.connected]))
|
||||||
gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
|
gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
|
||||||
level='error', pri_txt=_('Invisibility not supported',
|
level='error', pri_txt=_('Invisibility not supported'),
|
||||||
sec_txt=_('Account %s doesn\'t support invisibility.') % \
|
sec_txt=_('Account %s doesn\'t support invisibility.') % \
|
||||||
self.name)))
|
self.name))
|
||||||
return
|
return
|
||||||
# If we are already connected, and privacy rules are supported, send
|
# If we are already connected, and privacy rules are supported, send
|
||||||
# offline presence first as it's required by XEP-0126
|
# offline presence first as it's required by XEP-0126
|
||||||
|
@ -1800,7 +1796,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self.activate_privacy_rule('invisible')
|
self.activate_privacy_rule('invisible')
|
||||||
self.connected = gajim.SHOW_LIST.index('invisible')
|
self.connected = gajim.SHOW_LIST.index('invisible')
|
||||||
self.status = msg
|
self.status = msg
|
||||||
priority = unicode(gajim.get_priority(self.name, 'invisible'))
|
priority = gajim.get_priority(self.name, 'invisible')
|
||||||
p = nbxmpp.Presence(priority=priority)
|
p = nbxmpp.Presence(priority=priority)
|
||||||
p = self.add_sha(p, True)
|
p = self.add_sha(p, True)
|
||||||
if msg:
|
if msg:
|
||||||
|
@ -1981,7 +1977,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
p.setStatus(msg)
|
p.setStatus(msg)
|
||||||
else:
|
else:
|
||||||
signed = self.get_signed_presence(msg)
|
signed = self.get_signed_presence(msg)
|
||||||
priority = unicode(gajim.get_priority(self.name, sshow))
|
priority = gajim.get_priority(self.name, sshow)
|
||||||
p = nbxmpp.Presence(typ=None, priority=priority, show=sshow, to=jid)
|
p = nbxmpp.Presence(typ=None, priority=priority, show=sshow, to=jid)
|
||||||
p = self.add_sha(p)
|
p = self.add_sha(p)
|
||||||
if msg:
|
if msg:
|
||||||
|
@ -2005,7 +2001,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
|
|
||||||
def _update_status(self, show, msg):
|
def _update_status(self, show, msg):
|
||||||
xmpp_show = helpers.get_xmpp_show(show)
|
xmpp_show = helpers.get_xmpp_show(show)
|
||||||
priority = unicode(gajim.get_priority(self.name, xmpp_show))
|
priority = gajim.get_priority(self.name, xmpp_show)
|
||||||
p = nbxmpp.Presence(typ=None, priority=priority, show=xmpp_show)
|
p = nbxmpp.Presence(typ=None, priority=priority, show=xmpp_show)
|
||||||
p = self.add_sha(p)
|
p = self.add_sha(p)
|
||||||
if msg:
|
if msg:
|
||||||
|
@ -2047,6 +2043,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
return
|
return
|
||||||
if isinstance(jid, list):
|
if isinstance(jid, list):
|
||||||
for j in jid:
|
for j in jid:
|
||||||
|
if session is None:
|
||||||
|
session = self.get_or_create_session(j, '')
|
||||||
self.log_message(j, msg, forward_from, session,
|
self.log_message(j, msg, forward_from, session,
|
||||||
original_message, subject, type_, xhtml)
|
original_message, subject, type_, xhtml)
|
||||||
else:
|
else:
|
||||||
|
@ -2562,7 +2560,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
|
|
||||||
p = nbxmpp.Presence(to='%s/%s' % (room_jid, nick),
|
p = nbxmpp.Presence(to='%s/%s' % (room_jid, nick),
|
||||||
show=show, status=self.status)
|
show=show, status=self.status)
|
||||||
h = hmac.new(self.secret_hmac, room_jid).hexdigest()[:6]
|
h = hmac.new(self.secret_hmac, room_jid.encode('utf-8')).hexdigest()[:6]
|
||||||
id_ = self.connection.getAnID()
|
id_ = self.connection.getAnID()
|
||||||
id_ = 'gajim_muc_' + id_ + '_' + h
|
id_ = 'gajim_muc_' + id_ + '_' + h
|
||||||
p.setID(id_)
|
p.setID(id_)
|
||||||
|
@ -2670,7 +2668,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
xmpp_show = helpers.get_xmpp_show(show)
|
xmpp_show = helpers.get_xmpp_show(show)
|
||||||
p = nbxmpp.Presence(to='%s/%s' % (jid, nick), typ=ptype,
|
p = nbxmpp.Presence(to='%s/%s' % (jid, nick), typ=ptype,
|
||||||
show=xmpp_show, status=status)
|
show=xmpp_show, status=status)
|
||||||
h = hmac.new(self.secret_hmac, jid).hexdigest()[:6]
|
h = hmac.new(self.secret_hmac, jid.encode('utf-8')).hexdigest()[:6]
|
||||||
id_ = self.connection.getAnID()
|
id_ = self.connection.getAnID()
|
||||||
id_ = 'gajim_muc_' + id_ + '_' + h
|
id_ = 'gajim_muc_' + id_ + '_' + h
|
||||||
p.setID(id_)
|
p.setID(id_)
|
||||||
|
@ -2847,6 +2845,19 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
"""
|
"""
|
||||||
Send invitation
|
Send invitation
|
||||||
"""
|
"""
|
||||||
|
contact = gajim.contacts.get_contact_from_full_jid(self.name, to)
|
||||||
|
if contact and contact.supports(nbxmpp.NS_CONFERENCE):
|
||||||
|
# send direct invite
|
||||||
|
message=nbxmpp.Message(to=to)
|
||||||
|
attrs = {'jid': room}
|
||||||
|
if reason:
|
||||||
|
attrs['reason'] = reason
|
||||||
|
if continue_tag:
|
||||||
|
attrs['continue'] = 'true'
|
||||||
|
c = message.addChild(name='x', attrs=attrs,
|
||||||
|
namespace=nbxmpp.NS_CONFERENCE)
|
||||||
|
self.connection.send(message)
|
||||||
|
return
|
||||||
message=nbxmpp.Message(to=room)
|
message=nbxmpp.Message(to=room)
|
||||||
c = message.addChild(name='x', namespace=nbxmpp.NS_MUC_USER)
|
c = message.addChild(name='x', namespace=nbxmpp.NS_MUC_USER)
|
||||||
c = c.addChild(name='invite', attrs={'to': to})
|
c = c.addChild(name='invite', attrs={'to': to})
|
||||||
|
@ -2889,7 +2900,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
return
|
return
|
||||||
if self.awaiting_xmpp_ping_id:
|
if self.awaiting_xmpp_ping_id:
|
||||||
# We haven't got the pong in time, disco and reconnect
|
# We haven't got the pong in time, disco and reconnect
|
||||||
log.warn("No reply received for keepalive ping. Reconnecting.")
|
log.warning("No reply received for keepalive ping. Reconnecting.")
|
||||||
self._disconnectedReconnCB()
|
self._disconnectedReconnCB()
|
||||||
|
|
||||||
def _reconnect_alarm(self):
|
def _reconnect_alarm(self):
|
||||||
|
|
|
@ -33,17 +33,16 @@ import base64
|
||||||
import sys
|
import sys
|
||||||
import operator
|
import operator
|
||||||
import hashlib
|
import hashlib
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
import locale
|
|
||||||
|
|
||||||
from time import (altzone, daylight, gmtime, localtime, mktime, strftime,
|
from time import (altzone, daylight, gmtime, localtime, mktime, strftime,
|
||||||
time as time_time, timezone, tzname)
|
time as time_time, timezone, tzname)
|
||||||
from calendar import timegm
|
from calendar import timegm
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import common.caps_cache as capscache
|
from common import caps_cache as capscache
|
||||||
|
|
||||||
from pep import LOCATION_DATA
|
from common.pep import LOCATION_DATA
|
||||||
from common import helpers
|
from common import helpers
|
||||||
from common import gajim
|
from common import gajim
|
||||||
from common import exceptions
|
from common import exceptions
|
||||||
|
@ -188,8 +187,8 @@ class ConnectionDisco:
|
||||||
if not self.connection or self.connected < 2:
|
if not self.connection or self.connected < 2:
|
||||||
return
|
return
|
||||||
frm = helpers.get_full_jid_from_iq(iq_obj)
|
frm = helpers.get_full_jid_from_iq(iq_obj)
|
||||||
to = unicode(iq_obj.getAttr('to'))
|
to = iq_obj.getAttr('to')
|
||||||
id_ = unicode(iq_obj.getAttr('id'))
|
id_ = iq_obj.getAttr('id')
|
||||||
iq = nbxmpp.Iq(to=frm, typ='result', queryNS=nbxmpp.NS_DISCO, frm=to)
|
iq = nbxmpp.Iq(to=frm, typ='result', queryNS=nbxmpp.NS_DISCO, frm=to)
|
||||||
iq.setAttr('id', id_)
|
iq.setAttr('id', id_)
|
||||||
query = iq.setTag('query')
|
query = iq.setTag('query')
|
||||||
|
@ -242,7 +241,7 @@ class ConnectionDisco:
|
||||||
if self.commandInfoQuery(con, iq_obj):
|
if self.commandInfoQuery(con, iq_obj):
|
||||||
raise nbxmpp.NodeProcessed
|
raise nbxmpp.NodeProcessed
|
||||||
|
|
||||||
id_ = unicode(iq_obj.getAttr('id'))
|
id_ = iq_obj.getAttr('id')
|
||||||
if id_[:6] == 'Gajim_':
|
if id_[:6] == 'Gajim_':
|
||||||
# We get this request from echo.server
|
# We get this request from echo.server
|
||||||
raise nbxmpp.NodeProcessed
|
raise nbxmpp.NodeProcessed
|
||||||
|
@ -329,7 +328,7 @@ class ConnectionVcard:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
# create folder if needed
|
# create folder if needed
|
||||||
if not os.path.isdir(path):
|
if not os.path.isdir(path):
|
||||||
os.mkdir(path, 0700)
|
os.mkdir(path, 0o700)
|
||||||
puny_nick = helpers.sanitize_filename(nick)
|
puny_nick = helpers.sanitize_filename(nick)
|
||||||
path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
|
path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
|
||||||
else:
|
else:
|
||||||
|
@ -338,7 +337,7 @@ class ConnectionVcard:
|
||||||
fil = open(path_to_file, 'w')
|
fil = open(path_to_file, 'w')
|
||||||
fil.write(str(card))
|
fil.write(str(card))
|
||||||
fil.close()
|
fil.close()
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
|
gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
|
||||||
level='error', pri_txt=_('Disk Write Error'), sec_txt=str(e)))
|
level='error', pri_txt=_('Disk Write Error'), sec_txt=str(e)))
|
||||||
|
|
||||||
|
@ -438,7 +437,7 @@ class ConnectionVcard:
|
||||||
if 'PHOTO' in vcard and isinstance(vcard['PHOTO'], dict) and \
|
if 'PHOTO' in vcard and isinstance(vcard['PHOTO'], dict) and \
|
||||||
'BINVAL' in vcard['PHOTO']:
|
'BINVAL' in vcard['PHOTO']:
|
||||||
photo = vcard['PHOTO']['BINVAL']
|
photo = vcard['PHOTO']['BINVAL']
|
||||||
photo_decoded = base64.decodestring(photo)
|
photo_decoded = base64.b64decode(photo.encode('utf-8'))
|
||||||
gajim.interface.save_avatar_files(our_jid, photo_decoded)
|
gajim.interface.save_avatar_files(our_jid, photo_decoded)
|
||||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||||
iq2.getTag('PHOTO').setTagData('SHA', avatar_sha)
|
iq2.getTag('PHOTO').setTagData('SHA', avatar_sha)
|
||||||
|
@ -565,7 +564,7 @@ class ConnectionVcard:
|
||||||
self.discover_ft_proxies()
|
self.discover_ft_proxies()
|
||||||
gajim.nec.push_incoming_event(RosterReceivedEvent(None,
|
gajim.nec.push_incoming_event(RosterReceivedEvent(None,
|
||||||
conn=self))
|
conn=self))
|
||||||
gobject.timeout_add_seconds(10, self.discover_servers)
|
GLib.timeout_add_seconds(10, self.discover_servers)
|
||||||
elif self.awaiting_answers[id_][0] == PRIVACY_ARRIVED:
|
elif self.awaiting_answers[id_][0] == PRIVACY_ARRIVED:
|
||||||
if iq_obj.getType() != 'error':
|
if iq_obj.getType() != 'error':
|
||||||
self.privacy_rules_supported = True
|
self.privacy_rules_supported = True
|
||||||
|
@ -619,7 +618,7 @@ class ConnectionVcard:
|
||||||
|
|
||||||
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTIONS_ARRIVED:
|
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTIONS_ARRIVED:
|
||||||
# TODO
|
# TODO
|
||||||
print 'ARCHIVING_COLLECTIONS_ARRIVED'
|
print('ARCHIVING_COLLECTIONS_ARRIVED')
|
||||||
|
|
||||||
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTION_ARRIVED:
|
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTION_ARRIVED:
|
||||||
def save_if_not_exists(with_, nick, direction, tim, payload):
|
def save_if_not_exists(with_, nick, direction, tim, payload):
|
||||||
|
@ -629,7 +628,7 @@ class ConnectionVcard:
|
||||||
gajim.logger.save_if_not_exists(with_, direction, tim,
|
gajim.logger.save_if_not_exists(with_, direction, tim,
|
||||||
msg=payload[0].getData(), nick=nick)
|
msg=payload[0].getData(), nick=nick)
|
||||||
elif payload[0].getName() == 'message':
|
elif payload[0].getName() == 'message':
|
||||||
print 'Not implemented'
|
print('Not implemented')
|
||||||
chat = iq_obj.getTag('chat')
|
chat = iq_obj.getTag('chat')
|
||||||
if chat:
|
if chat:
|
||||||
with_ = chat.getAttr('with')
|
with_ = chat.getAttr('with')
|
||||||
|
@ -710,7 +709,7 @@ class ConnectionVcard:
|
||||||
'BINVAL' in vcard['PHOTO']:
|
'BINVAL' in vcard['PHOTO']:
|
||||||
photo = vcard['PHOTO']['BINVAL']
|
photo = vcard['PHOTO']['BINVAL']
|
||||||
try:
|
try:
|
||||||
photo_decoded = base64.decodestring(photo)
|
photo_decoded = base64.b64decode(photo.encode('utf-8'))
|
||||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||||
except Exception:
|
except Exception:
|
||||||
avatar_sha = ''
|
avatar_sha = ''
|
||||||
|
@ -732,7 +731,7 @@ class ConnectionVcard:
|
||||||
puny_nick = helpers.sanitize_filename(resource)
|
puny_nick = helpers.sanitize_filename(resource)
|
||||||
# create folder if needed
|
# create folder if needed
|
||||||
if not os.path.isdir(begin_path):
|
if not os.path.isdir(begin_path):
|
||||||
os.mkdir(begin_path, 0700)
|
os.mkdir(begin_path, 0o700)
|
||||||
begin_path = os.path.join(begin_path, puny_nick)
|
begin_path = os.path.join(begin_path, puny_nick)
|
||||||
frm_jid += '/' + resource
|
frm_jid += '/' + resource
|
||||||
if photo_decoded:
|
if photo_decoded:
|
||||||
|
@ -1139,7 +1138,7 @@ class ConnectionHandlersBase:
|
||||||
gajim.config.should_log(self.name, obj.jid):
|
gajim.config.should_log(self.name, obj.jid):
|
||||||
try:
|
try:
|
||||||
gajim.logger.write('status', obj.jid, obj.status, obj.show)
|
gajim.logger.write('status', obj.jid, obj.status, obj.show)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
||||||
except exceptions.DatabaseMalformed:
|
except exceptions.DatabaseMalformed:
|
||||||
pritext = _('Database Error')
|
pritext = _('Database Error')
|
||||||
|
@ -1162,8 +1161,7 @@ class ConnectionHandlersBase:
|
||||||
decmsg = self.gpg.decrypt(encmsg, keyID)
|
decmsg = self.gpg.decrypt(encmsg, keyID)
|
||||||
decmsg = self.connection.Dispatcher.replace_non_character(decmsg)
|
decmsg = self.connection.Dispatcher.replace_non_character(decmsg)
|
||||||
# \x00 chars are not allowed in C (so in GTK)
|
# \x00 chars are not allowed in C (so in GTK)
|
||||||
obj.msgtxt = decmsg.replace('\x00', '').encode(
|
obj.msgtxt = decmsg.replace('\x00', '')
|
||||||
locale.getpreferredencoding()).decode('utf-8')
|
|
||||||
obj.encrypted = 'xep27'
|
obj.encrypted = 'xep27'
|
||||||
self.gpg_messages_to_decrypt.remove([encmsg, keyID, obj])
|
self.gpg_messages_to_decrypt.remove([encmsg, keyID, obj])
|
||||||
|
|
||||||
|
@ -1211,7 +1209,7 @@ class ConnectionHandlersBase:
|
||||||
gc_contact = gajim.contacts.get_gc_contact(self.name, obj.jid, nick)
|
gc_contact = gajim.contacts.get_gc_contact(self.name, obj.jid, nick)
|
||||||
if obj.receipt_request_tag and gajim.config.get_per('accounts',
|
if obj.receipt_request_tag and gajim.config.get_per('accounts',
|
||||||
self.name, 'answer_receipts') and ((contact and contact.sub \
|
self.name, 'answer_receipts') and ((contact and contact.sub \
|
||||||
not in (u'to', u'none')) or gc_contact) and obj.mtype != 'error' and \
|
not in ('to', 'none')) or gc_contact) and obj.mtype != 'error' and \
|
||||||
not obj.forwarded:
|
not obj.forwarded:
|
||||||
receipt = nbxmpp.Message(to=obj.fjid, typ='chat')
|
receipt = nbxmpp.Message(to=obj.fjid, typ='chat')
|
||||||
receipt.setID(obj.id_)
|
receipt.setID(obj.id_)
|
||||||
|
@ -1264,7 +1262,7 @@ class ConnectionHandlersBase:
|
||||||
try:
|
try:
|
||||||
gajim.logger.write('error', frm, error_msg, tim=tim,
|
gajim.logger.write('error', frm, error_msg, tim=tim,
|
||||||
subject=subject)
|
subject=subject)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
||||||
except exceptions.DatabaseMalformed:
|
except exceptions.DatabaseMalformed:
|
||||||
pritext = _('Database Error')
|
pritext = _('Database Error')
|
||||||
|
@ -1290,7 +1288,7 @@ class ConnectionHandlersBase:
|
||||||
jid = gajim.get_jid_without_resource(jid)
|
jid = gajim.get_jid_without_resource(jid)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return self.sessions[jid].values()
|
return list(self.sessions[jid].values())
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -1352,7 +1350,7 @@ class ConnectionHandlersBase:
|
||||||
received a thread_id yet and returns the session that we last sent a
|
received a thread_id yet and returns the session that we last sent a
|
||||||
message to
|
message to
|
||||||
"""
|
"""
|
||||||
sessions = self.sessions[jid].values()
|
sessions = list(self.sessions[jid].values())
|
||||||
|
|
||||||
# sessions that we haven't received a thread ID in
|
# sessions that we haven't received a thread ID in
|
||||||
idless = [s for s in sessions if not s.received_thread_id]
|
idless = [s for s in sessions if not s.received_thread_id]
|
||||||
|
@ -1384,7 +1382,7 @@ class ConnectionHandlersBase:
|
||||||
Find an active session that doesn't have a control attached
|
Find an active session that doesn't have a control attached
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
sessions = self.sessions[jid].values()
|
sessions = list(self.sessions[jid].values())
|
||||||
|
|
||||||
# filter out everything except the default session type
|
# filter out everything except the default session type
|
||||||
chat_sessions = [s for s in sessions if isinstance(s,
|
chat_sessions = [s for s in sessions if isinstance(s,
|
||||||
|
@ -1767,9 +1765,8 @@ ConnectionJingle, ConnectionIBBytestream):
|
||||||
iq_obj = obj.stanza.buildReply('result')
|
iq_obj = obj.stanza.buildReply('result')
|
||||||
qp = iq_obj.setQuery()
|
qp = iq_obj.setQuery()
|
||||||
qp.setTagData('utc', strftime('%Y%m%dT%H:%M:%S', gmtime()))
|
qp.setTagData('utc', strftime('%Y%m%dT%H:%M:%S', gmtime()))
|
||||||
qp.setTagData('tz', helpers.decode_string(tzname[daylight]))
|
qp.setTagData('tz', tzname[daylight])
|
||||||
qp.setTagData('display', helpers.decode_string(strftime('%c',
|
qp.setTagData('display', strftime('%c', localtime()))
|
||||||
localtime())))
|
|
||||||
else:
|
else:
|
||||||
iq_obj = obj.stanza.buildReply('error')
|
iq_obj = obj.stanza.buildReply('error')
|
||||||
err = nbxmpp.ErrorNode(name=nbxmpp.NS_STANZAS + \
|
err = nbxmpp.ErrorNode(name=nbxmpp.NS_STANZAS + \
|
||||||
|
|
|
@ -40,7 +40,8 @@ from nbxmpp.protocol import NS_CHATSTATES
|
||||||
from common.jingle_transport import JingleTransportSocks5
|
from common.jingle_transport import JingleTransportSocks5
|
||||||
from common.file_props import FilesProp
|
from common.file_props import FilesProp
|
||||||
|
|
||||||
import gtkgui_helpers
|
if gajim.HAVE_PYOPENSSL:
|
||||||
|
import OpenSSL.crypto
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger('gajim.c.connection_handlers_events')
|
log = logging.getLogger('gajim.c.connection_handlers_events')
|
||||||
|
@ -221,11 +222,11 @@ class TimeResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
t = datetime.datetime.strptime(utc_time, '%Y-%m-%dT%H:%M:%SZ')
|
t = datetime.datetime.strptime(utc_time, '%Y-%m-%dT%H:%M:%SZ')
|
||||||
except ValueError, e:
|
except ValueError:
|
||||||
try:
|
try:
|
||||||
t = datetime.datetime.strptime(utc_time,
|
t = datetime.datetime.strptime(utc_time,
|
||||||
'%Y-%m-%dT%H:%M:%S.%fZ')
|
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
except ValueError, e:
|
except ValueError as e:
|
||||||
log.info('Wrong time format: %s' % str(e))
|
log.info('Wrong time format: %s' % str(e))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -309,7 +310,7 @@ class RosterItemExchangeEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
try:
|
try:
|
||||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||||
continue
|
continue
|
||||||
name = item.getAttr('name')
|
name = item.getAttr('name')
|
||||||
contact = gajim.contacts.get_contact(self.conn.name, jid)
|
contact = gajim.contacts.get_contact(self.conn.name, jid)
|
||||||
|
@ -367,10 +368,10 @@ class RosterReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
try:
|
try:
|
||||||
j = helpers.parse_jid(jid)
|
j = helpers.parse_jid(jid)
|
||||||
except Exception:
|
except Exception:
|
||||||
print >> sys.stderr, _('JID %s is not RFC compliant. It '
|
print(_('JID %s is not RFC compliant. It will not be added '
|
||||||
'will not be added to your roster. Use roster '
|
'to your roster. Use roster management tools such as '
|
||||||
'management tools such as '
|
'http://jru.jabberstudio.org/ to remove it') % jid,
|
||||||
'http://jru.jabberstudio.org/ to remove it') % jid
|
file=sys.stderr)
|
||||||
else:
|
else:
|
||||||
infos = raw_roster[jid]
|
infos = raw_roster[jid]
|
||||||
if jid != our_jid and (not infos['subscription'] or \
|
if jid != our_jid and (not infos['subscription'] or \
|
||||||
|
@ -402,7 +403,7 @@ class RosterSetReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
try:
|
try:
|
||||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||||
continue
|
continue
|
||||||
name = item.getAttr('name')
|
name = item.getAttr('name')
|
||||||
sub = item.getAttr('subscription')
|
sub = item.getAttr('subscription')
|
||||||
|
@ -450,7 +451,7 @@ class MucAdminReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
try:
|
try:
|
||||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % \
|
log.warning('Invalid JID: %s, ignoring it' % \
|
||||||
item.getAttr('jid'))
|
item.getAttr('jid'))
|
||||||
continue
|
continue
|
||||||
affiliation = item.getAttr('affiliation')
|
affiliation = item.getAttr('affiliation')
|
||||||
|
@ -492,7 +493,7 @@ class BookmarksHelper:
|
||||||
try:
|
try:
|
||||||
jid = helpers.parse_jid(conf.getAttr('jid'))
|
jid = helpers.parse_jid(conf.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
|
log.warning('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
|
||||||
continue
|
continue
|
||||||
bm = {'name': conf.getAttr('name'),
|
bm = {'name': conf.getAttr('name'),
|
||||||
'jid': jid,
|
'jid': jid,
|
||||||
|
@ -544,7 +545,7 @@ class PrivateStorageRosternotesReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
try:
|
try:
|
||||||
jid = helpers.parse_jid(note.getAttr('jid'))
|
jid = helpers.parse_jid(note.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
|
log.warning('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
|
||||||
continue
|
continue
|
||||||
annotation = note.getData()
|
annotation = note.getData()
|
||||||
self.annotations[jid] = annotation
|
self.annotations[jid] = annotation
|
||||||
|
@ -758,7 +759,7 @@ PresenceHelperEvent):
|
||||||
try:
|
try:
|
||||||
self.get_jid_resource()
|
self.get_jid_resource()
|
||||||
except Exception:
|
except Exception:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
|
log.warning('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
|
||||||
return
|
return
|
||||||
jid_list = gajim.contacts.get_jid_list(self.conn.name)
|
jid_list = gajim.contacts.get_jid_list(self.conn.name)
|
||||||
self.timestamp = None
|
self.timestamp = None
|
||||||
|
@ -798,7 +799,8 @@ PresenceHelperEvent):
|
||||||
and self.ptype == 'error':
|
and self.ptype == 'error':
|
||||||
# Error presences may not include sent stanza, so we don't detect
|
# Error presences may not include sent stanza, so we don't detect
|
||||||
# it's a muc presence. So detect it by ID
|
# it's a muc presence. So detect it by ID
|
||||||
h = hmac.new(self.conn.secret_hmac, self.jid).hexdigest()[:6]
|
h = hmac.new(self.conn.secret_hmac, self.jid.encode('utf-8')).\
|
||||||
|
hexdigest()[:6]
|
||||||
if self.id_.split('_')[-1] == h:
|
if self.id_.split('_')[-1] == h:
|
||||||
self.is_gc = True
|
self.is_gc = True
|
||||||
self.status = self.stanza.getStatus() or ''
|
self.status = self.stanza.getStatus() or ''
|
||||||
|
@ -906,7 +908,7 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
try:
|
try:
|
||||||
gajim.logger.write('gcstatus', self.fjid, st,
|
gajim.logger.write('gcstatus', self.fjid, st,
|
||||||
self.show)
|
self.show)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
self.conn.dispatch('DB_ERROR', (_('Disk Write Error'),
|
self.conn.dispatch('DB_ERROR', (_('Disk Write Error'),
|
||||||
str(e)))
|
str(e)))
|
||||||
except exceptions.DatabaseMalformed:
|
except exceptions.DatabaseMalformed:
|
||||||
|
@ -1038,7 +1040,7 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
try:
|
try:
|
||||||
self.fjid = helpers.parse_jid(address.getAttr('jid'))
|
self.fjid = helpers.parse_jid(address.getAttr('jid'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % address.getAttr(
|
log.warning('Invalid JID: %s, ignoring it' % address.getAttr(
|
||||||
'jid'))
|
'jid'))
|
||||||
return
|
return
|
||||||
self.jid = gajim.get_jid_without_resource(self.fjid)
|
self.jid = gajim.get_jid_without_resource(self.fjid)
|
||||||
|
@ -1078,10 +1080,15 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
self.invite_tag = None
|
self.invite_tag = None
|
||||||
self.decline_tag = None
|
self.decline_tag = None
|
||||||
if not self.enc_tag:
|
if not self.enc_tag:
|
||||||
|
# Direct invitation?
|
||||||
self.invite_tag = self.stanza.getTag('x',
|
self.invite_tag = self.stanza.getTag('x',
|
||||||
namespace=nbxmpp.NS_MUC_USER)
|
namespace=nbxmpp.NS_CONFERENCE)
|
||||||
if self.invite_tag and not self.invite_tag.getTag('invite'):
|
# Mediated invitation?
|
||||||
self.invite_tag = None
|
if not self.invite_tag:
|
||||||
|
self.invite_tag = self.stanza.getTag('x',
|
||||||
|
namespace=nbxmpp.NS_MUC_USER)
|
||||||
|
if self.invite_tag and not self.invite_tag.getTag('invite'):
|
||||||
|
self.invite_tag = None
|
||||||
|
|
||||||
self.decline_tag = self.stanza.getTag('x',
|
self.decline_tag = self.stanza.getTag('x',
|
||||||
namespace=nbxmpp.NS_MUC_USER)
|
namespace=nbxmpp.NS_MUC_USER)
|
||||||
|
@ -1182,7 +1189,6 @@ class ZeroconfMessageReceivedEvent(MessageReceivedEvent):
|
||||||
self.fjid = key
|
self.fjid = key
|
||||||
break
|
break
|
||||||
|
|
||||||
self.fjid = unicode(self.fjid)
|
|
||||||
self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
|
self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
@ -1195,25 +1201,47 @@ class GcInvitationReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
base_network_events = []
|
base_network_events = []
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
self.room_jid = self.msg_obj.fjid
|
invite_tag = self.msg_obj.invite_tag
|
||||||
|
if invite_tag.getNamespace() == nbxmpp.NS_CONFERENCE:
|
||||||
|
# direct invitation
|
||||||
|
try:
|
||||||
|
self.room_jid = helpers.parse_jid(invite_tag.getAttr('jid'))
|
||||||
|
except helpers.InvalidFormat:
|
||||||
|
log.warning('Invalid JID: %s, ignoring it' % invite_tag.getAttr(
|
||||||
|
'jid'))
|
||||||
|
return
|
||||||
|
self.jid_from = self.msg_obj.fjid
|
||||||
|
self.reason = invite_tag.getAttr('reason')
|
||||||
|
self.password = invite_tag.getAttr('password')
|
||||||
|
self.is_continued = False
|
||||||
|
if invite_tag.getAttr('continue') == 'true':
|
||||||
|
self.is_continued = True
|
||||||
|
else:
|
||||||
|
self.room_jid = self.msg_obj.fjid
|
||||||
|
item = self.msg_obj.invite_tag.getTag('invite')
|
||||||
|
try:
|
||||||
|
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
||||||
|
except helpers.InvalidFormat:
|
||||||
|
log.warning('Invalid JID: %s, ignoring it' % item.getAttr(
|
||||||
|
'from'))
|
||||||
|
return
|
||||||
|
|
||||||
item = self.msg_obj.invite_tag.getTag('invite')
|
self.reason = item.getTagData('reason')
|
||||||
try:
|
self.password = invite_tag.getTagData('password')
|
||||||
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
|
||||||
except helpers.InvalidFormat:
|
self.is_continued = False
|
||||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
if item.getTag('continue'):
|
||||||
|
self.is_continued = True
|
||||||
|
|
||||||
|
if self.room_jid in gajim.gc_connected[self.conn.name] and \
|
||||||
|
gajim.gc_connected[self.conn.name][self.room_jid]:
|
||||||
|
# We are already in groupchat. Ignore invitation
|
||||||
return
|
return
|
||||||
jid = gajim.get_jid_without_resource(self.jid_from)
|
jid = gajim.get_jid_without_resource(self.jid_from)
|
||||||
if gajim.config.get_per('accounts', self.conn.name,
|
if gajim.config.get_per('accounts', self.conn.name,
|
||||||
'ignore_unknown_contacts') and not gajim.contacts.get_contacts(
|
'ignore_unknown_contacts') and not gajim.contacts.get_contacts(
|
||||||
self.conn.name, jid):
|
self.conn.name, jid):
|
||||||
return
|
return
|
||||||
self.reason = item.getTagData('reason')
|
|
||||||
self.password = self.msg_obj.invite_tag.getTagData('password')
|
|
||||||
|
|
||||||
self.is_continued = False
|
|
||||||
if item.getTag('continue'):
|
|
||||||
self.is_continued = True
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -1228,7 +1256,7 @@ class GcDeclineReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
try:
|
try:
|
||||||
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
||||||
return
|
return
|
||||||
jid = gajim.get_jid_without_resource(self.jid_from)
|
jid = gajim.get_jid_without_resource(self.jid_from)
|
||||||
if gajim.config.get_per('accounts', self.conn.name,
|
if gajim.config.get_per('accounts', self.conn.name,
|
||||||
|
@ -1607,12 +1635,12 @@ class NewAccountConnectedEvent(nec.NetworkIncomingEvent):
|
||||||
self.ssl_msg = ssl_error.get(er, _('Unknown SSL error: %d') % \
|
self.ssl_msg = ssl_error.get(er, _('Unknown SSL error: %d') % \
|
||||||
self.errnum)
|
self.errnum)
|
||||||
self.ssl_cert = ''
|
self.ssl_cert = ''
|
||||||
if len(self.conn.connection.Connection.ssl_cert_pem):
|
|
||||||
self.ssl_cert = self.conn.connection.Connection.ssl_cert_pem
|
|
||||||
self.ssl_fingerprint = ''
|
self.ssl_fingerprint = ''
|
||||||
if self.conn.connection.Connection.ssl_certificate:
|
if self.conn.connection.Connection.ssl_certificate:
|
||||||
self.ssl_fingerprint = \
|
cert = self.conn.connection.Connection.ssl_certificate
|
||||||
self.conn.connection.Connection.ssl_certificate.digest('sha1')
|
self.ssl_cert = OpenSSL.crypto.dump_certificate(
|
||||||
|
OpenSSL.crypto.FILETYPE_PEM, cert).decode('utf-8')
|
||||||
|
self.ssl_fingerprint = cert.digest('sha1').decode('utf-8')
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class NewAccountNotConnectedEvent(nec.NetworkIncomingEvent):
|
class NewAccountNotConnectedEvent(nec.NetworkIncomingEvent):
|
||||||
|
@ -1852,6 +1880,8 @@ class MetacontactsReceivedEvent(nec.NetworkIncomingEvent):
|
||||||
# Metacontact tags
|
# Metacontact tags
|
||||||
# http://www.xmpp.org/extensions/xep-0209.html
|
# http://www.xmpp.org/extensions/xep-0209.html
|
||||||
self.meta_list = {}
|
self.meta_list = {}
|
||||||
|
# FIXME: disable metacontacts until they work correctly
|
||||||
|
return True
|
||||||
query = self.stanza.getTag('query')
|
query = self.stanza.getTag('query')
|
||||||
storage = query.getTag('storage')
|
storage = query.getTag('storage')
|
||||||
metas = storage.getTags('meta')
|
metas = storage.getTags('meta')
|
||||||
|
@ -1965,7 +1995,7 @@ class AgentInfoReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
if self.id_ in self.conn.disco_info_ids:
|
if self.id_ in self.conn.disco_info_ids:
|
||||||
self.conn.disco_info_ids.remove(self.id_)
|
self.conn.disco_info_ids.remove(self.id_)
|
||||||
if self.id_ is None:
|
if self.id_ is None:
|
||||||
log.warn('Invalid IQ received without an ID. Ignoring it: %s' % \
|
log.warning('Invalid IQ received without an ID. Ignoring it: %s' % \
|
||||||
self.stanza)
|
self.stanza)
|
||||||
return
|
return
|
||||||
# According to XEP-0030:
|
# According to XEP-0030:
|
||||||
|
@ -2025,15 +2055,18 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
self.fjid = self.conn._ft_get_from(self.stanza)
|
self.fjid = self.conn._ft_get_from(self.stanza)
|
||||||
self.jid = gajim.get_jid_without_resource(self.fjid)
|
self.jid = gajim.get_jid_without_resource(self.fjid)
|
||||||
if self.jingle_content:
|
if self.jingle_content:
|
||||||
self.FT_content.use_security = bool(self.jingle_content.getTag(
|
secu = self.jingle_content.getTag('security')
|
||||||
'security'))
|
self.FT_content.use_security = bool(secu)
|
||||||
|
fingerprint = secu.getTag('fingerprint')
|
||||||
|
if fingerprint:
|
||||||
|
self.FT_content.x509_fingerprint = fingerprint.getData()
|
||||||
if not self.FT_content.transport:
|
if not self.FT_content.transport:
|
||||||
self.FT_content.transport = JingleTransportSocks5()
|
self.FT_content.transport = JingleTransportSocks5()
|
||||||
self.FT_content.transport.set_our_jid(
|
self.FT_content.transport.set_our_jid(
|
||||||
self.FT_content.session.ourjid)
|
self.FT_content.session.ourjid)
|
||||||
self.FT_content.transport.set_connection(
|
self.FT_content.transport.set_connection(
|
||||||
self.FT_content.session.connection)
|
self.FT_content.session.connection)
|
||||||
sid = unicode(self.stanza.getTag('jingle').getAttr('sid'))
|
sid = self.stanza.getTag('jingle').getAttr('sid')
|
||||||
self.file_props = FilesProp.getNewFileProp(self.conn.name, sid)
|
self.file_props = FilesProp.getNewFileProp(self.conn.name, sid)
|
||||||
self.file_props.transport_sid = self.FT_content.transport.sid
|
self.file_props.transport_sid = self.FT_content.transport.sid
|
||||||
self.FT_content.file_props = self.file_props
|
self.FT_content.file_props = self.file_props
|
||||||
|
@ -2071,7 +2104,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
if name == 'name':
|
if name == 'name':
|
||||||
self.file_props.name = val
|
self.file_props.name = val
|
||||||
if name == 'size':
|
if name == 'size':
|
||||||
self.file_props.size = val
|
self.file_props.size = int(val)
|
||||||
if name == 'hash':
|
if name == 'hash':
|
||||||
self.file_props.algo = child.getAttr('algo')
|
self.file_props.algo = child.getAttr('algo')
|
||||||
self.file_props.hash_ = val
|
self.file_props.hash_ = val
|
||||||
|
@ -2080,8 +2113,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
else:
|
else:
|
||||||
si = self.stanza.getTag('si')
|
si = self.stanza.getTag('si')
|
||||||
self.file_props = FilesProp.getNewFileProp(self.conn.name,
|
self.file_props = FilesProp.getNewFileProp(self.conn.name,
|
||||||
unicode(si.getAttr('id'))
|
si.getAttr('id'))
|
||||||
)
|
|
||||||
profile = si.getAttr('profile')
|
profile = si.getAttr('profile')
|
||||||
if profile != nbxmpp.NS_FILE:
|
if profile != nbxmpp.NS_FILE:
|
||||||
self.conn.send_file_rejection(self.file_props, code='400',
|
self.conn.send_file_rejection(self.file_props, code='400',
|
||||||
|
@ -2112,7 +2144,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
if name == 'name':
|
if name == 'name':
|
||||||
self.file_props.name = val
|
self.file_props.name = val
|
||||||
if name == 'size':
|
if name == 'size':
|
||||||
self.file_props.size = val
|
self.file_props.size = int(val)
|
||||||
mime_type = si.getAttr('mime-type')
|
mime_type = si.getAttr('mime-type')
|
||||||
if mime_type is not None:
|
if mime_type is not None:
|
||||||
self.file_props.mime_type = mime_type
|
self.file_props.mime_type = mime_type
|
||||||
|
@ -2230,8 +2262,6 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
||||||
self.popup_title = _('New Message from %(nickname)s') % \
|
self.popup_title = _('New Message from %(nickname)s') % \
|
||||||
{'nickname': nick}
|
{'nickname': nick}
|
||||||
|
|
||||||
self.popup_image = gtkgui_helpers.get_icon_path(self.popup_image, 48)
|
|
||||||
|
|
||||||
if not gajim.config.get('notify_on_new_message') or \
|
if not gajim.config.get('notify_on_new_message') or \
|
||||||
not self.first_unread:
|
not self.first_unread:
|
||||||
self.do_popup = False
|
self.do_popup = False
|
||||||
|
@ -2286,6 +2316,28 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
||||||
|
|
||||||
self.do_popup = False
|
self.do_popup = False
|
||||||
|
|
||||||
|
def get_path_to_generic_or_avatar(self, generic, jid=None, suffix=None):
|
||||||
|
"""
|
||||||
|
Choose between avatar image and default image
|
||||||
|
|
||||||
|
Returns full path to the avatar image if it exists, otherwise returns full
|
||||||
|
path to the image. generic must be with extension and suffix without
|
||||||
|
"""
|
||||||
|
if jid:
|
||||||
|
# we want an avatar
|
||||||
|
puny_jid = helpers.sanitize_filename(jid)
|
||||||
|
path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
|
||||||
|
path_to_local_file = path_to_file + '_local'
|
||||||
|
for extension in ('.png', '.jpeg'):
|
||||||
|
path_to_local_file_full = path_to_local_file + extension
|
||||||
|
if os.path.exists(path_to_local_file_full):
|
||||||
|
return path_to_local_file_full
|
||||||
|
for extension in ('.png', '.jpeg'):
|
||||||
|
path_to_file_full = path_to_file + extension
|
||||||
|
if os.path.exists(path_to_file_full):
|
||||||
|
return path_to_file_full
|
||||||
|
return os.path.abspath(generic)
|
||||||
|
|
||||||
def handle_incoming_pres_event(self, pres_obj):
|
def handle_incoming_pres_event(self, pres_obj):
|
||||||
if gajim.jid_is_transport(pres_obj.jid):
|
if gajim.jid_is_transport(pres_obj.jid):
|
||||||
return True
|
return True
|
||||||
|
@ -2364,8 +2416,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
||||||
iconset = gajim.config.get('iconset')
|
iconset = gajim.config.get('iconset')
|
||||||
img_path = os.path.join(helpers.get_iconset_path(iconset),
|
img_path = os.path.join(helpers.get_iconset_path(iconset),
|
||||||
'48x48', show_image)
|
'48x48', show_image)
|
||||||
self.popup_image = gtkgui_helpers.get_path_to_generic_or_avatar(
|
self.popup_image_path = self.get_path_to_generic_or_avatar(img_path,
|
||||||
img_path, jid=self.jid, suffix=suffix)
|
jid=self.jid, suffix=suffix)
|
||||||
|
|
||||||
self.popup_timeout = gajim.config.get('notification_timeout')
|
self.popup_timeout = gajim.config.get('notification_timeout')
|
||||||
|
|
||||||
|
@ -2411,6 +2463,7 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
||||||
self.popup_event_type = ''
|
self.popup_event_type = ''
|
||||||
self.popup_msg_type = ''
|
self.popup_msg_type = ''
|
||||||
self.popup_image = ''
|
self.popup_image = ''
|
||||||
|
self.popup_image_path = ''
|
||||||
self.popup_timeout = -1
|
self.popup_timeout = -1
|
||||||
|
|
||||||
self.do_command = False
|
self.do_command = False
|
||||||
|
@ -2447,7 +2500,7 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent):
|
||||||
self.session = None
|
self.session = None
|
||||||
self.forward_from = None
|
self.forward_from = None
|
||||||
self.form_node = None
|
self.form_node = None
|
||||||
self.original_message = ''
|
self.original_message = None
|
||||||
self.delayed = None
|
self.delayed = None
|
||||||
self.callback = None
|
self.callback = None
|
||||||
self.callback_args = []
|
self.callback_args = []
|
||||||
|
|
|
@ -28,13 +28,15 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
|
from functools import cmp_to_key
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from common import caps_cache
|
from common import caps_cache
|
||||||
from common.account import Account
|
from common.account import Account
|
||||||
import common.gajim
|
import common.gajim
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
if __name__ != "__main__":
|
if __name__ != "__main__":
|
||||||
raise ImportError(e)
|
raise ImportError(str(e))
|
||||||
|
|
||||||
class XMPPEntity(object):
|
class XMPPEntity(object):
|
||||||
"""
|
"""
|
||||||
|
@ -94,6 +96,8 @@ class Contact(CommonContact):
|
||||||
sub='', ask='', resource='', priority=0, keyID='', client_caps=None,
|
sub='', ask='', resource='', priority=0, keyID='', client_caps=None,
|
||||||
our_chatstate=None, chatstate=None, last_status_time=None, msg_id=None,
|
our_chatstate=None, chatstate=None, last_status_time=None, msg_id=None,
|
||||||
last_activity_time=None):
|
last_activity_time=None):
|
||||||
|
if not isinstance(jid, str):
|
||||||
|
print('no str')
|
||||||
|
|
||||||
CommonContact.__init__(self, jid, account, resource, show, status, name,
|
CommonContact.__init__(self, jid, account, resource, show, status, name,
|
||||||
our_chatstate, chatstate, client_caps=client_caps)
|
our_chatstate, chatstate, client_caps=client_caps)
|
||||||
|
@ -484,17 +488,18 @@ class Contacts():
|
||||||
for c in self._contacts[jid]:
|
for c in self._contacts[jid]:
|
||||||
if c.resource == resource:
|
if c.resource == resource:
|
||||||
return c
|
return c
|
||||||
|
return self._contacts[jid][0]
|
||||||
|
|
||||||
def iter_contacts(self):
|
def iter_contacts(self):
|
||||||
for jid in self._contacts.keys():
|
for jid in list(self._contacts.keys()):
|
||||||
for contact in self._contacts[jid][:]:
|
for contact in self._contacts[jid][:]:
|
||||||
yield contact
|
yield contact
|
||||||
|
|
||||||
def get_jid_list(self):
|
def get_jid_list(self):
|
||||||
return self._contacts.keys()
|
return list(self._contacts.keys())
|
||||||
|
|
||||||
def get_contacts_jid_list(self):
|
def get_contacts_jid_list(self):
|
||||||
return [jid for jid, contact in self._contacts.iteritems() if not
|
return [jid for jid, contact in self._contacts.items() if not
|
||||||
contact[0].is_groupchat()]
|
contact[0].is_groupchat()]
|
||||||
|
|
||||||
def get_contact_from_full_jid(self, fjid):
|
def get_contact_from_full_jid(self, fjid):
|
||||||
|
@ -562,7 +567,7 @@ class GC_Contacts():
|
||||||
gc_list = self.get_gc_list()
|
gc_list = self.get_gc_list()
|
||||||
if not room_jid in gc_list:
|
if not room_jid in gc_list:
|
||||||
return []
|
return []
|
||||||
return self._rooms[room_jid].keys()
|
return list(self._rooms[room_jid].keys())
|
||||||
|
|
||||||
def get_gc_contact(self, room_jid, nick):
|
def get_gc_contact(self, room_jid, nick):
|
||||||
nick_list = self.get_nick_list(room_jid)
|
nick_list = self.get_nick_list(room_jid)
|
||||||
|
@ -846,7 +851,7 @@ class MetacontactManager():
|
||||||
Which of the family will be the big brother under wich all others will be
|
Which of the family will be the big brother under wich all others will be
|
||||||
?
|
?
|
||||||
"""
|
"""
|
||||||
family.sort(cmp=self._compare_metacontacts)
|
family.sort(key=cmp_to_key(self._compare_metacontacts))
|
||||||
return family[-1]
|
return family[-1]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
|
import sys
|
||||||
import os
|
import os
|
||||||
import math
|
import math
|
||||||
|
|
||||||
|
@ -75,8 +76,54 @@ def base28(n):
|
||||||
else:
|
else:
|
||||||
return base28_chr[n]
|
return base28_chr[n]
|
||||||
|
|
||||||
|
def add_entropy_sources_OpenSSL():
|
||||||
|
# Other possibly variable data. This are very low quality sources of
|
||||||
|
# entropy, but some of them are installation dependent and can be hard
|
||||||
|
# to guess for the attacker.
|
||||||
|
# Data available on all platforms Unix, Windows
|
||||||
|
sources = [sys.argv, sys.builtin_module_names,
|
||||||
|
sys.copyright, sys.getfilesystemencoding(), sys.hexversion,
|
||||||
|
sys.modules, sys.path, sys.version, sys.api_version,
|
||||||
|
os.environ, os.getcwd(), os.getpid()]
|
||||||
|
|
||||||
|
for s in sources:
|
||||||
|
OpenSSL.rand.add(str(s).encode('utf-8'), 1)
|
||||||
|
|
||||||
|
# On Windows add the current contents of the screen to the PRNG state.
|
||||||
|
if os.name == 'nt':
|
||||||
|
OpenSSL.rand.screen()
|
||||||
|
# The /proc filesystem on POSIX systems contains many random variables:
|
||||||
|
# memory statistics, interrupt counts, network packet counts
|
||||||
|
if os.name == 'posix':
|
||||||
|
dirs = ['/proc', '/proc/net', '/proc/self']
|
||||||
|
for d in dirs:
|
||||||
|
if os.access(d, os.R_OK):
|
||||||
|
for filename in os.listdir(d):
|
||||||
|
OpenSSL.rand.add(filename.encode('utf-8'), 0)
|
||||||
|
try:
|
||||||
|
with open(d + os.sep + filename, "r") as fp:
|
||||||
|
# Limit the ammount of read bytes, in case a memory
|
||||||
|
# file was opened
|
||||||
|
OpenSSL.rand.add(str(fp.read(5000)).encode('utf-8'),
|
||||||
|
1)
|
||||||
|
except:
|
||||||
|
# Ignore all read and access errors
|
||||||
|
pass
|
||||||
|
|
||||||
|
PYOPENSSL_PRNG_PRESENT = False
|
||||||
|
try:
|
||||||
|
import OpenSSL.rand
|
||||||
|
PYOPENSSL_PRNG_PRESENT = True
|
||||||
|
except ImportError:
|
||||||
|
# PyOpenSSL PRNG not available
|
||||||
|
pass
|
||||||
|
|
||||||
def random_bytes(bytes_):
|
def random_bytes(bytes_):
|
||||||
return os.urandom(bytes_)
|
if PYOPENSSL_PRNG_PRESENT:
|
||||||
|
OpenSSL.rand.add(os.urandom(bytes_), bytes_)
|
||||||
|
return OpenSSL.rand.bytes(bytes_)
|
||||||
|
else:
|
||||||
|
return os.urandom(bytes_)
|
||||||
|
|
||||||
def generate_nonce():
|
def generate_nonce():
|
||||||
return random_bytes(8)
|
return random_bytes(8)
|
||||||
|
|
|
@ -27,7 +27,7 @@ information how to use them, read documentation
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import helpers
|
from common import helpers
|
||||||
|
|
||||||
# exceptions used in this module
|
# exceptions used in this module
|
||||||
# base class
|
# base class
|
||||||
|
@ -195,7 +195,7 @@ class DataField(ExtendedNode):
|
||||||
Human-readable description of field meaning
|
Human-readable description of field meaning
|
||||||
"""
|
"""
|
||||||
def fget(self):
|
def fget(self):
|
||||||
return self.getTagData('desc') or u''
|
return self.getTagData('desc') or ''
|
||||||
|
|
||||||
def fset(self, value):
|
def fset(self, value):
|
||||||
assert isinstance(value, basestring)
|
assert isinstance(value, basestring)
|
||||||
|
@ -345,10 +345,10 @@ class StringField(DataField):
|
||||||
@nested_property
|
@nested_property
|
||||||
def value():
|
def value():
|
||||||
"""
|
"""
|
||||||
Value of field. May be any unicode string
|
Value of field. May be any string
|
||||||
"""
|
"""
|
||||||
def fget(self):
|
def fget(self):
|
||||||
return self.getTagData('value') or u''
|
return self.getTagData('value') or ''
|
||||||
|
|
||||||
def fset(self, value):
|
def fset(self, value):
|
||||||
assert isinstance(value, basestring)
|
assert isinstance(value, basestring)
|
||||||
|
@ -494,7 +494,7 @@ class TextMultiField(DataField):
|
||||||
Value held in field
|
Value held in field
|
||||||
"""
|
"""
|
||||||
def fget(self):
|
def fget(self):
|
||||||
value = u''
|
value = ''
|
||||||
for element in self.iterTags('value'):
|
for element in self.iterTags('value'):
|
||||||
value += '\n' + element.getData()
|
value += '\n' + element.getData()
|
||||||
return value[1:]
|
return value[1:]
|
||||||
|
@ -643,7 +643,7 @@ class DataForm(ExtendedNode):
|
||||||
"""
|
"""
|
||||||
# TODO: the same code is in TextMultiField. join them
|
# TODO: the same code is in TextMultiField. join them
|
||||||
def fget(self):
|
def fget(self):
|
||||||
value = u''
|
value = ''
|
||||||
for valuenode in self.getTags('instructions'):
|
for valuenode in self.getTags('instructions'):
|
||||||
value += '\n' + valuenode.getData()
|
value += '\n' + valuenode.getData()
|
||||||
return value[1:]
|
return value[1:]
|
||||||
|
|
|
@ -38,8 +38,8 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
supported = False
|
supported = False
|
||||||
if not os.name == 'nt': # only say that to non Windows users
|
if not os.name == 'nt': # only say that to non Windows users
|
||||||
print _('D-Bus python bindings are missing in this computer')
|
print(_('D-Bus python bindings are missing in this computer'))
|
||||||
print _('D-Bus capabilities of Gajim cannot be used')
|
print(_('D-Bus capabilities of Gajim cannot be used'))
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
# test if dbus-x11 is installed
|
# test if dbus-x11 is installed
|
||||||
|
@ -49,14 +49,14 @@ else:
|
||||||
except dbus.DBusException:
|
except dbus.DBusException:
|
||||||
supported = False
|
supported = False
|
||||||
if not os.name == 'nt': # only say that to non Windows users
|
if not os.name == 'nt': # only say that to non Windows users
|
||||||
print _('D-Bus does not run correctly on this machine')
|
print(_('D-Bus does not run correctly on this machine'))
|
||||||
print _('D-Bus capabilities of Gajim cannot be used')
|
print(_('D-Bus capabilities of Gajim cannot be used'))
|
||||||
except exceptions.SystemBusNotPresent:
|
except exceptions.SystemBusNotPresent:
|
||||||
print _('D-Bus does not run correctly on this machine: system bus not '
|
print(_('D-Bus does not run correctly on this machine: system bus not '
|
||||||
'present')
|
'present'))
|
||||||
except exceptions.SessionBusNotPresent:
|
except exceptions.SessionBusNotPresent:
|
||||||
print _('D-Bus does not run correctly on this machine: session bus not '
|
print(_('D-Bus does not run correctly on this machine: session bus not '
|
||||||
'present')
|
'present'))
|
||||||
|
|
||||||
class SystemBus:
|
class SystemBus:
|
||||||
"""
|
"""
|
||||||
|
@ -154,7 +154,7 @@ def get_interface(interface, path, start_service=True):
|
||||||
return None
|
return None
|
||||||
obj = bus.get_object(interface, path)
|
obj = bus.get_object(interface, path)
|
||||||
return dbus.Interface(obj, interface)
|
return dbus.Interface(obj, interface)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
gajim.log.debug(str(e))
|
gajim.log.debug(str(e))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -27,13 +27,13 @@ docdir = '../'
|
||||||
basedir = '../'
|
basedir = '../'
|
||||||
localedir = '../po'
|
localedir = '../po'
|
||||||
|
|
||||||
version = '0.16'
|
version = '0.16.10.0'
|
||||||
import subprocess
|
import subprocess
|
||||||
try:
|
try:
|
||||||
node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
|
node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
|
||||||
stdout=subprocess.PIPE).communicate()[0]
|
stdout=subprocess.PIPE).communicate()[0]
|
||||||
if node:
|
if node:
|
||||||
version += '-' + node
|
version += '-' + node.decode('utf-8')
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -143,3 +143,15 @@ class PluginsystemError(Exception):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.text
|
return self.text
|
||||||
|
|
||||||
|
class GnomeKeyringError(Exception):
|
||||||
|
"""
|
||||||
|
Error with Gnome Keyring
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, error):
|
||||||
|
Exception.__init__(self)
|
||||||
|
self.error = error
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.error)
|
||||||
|
|
|
@ -64,7 +64,7 @@ class FilesProp:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def getAllFileProp(cls):
|
def getAllFileProp(cls):
|
||||||
return cls._files_props.values()
|
return list(cls._files_props.values())
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setFileProp(cls, fp, account, sid):
|
def setFileProp(cls, fp, account, sid):
|
||||||
|
|
|
@ -31,10 +31,10 @@ import sys
|
||||||
import logging
|
import logging
|
||||||
import locale
|
import locale
|
||||||
|
|
||||||
import config
|
from common import config
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import defs
|
from common import defs
|
||||||
import common.ged
|
from common import ged as ged_module
|
||||||
|
|
||||||
interface = None # The actual interface (the gtk one for the moment)
|
interface = None # The actual interface (the gtk one for the moment)
|
||||||
thread_interface = None # Interface to run a thread and then a callback
|
thread_interface = None # Interface to run a thread and then a callback
|
||||||
|
@ -43,16 +43,15 @@ version = config.get('version')
|
||||||
connections = {} # 'account name': 'account (connection.Connection) instance'
|
connections = {} # 'account name': 'account (connection.Connection) instance'
|
||||||
ipython_window = None
|
ipython_window = None
|
||||||
|
|
||||||
ged = common.ged.GlobalEventsDispatcher() # Global Events Dispatcher
|
ged = ged_module.GlobalEventsDispatcher() # Global Events Dispatcher
|
||||||
nec = None # Network Events Controller
|
nec = None # Network Events Controller
|
||||||
plugin_manager = None # Plugins Manager
|
plugin_manager = None # Plugins Manager
|
||||||
|
|
||||||
log = logging.getLogger('gajim')
|
log = logging.getLogger('gajim')
|
||||||
|
|
||||||
import logger
|
logger = None
|
||||||
logger = logger.Logger() # init the logger
|
|
||||||
|
|
||||||
import configpaths
|
from common import configpaths
|
||||||
gajimpaths = configpaths.gajimpaths
|
gajimpaths = configpaths.gajimpaths
|
||||||
|
|
||||||
VCARD_PATH = gajimpaths['VCARD']
|
VCARD_PATH = gajimpaths['VCARD']
|
||||||
|
@ -84,8 +83,8 @@ else:
|
||||||
|
|
||||||
os_info = None # used to cache os information
|
os_info = None # used to cache os information
|
||||||
|
|
||||||
from contacts import LegacyContactsAPI
|
from common.contacts import LegacyContactsAPI
|
||||||
from events import Events
|
from common.events import Events
|
||||||
|
|
||||||
gmail_domains = ['gmail.com', 'googlemail.com']
|
gmail_domains = ['gmail.com', 'googlemail.com']
|
||||||
|
|
||||||
|
@ -159,7 +158,7 @@ except ImportError:
|
||||||
|
|
||||||
HAVE_GPG = True
|
HAVE_GPG = True
|
||||||
try:
|
try:
|
||||||
__import__('gnupg', globals(), locals(), [], -1)
|
__import__('gnupg', globals(), locals(), [], 0)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAVE_GPG = False
|
HAVE_GPG = False
|
||||||
else:
|
else:
|
||||||
|
@ -185,6 +184,7 @@ except Exception:
|
||||||
|
|
||||||
HAVE_FARSTREAM = True
|
HAVE_FARSTREAM = True
|
||||||
try:
|
try:
|
||||||
|
raise ImportError
|
||||||
farstream = __import__('farstream')
|
farstream = __import__('farstream')
|
||||||
import gst
|
import gst
|
||||||
import glib
|
import glib
|
||||||
|
@ -201,8 +201,8 @@ except ImportError:
|
||||||
|
|
||||||
HAVE_UPNP_IGD = True
|
HAVE_UPNP_IGD = True
|
||||||
try:
|
try:
|
||||||
import gupnp.igd
|
from gi.repository import GUPnPIgd
|
||||||
gupnp_igd = gupnp.igd.Simple()
|
gupnp_igd = GUPnPIgd.SimpleIgd()
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAVE_UPNP_IGD = False
|
HAVE_UPNP_IGD = False
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ gajim_common_features = [nbxmpp.NS_BYTESTREAM, nbxmpp.NS_SI, nbxmpp.NS_FILE,
|
||||||
nbxmpp.NS_SSN, nbxmpp.NS_MOOD, nbxmpp.NS_ACTIVITY, nbxmpp.NS_NICK,
|
nbxmpp.NS_SSN, nbxmpp.NS_MOOD, nbxmpp.NS_ACTIVITY, nbxmpp.NS_NICK,
|
||||||
nbxmpp.NS_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES,
|
nbxmpp.NS_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES,
|
||||||
nbxmpp.NS_HASHES_MD5, nbxmpp.NS_HASHES_SHA1, nbxmpp.NS_HASHES_SHA256,
|
nbxmpp.NS_HASHES_MD5, nbxmpp.NS_HASHES_SHA1, nbxmpp.NS_HASHES_SHA256,
|
||||||
nbxmpp.NS_HASHES_SHA512, nbxmpp.NS_CORRECT]
|
nbxmpp.NS_HASHES_SHA512]
|
||||||
|
|
||||||
# Optional features gajim supports per account
|
# Optional features gajim supports per account
|
||||||
gajim_optional_features = {}
|
gajim_optional_features = {}
|
||||||
|
@ -231,9 +231,6 @@ gajim_optional_features = {}
|
||||||
# Capabilities hash per account
|
# Capabilities hash per account
|
||||||
caps_hash = {}
|
caps_hash = {}
|
||||||
|
|
||||||
import caps_cache
|
|
||||||
caps_cache.initialize(logger)
|
|
||||||
|
|
||||||
global_id = 0
|
global_id = 0
|
||||||
def get_an_id():
|
def get_an_id():
|
||||||
global global_id
|
global global_id
|
||||||
|
@ -290,13 +287,8 @@ def get_jid_without_resource(jid):
|
||||||
return jid.split('/')[0]
|
return jid.split('/')[0]
|
||||||
|
|
||||||
def construct_fjid(room_jid, nick):
|
def construct_fjid(room_jid, nick):
|
||||||
"""
|
|
||||||
Nick is in UTF-8 (taken from treeview); room_jid is in unicode
|
|
||||||
"""
|
|
||||||
# fake jid is the jid for a contact in a room
|
# fake jid is the jid for a contact in a room
|
||||||
# gaim@conference.jabber.org/nick
|
# gaim@conference.jabber.org/nick
|
||||||
if isinstance(nick, str):
|
|
||||||
nick = unicode(nick, 'utf-8')
|
|
||||||
return room_jid + '/' + nick
|
return room_jid + '/' + nick
|
||||||
|
|
||||||
def get_resource_from_jid(jid):
|
def get_resource_from_jid(jid):
|
||||||
|
|
|
@ -79,8 +79,8 @@ class GlobalEventsDispatcher(object):
|
||||||
if event_name in self.handlers:
|
if event_name in self.handlers:
|
||||||
try:
|
try:
|
||||||
self.handlers[event_name].remove((priority, handler))
|
self.handlers[event_name].remove((priority, handler))
|
||||||
except ValueError, error:
|
except ValueError:
|
||||||
log.warn('''Function (%s) with priority "%s" never registered
|
log.warning('''Function (%s) with priority "%s" never registered
|
||||||
as handler of event "%s". Couldn\'t remove. Error: %s'''
|
as handler of event "%s". Couldn\'t remove. Error: %s'''
|
||||||
%(handler, priority, event_name, error))
|
%(handler, priority, event_name, error))
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class GlobalEventsDispatcher(object):
|
||||||
return True
|
return True
|
||||||
except NodeProcessed:
|
except NodeProcessed:
|
||||||
node_processed = True
|
node_processed = True
|
||||||
except Exception, e:
|
except Exception:
|
||||||
log.error('Error while running an even handler: %s' % \
|
log.error('Error while running an even handler: %s' % \
|
||||||
handler)
|
handler)
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
|
@ -175,7 +175,7 @@ class Verify(object):
|
||||||
"PLAINTEXT_LENGTH", "POLICY_URL", "DECRYPTION_INFO",
|
"PLAINTEXT_LENGTH", "POLICY_URL", "DECRYPTION_INFO",
|
||||||
"DECRYPTION_OKAY", "INV_SGNR", "FILE_START", "FILE_ERROR",
|
"DECRYPTION_OKAY", "INV_SGNR", "FILE_START", "FILE_ERROR",
|
||||||
"FILE_DONE", "PKA_TRUST_GOOD", "PKA_TRUST_BAD", "BADMDC",
|
"FILE_DONE", "PKA_TRUST_GOOD", "PKA_TRUST_BAD", "BADMDC",
|
||||||
"GOODMDC", "NO_SGNR"):
|
"GOODMDC", "NO_SGNR", "NOTATION_NAME", "NOTATION_DATA"):
|
||||||
pass
|
pass
|
||||||
elif key == "BADSIG":
|
elif key == "BADSIG":
|
||||||
self.valid = False
|
self.valid = False
|
||||||
|
|
|
@ -22,11 +22,11 @@
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
##
|
##
|
||||||
|
|
||||||
from gajim import HAVE_GPG
|
from common.gajim import HAVE_GPG
|
||||||
import os
|
import os
|
||||||
|
|
||||||
if HAVE_GPG:
|
if HAVE_GPG:
|
||||||
import gnupg
|
from common import gnupg
|
||||||
|
|
||||||
class GnuPG(gnupg.GPG):
|
class GnuPG(gnupg.GPG):
|
||||||
def __init__(self, use_agent=False):
|
def __init__(self, use_agent=False):
|
||||||
|
@ -34,7 +34,7 @@ if HAVE_GPG:
|
||||||
self.decode_errors = 'replace'
|
self.decode_errors = 'replace'
|
||||||
self.passphrase = None
|
self.passphrase = None
|
||||||
self.use_agent = use_agent
|
self.use_agent = use_agent
|
||||||
self.always_trust = False
|
self.always_trust = [] # list of keyID to always trust
|
||||||
|
|
||||||
def _setup_my_options(self):
|
def _setup_my_options(self):
|
||||||
self.options.armor = 1
|
self.options.armor = 1
|
||||||
|
@ -47,8 +47,14 @@ if HAVE_GPG:
|
||||||
self.options.extra_args.append('--use-agent')
|
self.options.extra_args.append('--use-agent')
|
||||||
|
|
||||||
def encrypt(self, str_, recipients, always_trust=False):
|
def encrypt(self, str_, recipients, always_trust=False):
|
||||||
|
trust = always_trust
|
||||||
|
if not trust:
|
||||||
|
trust = True
|
||||||
|
for key in recipients:
|
||||||
|
if key not in self.always_trust:
|
||||||
|
trust = False
|
||||||
result = super(GnuPG, self).encrypt(str_, recipients,
|
result = super(GnuPG, self).encrypt(str_, recipients,
|
||||||
always_trust=always_trust, passphrase=self.passphrase)
|
always_trust=trust, passphrase=self.passphrase)
|
||||||
|
|
||||||
if result.status == 'invalid recipient':
|
if result.status == 'invalid recipient':
|
||||||
return '', 'NOT_TRUSTED'
|
return '', 'NOT_TRUSTED'
|
||||||
|
@ -80,14 +86,21 @@ if HAVE_GPG:
|
||||||
def verify(self, str_, sign):
|
def verify(self, str_, sign):
|
||||||
if str_ is None:
|
if str_ is None:
|
||||||
return ''
|
return ''
|
||||||
data = '-----BEGIN PGP SIGNED MESSAGE-----' + os.linesep
|
# Hash algorithm is not transfered in the signed presence stanza so try
|
||||||
data = data + 'Hash: SHA1' + os.linesep + os.linesep
|
# all algorithms. Text name for hash algorithms from RFC 4880 - section 9.4
|
||||||
data = data + str_ + os.linesep
|
hash_algorithms = ['SHA512', 'SHA384', 'SHA256', 'SHA224', 'SHA1', 'RIPEMD160']
|
||||||
data = data + self._addHeaderFooter(sign, 'SIGNATURE')
|
for algo in hash_algorithms:
|
||||||
result = super(GnuPG, self).verify(data)
|
data = os.linesep.join(
|
||||||
|
['-----BEGIN PGP SIGNED MESSAGE-----',
|
||||||
|
'Hash: ' + algo,
|
||||||
|
'',
|
||||||
|
str_,
|
||||||
|
self._addHeaderFooter(sign, 'SIGNATURE')]
|
||||||
|
)
|
||||||
|
result = super(GnuPG, self).verify(data)
|
||||||
|
if result.valid:
|
||||||
|
return result.key_id
|
||||||
|
|
||||||
if result.valid:
|
|
||||||
return result.key_id
|
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def get_keys(self, secret=False):
|
def get_keys(self, secret=False):
|
||||||
|
|
|
@ -35,22 +35,23 @@ import locale
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import urllib
|
import urllib
|
||||||
import urllib2
|
import urllib
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import errno
|
import errno
|
||||||
import select
|
import select
|
||||||
import base64
|
import base64
|
||||||
import hashlib
|
import hashlib
|
||||||
import shlex
|
import shlex
|
||||||
import caps_cache
|
from common import caps_cache
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from gi.repository import GObject
|
||||||
from encodings.punycode import punycode_encode
|
from encodings.punycode import punycode_encode
|
||||||
from string import Template
|
from string import Template
|
||||||
|
|
||||||
from i18n import Q_
|
from common.i18n import Q_
|
||||||
from i18n import ngettext
|
from common.i18n import ngettext
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import winsound # windows-only built-in module for playing wav
|
import winsound # windows-only built-in module for playing wav
|
||||||
|
@ -121,7 +122,7 @@ def idn_to_ascii(host):
|
||||||
labels = idna.dots.split(host)
|
labels = idna.dots.split(host)
|
||||||
converted_labels = []
|
converted_labels = []
|
||||||
for label in labels:
|
for label in labels:
|
||||||
converted_labels.append(idna.ToASCII(label))
|
converted_labels.append(idna.ToASCII(label).decode('utf-8'))
|
||||||
return ".".join(converted_labels)
|
return ".".join(converted_labels)
|
||||||
|
|
||||||
def ascii_to_idn(host):
|
def ascii_to_idn(host):
|
||||||
|
@ -143,9 +144,9 @@ def parse_resource(resource):
|
||||||
if resource:
|
if resource:
|
||||||
try:
|
try:
|
||||||
from nbxmpp.stringprepare import resourceprep
|
from nbxmpp.stringprepare import resourceprep
|
||||||
return resourceprep.prepare(unicode(resource))
|
return resourceprep.prepare(resource)
|
||||||
except UnicodeError:
|
except UnicodeError:
|
||||||
raise InvalidFormat, 'Invalid character in resource.'
|
raise InvalidFormat('Invalid character in resource.')
|
||||||
|
|
||||||
def prep(user, server, resource):
|
def prep(user, server, resource):
|
||||||
"""
|
"""
|
||||||
|
@ -155,34 +156,34 @@ def prep(user, server, resource):
|
||||||
#http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
|
#http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
|
||||||
if user is not None:
|
if user is not None:
|
||||||
if len(user) < 1 or len(user) > 1023:
|
if len(user) < 1 or len(user) > 1023:
|
||||||
raise InvalidFormat, _('Username must be between 1 and 1023 chars')
|
raise InvalidFormat(_('Username must be between 1 and 1023 chars'))
|
||||||
try:
|
try:
|
||||||
from nbxmpp.stringprepare import nodeprep
|
from nbxmpp.stringprepare import nodeprep
|
||||||
user = nodeprep.prepare(unicode(user))
|
user = nodeprep.prepare(user)
|
||||||
except UnicodeError:
|
except UnicodeError:
|
||||||
raise InvalidFormat, _('Invalid character in username.')
|
raise InvalidFormat(_('Invalid character in username.'))
|
||||||
else:
|
else:
|
||||||
user = None
|
user = None
|
||||||
|
|
||||||
if server is not None:
|
if server is not None:
|
||||||
if len(server) < 1 or len(server) > 1023:
|
if len(server) < 1 or len(server) > 1023:
|
||||||
raise InvalidFormat, _('Server must be between 1 and 1023 chars')
|
raise InvalidFormat(_('Server must be between 1 and 1023 chars'))
|
||||||
try:
|
try:
|
||||||
from nbxmpp.stringprepare import nameprep
|
from nbxmpp.stringprepare import nameprep
|
||||||
server = nameprep.prepare(unicode(server))
|
server = nameprep.prepare(server)
|
||||||
except UnicodeError:
|
except UnicodeError:
|
||||||
raise InvalidFormat, _('Invalid character in hostname.')
|
raise InvalidFormat(_('Invalid character in hostname.'))
|
||||||
else:
|
else:
|
||||||
raise InvalidFormat, _('Server address required.')
|
raise InvalidFormat(_('Server address required.'))
|
||||||
|
|
||||||
if resource is not None:
|
if resource is not None:
|
||||||
if len(resource) < 1 or len(resource) > 1023:
|
if len(resource) < 1 or len(resource) > 1023:
|
||||||
raise InvalidFormat, _('Resource must be between 1 and 1023 chars')
|
raise InvalidFormat(_('Resource must be between 1 and 1023 chars'))
|
||||||
try:
|
try:
|
||||||
from nbxmpp.stringprepare import resourceprep
|
from nbxmpp.stringprepare import resourceprep
|
||||||
resource = resourceprep.prepare(unicode(resource))
|
resource = resourceprep.prepare(resource)
|
||||||
except UnicodeError:
|
except UnicodeError:
|
||||||
raise InvalidFormat, _('Invalid character in resource.')
|
raise InvalidFormat(_('Invalid character in resource.'))
|
||||||
else:
|
else:
|
||||||
resource = None
|
resource = None
|
||||||
|
|
||||||
|
@ -206,7 +207,7 @@ def temp_failure_retry(func, *args, **kwargs):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
except (os.error, IOError, select.error), ex:
|
except (os.error, IOError, select.error) as ex:
|
||||||
if ex.errno == errno.EINTR:
|
if ex.errno == errno.EINTR:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
|
@ -263,7 +264,7 @@ def get_uf_show(show, use_mnemonic = False):
|
||||||
uf_show = Q_('?contact has status:Unknown')
|
uf_show = Q_('?contact has status:Unknown')
|
||||||
else:
|
else:
|
||||||
uf_show = Q_('?contact has status:Has errors')
|
uf_show = Q_('?contact has status:Has errors')
|
||||||
return unicode(uf_show)
|
return uf_show
|
||||||
|
|
||||||
def get_uf_sub(sub):
|
def get_uf_sub(sub):
|
||||||
if sub == 'none':
|
if sub == 'none':
|
||||||
|
@ -277,7 +278,7 @@ def get_uf_sub(sub):
|
||||||
else:
|
else:
|
||||||
uf_sub = sub
|
uf_sub = sub
|
||||||
|
|
||||||
return unicode(uf_sub)
|
return uf_sub
|
||||||
|
|
||||||
def get_uf_ask(ask):
|
def get_uf_ask(ask):
|
||||||
if ask is None:
|
if ask is None:
|
||||||
|
@ -287,7 +288,7 @@ def get_uf_ask(ask):
|
||||||
else:
|
else:
|
||||||
uf_ask = ask
|
uf_ask = ask
|
||||||
|
|
||||||
return unicode(uf_ask)
|
return uf_ask
|
||||||
|
|
||||||
def get_uf_role(role, plural = False):
|
def get_uf_role(role, plural = False):
|
||||||
''' plural determines if you get Moderators or Moderator'''
|
''' plural determines if you get Moderators or Moderator'''
|
||||||
|
@ -397,7 +398,7 @@ def exec_command(command, use_shell=False):
|
||||||
if use_shell:
|
if use_shell:
|
||||||
subprocess.Popen('%s &' % command, shell=True).wait()
|
subprocess.Popen('%s &' % command, shell=True).wait()
|
||||||
else:
|
else:
|
||||||
args = shlex.split(command.encode('utf-8'))
|
args = shlex.split(command)
|
||||||
p = subprocess.Popen(args)
|
p = subprocess.Popen(args)
|
||||||
gajim.thread_interface(p.wait)
|
gajim.thread_interface(p.wait)
|
||||||
|
|
||||||
|
@ -409,7 +410,7 @@ def build_command(executable, parameter):
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def get_file_path_from_dnd_dropped_uri(uri):
|
def get_file_path_from_dnd_dropped_uri(uri):
|
||||||
path = urllib.unquote(uri) # escape special chars
|
path = urllib.parse.unquote(uri) # escape special chars
|
||||||
path = path.strip('\r\n\x00') # remove \r\n and NULL
|
path = path.strip('\r\n\x00') # remove \r\n and NULL
|
||||||
# get the path to file
|
# get the path to file
|
||||||
if re.match('^file:///[a-zA-Z]:/', path): # windows
|
if re.match('^file:///[a-zA-Z]:/', path): # windows
|
||||||
|
@ -447,33 +448,6 @@ def get_output_of_command(command):
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def decode_string(string):
|
|
||||||
"""
|
|
||||||
Try to decode (to make it Unicode instance) given string
|
|
||||||
"""
|
|
||||||
if isinstance(string, unicode):
|
|
||||||
return string
|
|
||||||
# by the time we go to iso15 it better be the one else we show bad characters
|
|
||||||
encodings = (locale.getpreferredencoding(), 'utf-8', 'iso-8859-15')
|
|
||||||
for encoding in encodings:
|
|
||||||
try:
|
|
||||||
string = string.decode(encoding)
|
|
||||||
except UnicodeError:
|
|
||||||
continue
|
|
||||||
break
|
|
||||||
|
|
||||||
return string
|
|
||||||
|
|
||||||
def ensure_utf8_string(string):
|
|
||||||
"""
|
|
||||||
Make sure string is in UTF-8
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
string = decode_string(string).encode('utf-8')
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return string
|
|
||||||
|
|
||||||
def get_windows_reg_env(varname, default=''):
|
def get_windows_reg_env(varname, default=''):
|
||||||
"""
|
"""
|
||||||
Ask for paths commonly used but not exposed as ENVs in english Windows 2003
|
Ask for paths commonly used but not exposed as ENVs in english Windows 2003
|
||||||
|
@ -481,7 +455,7 @@ def get_windows_reg_env(varname, default=''):
|
||||||
'AppData' = %USERPROFILE%\Application Data (also an ENV)
|
'AppData' = %USERPROFILE%\Application Data (also an ENV)
|
||||||
'Desktop' = %USERPROFILE%\Desktop
|
'Desktop' = %USERPROFILE%\Desktop
|
||||||
'Favorites' = %USERPROFILE%\Favorites
|
'Favorites' = %USERPROFILE%\Favorites
|
||||||
'NetHood' = %USERPROFILE%\NetHood
|
'NetHood' = %USERPROFILE%\ NetHood
|
||||||
'Personal' = D:\My Documents (PATH TO MY DOCUMENTS)
|
'Personal' = D:\My Documents (PATH TO MY DOCUMENTS)
|
||||||
'PrintHood' = %USERPROFILE%\PrintHood
|
'PrintHood' = %USERPROFILE%\PrintHood
|
||||||
'Programs' = %USERPROFILE%\Start Menu\Programs
|
'Programs' = %USERPROFILE%\Start Menu\Programs
|
||||||
|
@ -540,10 +514,11 @@ def sanitize_filename(filename):
|
||||||
"""
|
"""
|
||||||
# 48 is the limit
|
# 48 is the limit
|
||||||
if len(filename) > 48:
|
if len(filename) > 48:
|
||||||
hash = hashlib.md5(filename)
|
hash = hashlib.md5(filename.encode('utf-8'))
|
||||||
filename = base64.b64encode(hash.digest())
|
filename = base64.b64encode(hash.digest()).decode('utf-8')
|
||||||
|
|
||||||
filename = punycode_encode(filename) # make it latin chars only
|
# make it latin chars only
|
||||||
|
filename = punycode_encode(filename).decode('utf-8')
|
||||||
filename = filename.replace('/', '_')
|
filename = filename.replace('/', '_')
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
filename = filename.replace('?', '_').replace(':', '_')\
|
filename = filename.replace('?', '_').replace(':', '_')\
|
||||||
|
@ -565,9 +540,6 @@ def reduce_chars_newlines(text, max_chars = 0, max_lines = 0):
|
||||||
string = string[:max_chars - 3] + '...'
|
string = string[:max_chars - 3] + '...'
|
||||||
return string
|
return string
|
||||||
|
|
||||||
if isinstance(text, str):
|
|
||||||
text = text.decode('utf-8')
|
|
||||||
|
|
||||||
if max_lines == 0:
|
if max_lines == 0:
|
||||||
lines = text.split('\n')
|
lines = text.split('\n')
|
||||||
else:
|
else:
|
||||||
|
@ -623,12 +595,10 @@ def datetime_tuple(timestamp):
|
||||||
from time import strptime
|
from time import strptime
|
||||||
return strptime(timestamp, '%Y%m%dT%H:%M:%S')
|
return strptime(timestamp, '%Y%m%dT%H:%M:%S')
|
||||||
|
|
||||||
# import gajim only when needed (after decode_string is defined) see #4764
|
from common import gajim
|
||||||
|
|
||||||
import gajim
|
|
||||||
if gajim.HAVE_PYCURL:
|
if gajim.HAVE_PYCURL:
|
||||||
import pycurl
|
import pycurl
|
||||||
from cStringIO import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
def convert_bytes(string):
|
def convert_bytes(string):
|
||||||
suffix = ''
|
suffix = ''
|
||||||
|
@ -636,13 +606,13 @@ def convert_bytes(string):
|
||||||
# but do we use the standard?
|
# but do we use the standard?
|
||||||
use_kib_mib = gajim.config.get('use_kib_mib')
|
use_kib_mib = gajim.config.get('use_kib_mib')
|
||||||
align = 1024.
|
align = 1024.
|
||||||
bytes = float(string)
|
bytes_ = float(string)
|
||||||
if bytes >= align:
|
if bytes_ >= align:
|
||||||
bytes = round(bytes/align, 1)
|
bytes_ = round(bytes_/align, 1)
|
||||||
if bytes >= align:
|
if bytes_ >= align:
|
||||||
bytes = round(bytes/align, 1)
|
bytes_ = round(bytes_/align, 1)
|
||||||
if bytes >= align:
|
if bytes_ >= align:
|
||||||
bytes = round(bytes/align, 1)
|
bytes_ = round(bytes_/align, 1)
|
||||||
if use_kib_mib:
|
if use_kib_mib:
|
||||||
#GiB means gibibyte
|
#GiB means gibibyte
|
||||||
suffix = _('%s GiB')
|
suffix = _('%s GiB')
|
||||||
|
@ -666,7 +636,7 @@ def convert_bytes(string):
|
||||||
else:
|
else:
|
||||||
#B means bytes
|
#B means bytes
|
||||||
suffix = _('%s B')
|
suffix = _('%s B')
|
||||||
return suffix % unicode(bytes)
|
return suffix % str(bytes_)
|
||||||
|
|
||||||
def get_contact_dict_for_account(account):
|
def get_contact_dict_for_account(account):
|
||||||
"""
|
"""
|
||||||
|
@ -892,13 +862,13 @@ def get_icon_name_to_show(contact, account = None):
|
||||||
|
|
||||||
def get_full_jid_from_iq(iq_obj):
|
def get_full_jid_from_iq(iq_obj):
|
||||||
"""
|
"""
|
||||||
Return the full jid (with resource) from an iq as unicode
|
Return the full jid (with resource) from an iq
|
||||||
"""
|
"""
|
||||||
return parse_jid(str(iq_obj.getFrom()))
|
return parse_jid(str(iq_obj.getFrom()))
|
||||||
|
|
||||||
def get_jid_from_iq(iq_obj):
|
def get_jid_from_iq(iq_obj):
|
||||||
"""
|
"""
|
||||||
Return the jid (without resource) from an iq as unicode
|
Return the jid (without resource) from an iq
|
||||||
"""
|
"""
|
||||||
jid = get_full_jid_from_iq(iq_obj)
|
jid = get_full_jid_from_iq(iq_obj)
|
||||||
return gajim.get_jid_without_resource(jid)
|
return gajim.get_jid_without_resource(jid)
|
||||||
|
@ -907,7 +877,8 @@ def get_auth_sha(sid, initiator, target):
|
||||||
"""
|
"""
|
||||||
Return sha of sid + initiator + target used for proxy auth
|
Return sha of sid + initiator + target used for proxy auth
|
||||||
"""
|
"""
|
||||||
return hashlib.sha1("%s%s%s" % (sid, initiator, target)).hexdigest()
|
return hashlib.sha1(("%s%s%s" % (sid, initiator, target)).encode('utf-8')).\
|
||||||
|
hexdigest()
|
||||||
|
|
||||||
def remove_invalid_xml_chars(string):
|
def remove_invalid_xml_chars(string):
|
||||||
if string:
|
if string:
|
||||||
|
@ -943,7 +914,7 @@ def get_random_string_16():
|
||||||
"""
|
"""
|
||||||
Create random string of length 16
|
Create random string of length 16
|
||||||
"""
|
"""
|
||||||
rng = range(65, 90)
|
rng = list(range(65, 90))
|
||||||
rng.extend(range(48, 57))
|
rng.extend(range(48, 57))
|
||||||
char_sequence = [chr(e) for e in rng]
|
char_sequence = [chr(e) for e in rng]
|
||||||
from random import sample
|
from random import sample
|
||||||
|
@ -984,8 +955,10 @@ def get_os_info():
|
||||||
p.wait()
|
p.wait()
|
||||||
output = temp_failure_retry(p.stdout.readline).strip()
|
output = temp_failure_retry(p.stdout.readline).strip()
|
||||||
# some distros put n/a in places, so remove those
|
# some distros put n/a in places, so remove those
|
||||||
output = output.replace('n/a', '').replace('N/A', '')
|
output = output.decode('utf-8').replace('n/a', '').replace('N/A', '')
|
||||||
gajim.os_info = output
|
gajim.os_info = output
|
||||||
|
p.stdout.close()
|
||||||
|
p.stdin.close()
|
||||||
return output
|
return output
|
||||||
|
|
||||||
# lsb_release executable not available, so parse files
|
# lsb_release executable not available, so parse files
|
||||||
|
@ -1419,7 +1392,7 @@ def get_proxy_info(account):
|
||||||
login = ['', '']
|
login = ['', '']
|
||||||
addr = env_http_proxy[0].split(':')
|
addr = env_http_proxy[0].split(':')
|
||||||
|
|
||||||
proxy = {'host': addr[0], 'type' : u'http', 'user':login[0]}
|
proxy = {'host': addr[0], 'type' : 'http', 'user':login[0]}
|
||||||
|
|
||||||
if len(addr) == 2:
|
if len(addr) == 2:
|
||||||
proxy['port'] = addr[1]
|
proxy['port'] = addr[1]
|
||||||
|
@ -1430,7 +1403,7 @@ def get_proxy_info(account):
|
||||||
proxy['pass'] = login[1]
|
proxy['pass'] = login[1]
|
||||||
proxy['useauth'] = True
|
proxy['useauth'] = True
|
||||||
else:
|
else:
|
||||||
proxy['pass'] = u''
|
proxy['pass'] = ''
|
||||||
return proxy
|
return proxy
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -1449,14 +1422,15 @@ def _get_img_direct(attrs):
|
||||||
"""
|
"""
|
||||||
Download an image. This function should be launched in a separated thread.
|
Download an image. This function should be launched in a separated thread.
|
||||||
"""
|
"""
|
||||||
mem, alt = '', ''
|
mem = b''
|
||||||
|
alt = ''
|
||||||
# Wait maximum 5s for connection
|
# Wait maximum 5s for connection
|
||||||
socket.setdefaulttimeout(5)
|
socket.setdefaulttimeout(5)
|
||||||
try:
|
try:
|
||||||
req = urllib2.Request(attrs['src'])
|
req = urllib.request.Request(attrs['src'])
|
||||||
req.add_header('User-Agent', 'Gajim ' + gajim.version)
|
req.add_header('User-Agent', 'Gajim ' + gajim.version)
|
||||||
f = urllib2.urlopen(req)
|
f = urllib.request.urlopen(req)
|
||||||
except Exception, ex:
|
except Exception as ex:
|
||||||
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
||||||
pixbuf = None
|
pixbuf = None
|
||||||
alt = attrs.get('alt', 'Broken image')
|
alt = attrs.get('alt', 'Broken image')
|
||||||
|
@ -1479,7 +1453,7 @@ def _get_img_direct(attrs):
|
||||||
break
|
break
|
||||||
try:
|
try:
|
||||||
temp = f.read(100)
|
temp = f.read(100)
|
||||||
except socket.timeout, ex:
|
except socket.timeout as ex:
|
||||||
log.debug('Timeout loading image %s ' % attrs['src'] + str(ex))
|
log.debug('Timeout loading image %s ' % attrs['src'] + str(ex))
|
||||||
alt = attrs.get('alt', '')
|
alt = attrs.get('alt', '')
|
||||||
if alt:
|
if alt:
|
||||||
|
@ -1496,6 +1470,7 @@ def _get_img_direct(attrs):
|
||||||
alt += '\n'
|
alt += '\n'
|
||||||
alt += _('Image is too big')
|
alt += _('Image is too big')
|
||||||
break
|
break
|
||||||
|
f.close()
|
||||||
return (mem, alt)
|
return (mem, alt)
|
||||||
|
|
||||||
def _get_img_proxy(attrs, proxy):
|
def _get_img_proxy(attrs, proxy):
|
||||||
|
@ -1531,17 +1506,17 @@ def _get_img_proxy(attrs, proxy):
|
||||||
c.close()
|
c.close()
|
||||||
t = b.getvalue()
|
t = b.getvalue()
|
||||||
return (t, attrs.get('alt', ''))
|
return (t, attrs.get('alt', ''))
|
||||||
except pycurl.error, ex:
|
except pycurl.error as ex:
|
||||||
alt = attrs.get('alt', '')
|
alt = attrs.get('alt', '')
|
||||||
if alt:
|
if alt:
|
||||||
alt += '\n'
|
alt += '\n'
|
||||||
if ex[0] == pycurl.E_FILESIZE_EXCEEDED:
|
if ex.errno == pycurl.E_FILESIZE_EXCEEDED:
|
||||||
alt += _('Image is too big')
|
alt += _('Image is too big')
|
||||||
elif ex[0] == pycurl.E_OPERATION_TIMEOUTED:
|
elif ex.errno == pycurl.E_OPERATION_TIMEOUTED:
|
||||||
alt += _('Timeout loading image')
|
alt += _('Timeout loading image')
|
||||||
else:
|
else:
|
||||||
alt += _('Error loading image')
|
alt += _('Error loading image')
|
||||||
except Exception, ex:
|
except Exception as ex:
|
||||||
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
||||||
pixbuf = None
|
pixbuf = None
|
||||||
alt = attrs.get('alt', 'Broken image')
|
alt = attrs.get('alt', 'Broken image')
|
||||||
|
|
|
@ -24,11 +24,11 @@
|
||||||
import locale
|
import locale
|
||||||
import gettext
|
import gettext
|
||||||
import os
|
import os
|
||||||
import defs
|
from common import defs
|
||||||
import unicodedata
|
import unicodedata
|
||||||
|
|
||||||
# May be changed after GTK is imported
|
# May be changed after GTK is imported
|
||||||
direction_mark = u'\u200E'
|
direction_mark = '\u200E'
|
||||||
|
|
||||||
def paragraph_direction_mark(text):
|
def paragraph_direction_mark(text):
|
||||||
"""
|
"""
|
||||||
|
@ -40,11 +40,11 @@ def paragraph_direction_mark(text):
|
||||||
for char in text:
|
for char in text:
|
||||||
bidi = unicodedata.bidirectional(char)
|
bidi = unicodedata.bidirectional(char)
|
||||||
if bidi == 'L':
|
if bidi == 'L':
|
||||||
return u'\u200E'
|
return '\u200E'
|
||||||
elif bidi == 'AL' or bidi == 'R':
|
elif bidi == 'AL' or bidi == 'R':
|
||||||
return u'\u200F'
|
return '\u200F'
|
||||||
|
|
||||||
return u'\u200E'
|
return '\u200E'
|
||||||
|
|
||||||
APP = 'gajim'
|
APP = 'gajim'
|
||||||
DIR = defs.localedir
|
DIR = defs.localedir
|
||||||
|
@ -64,9 +64,9 @@ if os.name == 'nt':
|
||||||
if lang:
|
if lang:
|
||||||
os.environ['LANG'] = lang
|
os.environ['LANG'] = lang
|
||||||
|
|
||||||
gettext.install(APP, DIR, unicode = True)
|
gettext.install(APP, DIR)
|
||||||
if gettext._translations:
|
if gettext._translations:
|
||||||
_translation = gettext._translations.values()[0]
|
_translation = list(gettext._translations.values())[0]
|
||||||
else:
|
else:
|
||||||
_translation = gettext.NullTranslations()
|
_translation = gettext.NullTranslations()
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ def ngettext(s_sing, s_plural, n, replace_sing = None, replace_plural = None):
|
||||||
|
|
||||||
In other words this is a hack to ngettext() to support %s %d etc..
|
In other words this is a hack to ngettext() to support %s %d etc..
|
||||||
"""
|
"""
|
||||||
text = _translation.ungettext(s_sing, s_plural, n)
|
text = _translation.ngettext(s_sing, s_plural, n)
|
||||||
if n == 1 and replace_sing is not None:
|
if n == 1 and replace_sing is not None:
|
||||||
text = text % replace_sing
|
text = text % replace_sing
|
||||||
elif n > 1 and replace_plural is not None:
|
elif n > 1 and replace_plural is not None:
|
||||||
|
|
|
@ -68,7 +68,7 @@ try:
|
||||||
|
|
||||||
rootwindow = libX11.XDefaultRootWindow(dpy_p)
|
rootwindow = libX11.XDefaultRootWindow(dpy_p)
|
||||||
xss_available = True
|
xss_available = True
|
||||||
except OSError, e:
|
except OSError:
|
||||||
# Logging?
|
# Logging?
|
||||||
xss_available = False
|
xss_available = False
|
||||||
|
|
||||||
|
@ -94,6 +94,6 @@ def close():
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import time
|
import time
|
||||||
time.sleep(2.1)
|
time.sleep(2.1)
|
||||||
print getIdleSec()
|
print(getIdleSec())
|
||||||
close()
|
close()
|
||||||
print getIdleSec()
|
print(getIdleSec())
|
||||||
|
|
|
@ -29,14 +29,14 @@ Handles the jingle signalling protocol
|
||||||
# - codecs
|
# - codecs
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import helpers
|
from common import helpers
|
||||||
import gajim
|
from common import gajim
|
||||||
|
|
||||||
from jingle_session import JingleSession, JingleStates
|
from common.jingle_session import JingleSession, JingleStates
|
||||||
if gajim.HAVE_FARSTREAM:
|
if gajim.HAVE_FARSTREAM:
|
||||||
from jingle_rtp import JingleAudio, JingleVideo
|
from common.jingle_rtp import JingleAudio, JingleVideo
|
||||||
from jingle_ft import JingleFileTransfer
|
from common.jingle_ft import JingleFileTransfer
|
||||||
from jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
from common.jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger('gajim.c.jingle')
|
logger = logging.getLogger('gajim.c.jingle')
|
||||||
|
@ -80,7 +80,7 @@ class ConnectionJingle(object):
|
||||||
try:
|
try:
|
||||||
jid = helpers.get_full_jid_from_iq(stanza)
|
jid = helpers.get_full_jid_from_iq(stanza)
|
||||||
except helpers.InvalidFormat:
|
except helpers.InvalidFormat:
|
||||||
log.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
|
logger.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
|
||||||
return
|
return
|
||||||
id_ = stanza.getID()
|
id_ = stanza.getID()
|
||||||
if (jid, id_) in self.__iq_responses.keys():
|
if (jid, id_) in self.__iq_responses.keys():
|
||||||
|
@ -170,14 +170,14 @@ class ConnectionJingle(object):
|
||||||
|
|
||||||
def __hash_support(self, contact):
|
def __hash_support(self, contact):
|
||||||
if contact.supports(nbxmpp.NS_HASHES):
|
if contact.supports(nbxmpp.NS_HASHES):
|
||||||
if contact.supports(nbxmpp.NS_HASHES_MD5):
|
if contact.supports(nbxmpp.NS_HASHES_SHA512):
|
||||||
return 'md5'
|
return 'sha-512'
|
||||||
elif contact.supports(nbxmpp.NS_HASHES_SHA1):
|
|
||||||
return 'sha-1'
|
|
||||||
elif contact.supports(nbxmpp.NS_HASHES_SHA256):
|
elif contact.supports(nbxmpp.NS_HASHES_SHA256):
|
||||||
return 'sha-256'
|
return 'sha-256'
|
||||||
elif contact.supports(nbxmpp.NS_HASHES_SHA512):
|
elif contact.supports(nbxmpp.NS_HASHES_SHA1):
|
||||||
return 'sha-512'
|
return 'sha-1'
|
||||||
|
elif contact.supports(nbxmpp.NS_HASHES_MD5):
|
||||||
|
return 'md5'
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def iter_jingle_sessions(self, jid, sid=None, media=None):
|
def iter_jingle_sessions(self, jid, sid=None, media=None):
|
||||||
|
@ -224,4 +224,3 @@ class ConnectionJingle(object):
|
||||||
if session.peerjid == jid and session.get_content(media):
|
if session.peerjid == jid and session.get_content(media):
|
||||||
return session
|
return session
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,12 @@
|
||||||
Handles Jingle contents (XEP 0166)
|
Handles Jingle contents (XEP 0166)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import gajim
|
import os
|
||||||
|
from common import gajim
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from jingle_transport import JingleTransportIBB
|
from common.jingle_transport import JingleTransportIBB
|
||||||
|
from .jingle_xtls import SELF_SIGNED_CERTIFICATE
|
||||||
|
from .jingle_xtls import load_cert_file
|
||||||
|
|
||||||
contents = {}
|
contents = {}
|
||||||
|
|
||||||
|
@ -193,7 +196,7 @@ class JingleContent(object):
|
||||||
else:
|
else:
|
||||||
# if the file is less than 10 mb, then it is small
|
# if the file is less than 10 mb, then it is small
|
||||||
# lets calculate it right away
|
# lets calculate it right away
|
||||||
if int(self.file_props.size) < 10000000 and not \
|
if self.file_props.size < 10000000 and not \
|
||||||
self.file_props.hash_:
|
self.file_props.hash_:
|
||||||
h = self._calcHash()
|
h = self._calcHash()
|
||||||
file_tag.addChild(node=h)
|
file_tag.addChild(node=h)
|
||||||
|
@ -213,12 +216,18 @@ class JingleContent(object):
|
||||||
if self.use_security:
|
if self.use_security:
|
||||||
security = nbxmpp.simplexml.Node(
|
security = nbxmpp.simplexml.Node(
|
||||||
tag=nbxmpp.NS_JINGLE_XTLS + ' security')
|
tag=nbxmpp.NS_JINGLE_XTLS + ' security')
|
||||||
# TODO: add fingerprint element
|
certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)\
|
||||||
for m in ('x509', ): # supported authentication methods
|
+ '.cert'
|
||||||
method = nbxmpp.simplexml.Node(tag='method')
|
cert = load_cert_file(certpath)
|
||||||
method.setAttr('name', m)
|
if cert:
|
||||||
security.addChild(node=method)
|
digest_algo = cert.get_signature_algorithm().split('With')[0]
|
||||||
content.addChild(node=security)
|
security.addChild('fingerprint').addData(cert.digest(
|
||||||
|
digest_algo))
|
||||||
|
for m in ('x509', ): # supported authentication methods
|
||||||
|
method = nbxmpp.simplexml.Node(tag='method')
|
||||||
|
method.setAttr('name', m)
|
||||||
|
security.addChild(node=method)
|
||||||
|
content.addChild(node=security)
|
||||||
content.addChild(node=description_node)
|
content.addChild(node=description_node)
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
|
|
|
@ -20,16 +20,17 @@ Handles Jingle File Transfer (XEP 0234)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import gajim
|
from common import gajim
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from jingle_content import contents, JingleContent
|
from . import jingle_xtls
|
||||||
from jingle_transport import *
|
from common.jingle_content import contents, JingleContent
|
||||||
|
from common.jingle_transport import *
|
||||||
from common import helpers
|
from common import helpers
|
||||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||||
from common.connection_handlers_events import FileRequestReceivedEvent
|
from common.connection_handlers_events import FileRequestReceivedEvent
|
||||||
import threading
|
import threading
|
||||||
import logging
|
import logging
|
||||||
from jingle_ftstates import *
|
from common.jingle_ftstates import *
|
||||||
log = logging.getLogger('gajim.c.jingle_ft')
|
log = logging.getLogger('gajim.c.jingle_ft')
|
||||||
|
|
||||||
STATE_NOT_STARTED = 0
|
STATE_NOT_STARTED = 0
|
||||||
|
@ -68,6 +69,7 @@ class JingleFileTransfer(JingleContent):
|
||||||
self.callbacks['transport-info'] += [self.__on_transport_info]
|
self.callbacks['transport-info'] += [self.__on_transport_info]
|
||||||
self.callbacks['iq-result'] += [self.__on_iq_result]
|
self.callbacks['iq-result'] += [self.__on_iq_result]
|
||||||
self.use_security = use_security
|
self.use_security = use_security
|
||||||
|
self.x509_fingerprint = None
|
||||||
self.file_props = file_props
|
self.file_props = file_props
|
||||||
self.weinitiate = self.session.weinitiate
|
self.weinitiate = self.session.weinitiate
|
||||||
self.werequest = self.session.werequest
|
self.werequest = self.session.werequest
|
||||||
|
@ -95,8 +97,8 @@ class JingleFileTransfer(JingleContent):
|
||||||
if gajim.contacts.is_gc_contact(session.connection.name,
|
if gajim.contacts.is_gc_contact(session.connection.name,
|
||||||
session.peerjid):
|
session.peerjid):
|
||||||
roomjid = session.peerjid.split('/')[0]
|
roomjid = session.peerjid.split('/')[0]
|
||||||
dstaddr = hashlib.sha1('%s%s%s' % (self.file_props.sid,
|
dstaddr = hashlib.sha1(('%s%s%s' % (self.file_props.sid,
|
||||||
session.ourjid, roomjid)).hexdigest()
|
session.ourjid, roomjid)).encode('utf-8')).hexdigest()
|
||||||
self.file_props.dstaddr = dstaddr
|
self.file_props.dstaddr = dstaddr
|
||||||
self.state = STATE_NOT_STARTED
|
self.state = STATE_NOT_STARTED
|
||||||
self.states = {STATE_INITIALIZED : StateInitialized(self),
|
self.states = {STATE_INITIALIZED : StateInitialized(self),
|
||||||
|
@ -149,12 +151,13 @@ class JingleFileTransfer(JingleContent):
|
||||||
if self.file_props.algo == None:
|
if self.file_props.algo == None:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
file_ = open(self.file_props.file_name, 'r')
|
file_ = open(self.file_props.file_name, 'rb')
|
||||||
except:
|
except:
|
||||||
# can't open file
|
# can't open file
|
||||||
return
|
return
|
||||||
h = nbxmpp.Hashes()
|
h = nbxmpp.Hashes()
|
||||||
hash_ = h.calculateHash(self.file_props.algo, file_)
|
hash_ = h.calculateHash(self.file_props.algo, file_)
|
||||||
|
file_.close()
|
||||||
# DEBUG
|
# DEBUG
|
||||||
#hash_ = '1294809248109223'
|
#hash_ = '1294809248109223'
|
||||||
if not hash_:
|
if not hash_:
|
||||||
|
@ -164,17 +167,37 @@ class JingleFileTransfer(JingleContent):
|
||||||
h.addHash(hash_, self.file_props.algo)
|
h.addHash(hash_, self.file_props.algo)
|
||||||
return h
|
return h
|
||||||
|
|
||||||
|
def on_cert_received(self):
|
||||||
|
self.session.approve_session()
|
||||||
|
self.session.approve_content('file', name=self.name)
|
||||||
|
|
||||||
def __on_session_accept(self, stanza, content, error, action):
|
def __on_session_accept(self, stanza, content, error, action):
|
||||||
log.info("__on_session_accept")
|
log.info("__on_session_accept")
|
||||||
con = self.session.connection
|
con = self.session.connection
|
||||||
|
# We ack the session accept
|
||||||
|
response = stanza.buildReply('result')
|
||||||
|
response.delChild(response.getQuery())
|
||||||
|
con.connection.send(response)
|
||||||
security = content.getTag('security')
|
security = content.getTag('security')
|
||||||
if not security: # responder can not verify our fingerprint
|
if not security: # responder can not verify our fingerprint
|
||||||
self.use_security = False
|
self.use_security = False
|
||||||
|
else:
|
||||||
|
fingerprint = security.getTag('fingerprint')
|
||||||
|
if fingerprint:
|
||||||
|
fingerprint = fingerprint.getData()
|
||||||
|
self.x509_fingerprint = fingerprint
|
||||||
|
if not jingle_xtls.check_cert(gajim.get_jid_without_resource(
|
||||||
|
self.session.responder), fingerprint):
|
||||||
|
id_ = jingle_xtls.send_cert_request(con,
|
||||||
|
self.session.responder)
|
||||||
|
jingle_xtls.key_exchange_pend(id_,
|
||||||
|
self.continue_session_accept, [stanza])
|
||||||
|
raise nbxmpp.NodeProcessed
|
||||||
|
self.continue_session_accept(stanza)
|
||||||
|
|
||||||
|
def continue_session_accept(self, stanza):
|
||||||
|
con = self.session.connection
|
||||||
if self.state == STATE_TRANSPORT_REPLACE:
|
if self.state == STATE_TRANSPORT_REPLACE:
|
||||||
# We ack the session accept
|
|
||||||
response = stanza.buildReply('result')
|
|
||||||
response.delChild(response.getQuery())
|
|
||||||
con.connection.send(response)
|
|
||||||
# If we are requesting we don't have the file
|
# If we are requesting we don't have the file
|
||||||
if self.session.werequest:
|
if self.session.werequest:
|
||||||
raise nbxmpp.NodeProcessed
|
raise nbxmpp.NodeProcessed
|
||||||
|
@ -185,16 +208,13 @@ class JingleFileTransfer(JingleContent):
|
||||||
# Calculate file hash in a new thread
|
# Calculate file hash in a new thread
|
||||||
# if we haven't sent the hash already.
|
# if we haven't sent the hash already.
|
||||||
if self.file_props.hash_ is None and self.file_props.algo and \
|
if self.file_props.hash_ is None and self.file_props.algo and \
|
||||||
not self.werequest:
|
not self.werequest:
|
||||||
self.hashThread = threading.Thread(target=self.__send_hash)
|
self.hashThread = threading.Thread(target=self.__send_hash)
|
||||||
self.hashThread.start()
|
self.hashThread.start()
|
||||||
for host in self.file_props.streamhosts:
|
for host in self.file_props.streamhosts:
|
||||||
host['initiator'] = self.session.initiator
|
host['initiator'] = self.session.initiator
|
||||||
host['target'] = self.session.responder
|
host['target'] = self.session.responder
|
||||||
host['sid'] = self.file_props.sid
|
host['sid'] = self.file_props.sid
|
||||||
response = stanza.buildReply('result')
|
|
||||||
response.delChild(response.getQuery())
|
|
||||||
con.connection.send(response)
|
|
||||||
fingerprint = None
|
fingerprint = None
|
||||||
if self.use_security:
|
if self.use_security:
|
||||||
fingerprint = 'client'
|
fingerprint = 'client'
|
||||||
|
@ -203,7 +223,7 @@ class JingleFileTransfer(JingleContent):
|
||||||
self.file_props.sid, self.on_connect,
|
self.file_props.sid, self.on_connect,
|
||||||
self._on_connect_error, fingerprint=fingerprint,
|
self._on_connect_error, fingerprint=fingerprint,
|
||||||
receiving=False)
|
receiving=False)
|
||||||
return
|
raise nbxmpp.NodeProcessed
|
||||||
self.__state_changed(STATE_TRANSFERING)
|
self.__state_changed(STATE_TRANSFERING)
|
||||||
raise nbxmpp.NodeProcessed
|
raise nbxmpp.NodeProcessed
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
## You should have received a copy of the GNU General Public License
|
## You should have received a copy of the GNU General Public License
|
||||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import gajim
|
from common import gajim
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from jingle_transport import *
|
from common.jingle_transport import *
|
||||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,19 +19,19 @@ Handles Jingle RTP sessions (XEP 0167)
|
||||||
|
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
import farstream, gst
|
import farstream
|
||||||
import gst.interfaces
|
import gst
|
||||||
from glib import GError
|
from glib import GError
|
||||||
|
|
||||||
import gajim
|
from common import gajim
|
||||||
|
|
||||||
from jingle_transport import JingleTransportICEUDP
|
from common.jingle_transport import JingleTransportICEUDP
|
||||||
from jingle_content import contents, JingleContent, JingleContentSetupException
|
from common.jingle_content import contents, JingleContent, JingleContentSetupException
|
||||||
from connection_handlers_events import InformationEvent
|
from common.connection_handlers_events import InformationEvent
|
||||||
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -66,7 +66,6 @@ class JingleRTPContent(JingleContent):
|
||||||
# pipeline and bus
|
# pipeline and bus
|
||||||
self.pipeline = gst.Pipeline()
|
self.pipeline = gst.Pipeline()
|
||||||
bus = self.pipeline.get_bus()
|
bus = self.pipeline.get_bus()
|
||||||
bus.enable_sync_message_emission()
|
|
||||||
bus.add_signal_watch()
|
bus.add_signal_watch()
|
||||||
bus.connect('message', self._on_gst_message)
|
bus.connect('message', self._on_gst_message)
|
||||||
|
|
||||||
|
@ -90,8 +89,8 @@ class JingleRTPContent(JingleContent):
|
||||||
try:
|
try:
|
||||||
ip = socket.getaddrinfo(stun_server, 0, socket.AF_UNSPEC,
|
ip = socket.getaddrinfo(stun_server, 0, socket.AF_UNSPEC,
|
||||||
socket.SOCK_STREAM)[0][4][0]
|
socket.SOCK_STREAM)[0][4][0]
|
||||||
except socket.gaierror, (errnum, errstr):
|
except socket.gaierror as e:
|
||||||
log.warn('Lookup of stun ip failed: %s' % errstr)
|
log.warning('Lookup of stun ip failed: %s' % str(e))
|
||||||
else:
|
else:
|
||||||
params['stun-ip'] = ip
|
params['stun-ip'] = ip
|
||||||
|
|
||||||
|
@ -108,13 +107,13 @@ class JingleRTPContent(JingleContent):
|
||||||
try:
|
try:
|
||||||
bin = gst.parse_bin_from_description(pipeline, True)
|
bin = gst.parse_bin_from_description(pipeline, True)
|
||||||
return bin
|
return bin
|
||||||
except GError, error_str:
|
except GError as e:
|
||||||
gajim.nec.push_incoming_event(InformationEvent(None,
|
gajim.nec.push_incoming_event(InformationEvent(None,
|
||||||
conn=self.session.connection, level='error',
|
conn=self.session.connection, level='error',
|
||||||
pri_txt=_('%s configuration error') % text.capitalize(),
|
pri_txt=_('%s configuration error') % text.capitalize(),
|
||||||
sec_txt=_("Couldn't setup %s. Check your configuration.\n\n"
|
sec_txt=_("Couldn't setup %s. Check your configuration.\n\n"
|
||||||
"Pipeline was:\n%s\n\nError was:\n%s") % (text, pipeline,
|
"Pipeline was:\n%s\n\nError was:\n%s") % (text, pipeline,
|
||||||
error_str)))
|
str(e))))
|
||||||
raise JingleContentSetupException
|
raise JingleContentSetupException
|
||||||
|
|
||||||
def add_remote_candidates(self, candidates):
|
def add_remote_candidates(self, candidates):
|
||||||
|
@ -133,13 +132,13 @@ class JingleRTPContent(JingleContent):
|
||||||
events = deque(events)
|
events = deque(events)
|
||||||
self._dtmf_running = True
|
self._dtmf_running = True
|
||||||
self._start_dtmf(events.popleft())
|
self._start_dtmf(events.popleft())
|
||||||
gobject.timeout_add(500, self._next_dtmf, events)
|
GLib.timeout_add(500, self._next_dtmf, events)
|
||||||
|
|
||||||
def _next_dtmf(self, events):
|
def _next_dtmf(self, events):
|
||||||
self._stop_dtmf()
|
self._stop_dtmf()
|
||||||
if events:
|
if events:
|
||||||
self._start_dtmf(events.popleft())
|
self._start_dtmf(events.popleft())
|
||||||
gobject.timeout_add(500, self._next_dtmf, events)
|
GLib.timeout_add(500, self._next_dtmf, events)
|
||||||
else:
|
else:
|
||||||
self._dtmf_running = False
|
self._dtmf_running = False
|
||||||
|
|
||||||
|
@ -370,11 +369,8 @@ class JingleAudio(JingleRTPContent):
|
||||||
|
|
||||||
|
|
||||||
class JingleVideo(JingleRTPContent):
|
class JingleVideo(JingleRTPContent):
|
||||||
def __init__(self, session, transport=None, in_xid=0, out_xid=0):
|
def __init__(self, session, transport=None):
|
||||||
JingleRTPContent.__init__(self, session, 'video', transport)
|
JingleRTPContent.__init__(self, session, 'video', transport)
|
||||||
self.in_xid = in_xid
|
|
||||||
self.out_xid = out_xid
|
|
||||||
self.out_xid_set = False
|
|
||||||
self.setup_stream()
|
self.setup_stream()
|
||||||
|
|
||||||
def setup_stream(self):
|
def setup_stream(self):
|
||||||
|
@ -382,8 +378,6 @@ class JingleVideo(JingleRTPContent):
|
||||||
# sometimes, one window won't show up,
|
# sometimes, one window won't show up,
|
||||||
# sometimes it'll freeze...
|
# sometimes it'll freeze...
|
||||||
JingleRTPContent.setup_stream(self, self._on_src_pad_added)
|
JingleRTPContent.setup_stream(self, self._on_src_pad_added)
|
||||||
bus = self.pipeline.get_bus()
|
|
||||||
bus.connect('sync-message::element', self._on_sync_message)
|
|
||||||
|
|
||||||
# the local parts
|
# the local parts
|
||||||
if gajim.config.get('video_framerate'):
|
if gajim.config.get('video_framerate'):
|
||||||
|
@ -399,25 +393,17 @@ class JingleVideo(JingleRTPContent):
|
||||||
video_size = 'video/x-raw-yuv,width=%s,height=%s ! ' % (w, h)
|
video_size = 'video/x-raw-yuv,width=%s,height=%s ! ' % (w, h)
|
||||||
else:
|
else:
|
||||||
video_size = ''
|
video_size = ''
|
||||||
if gajim.config.get('video_see_self'):
|
|
||||||
tee = '! tee name=t ! queue ! videoscale ! ' + \
|
|
||||||
'video/x-raw-yuv,width=160,height=120 ! ffmpegcolorspace ! ' + \
|
|
||||||
'%s t. ! queue ' % gajim.config.get(
|
|
||||||
'video_output_device')
|
|
||||||
else:
|
|
||||||
tee = ''
|
|
||||||
|
|
||||||
self.src_bin = self.make_bin_from_config('video_input_device',
|
self.src_bin = self.make_bin_from_config('video_input_device',
|
||||||
'%%s %s! %svideoscale ! %sffmpegcolorspace' % (tee, framerate,
|
'%%s ! %svideoscale ! %sffmpegcolorspace' % (framerate, video_size),
|
||||||
video_size), _("video input"))
|
_("video input"))
|
||||||
|
#caps = gst.element_factory_make('capsfilter')
|
||||||
|
#caps.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=320, height=240'))
|
||||||
|
|
||||||
self.pipeline.add(self.src_bin)#, caps)
|
self.pipeline.add(self.src_bin)#, caps)
|
||||||
self.pipeline.set_state(gst.STATE_PLAYING)
|
|
||||||
#src_bin.link(caps)
|
#src_bin.link(caps)
|
||||||
|
|
||||||
self.sink = self.make_bin_from_config('video_output_device',
|
self.sink = self.make_bin_from_config('video_output_device',
|
||||||
'videoscale ! ffmpegcolorspace ! %s',
|
'videoscale ! ffmpegcolorspace ! %s force-aspect-ratio=True',
|
||||||
_("video output"))
|
_("video output"))
|
||||||
self.pipeline.add(self.sink)
|
self.pipeline.add(self.sink)
|
||||||
|
|
||||||
|
@ -427,27 +413,11 @@ class JingleVideo(JingleRTPContent):
|
||||||
# The following is needed for farstream to process ICE requests:
|
# The following is needed for farstream to process ICE requests:
|
||||||
self.pipeline.set_state(gst.STATE_PLAYING)
|
self.pipeline.set_state(gst.STATE_PLAYING)
|
||||||
|
|
||||||
def _on_sync_message(self, bus, message):
|
|
||||||
if message.structure is None:
|
|
||||||
return False
|
|
||||||
if message.structure.get_name() == 'prepare-xwindow-id':
|
|
||||||
message.src.set_property('force-aspect-ratio', True)
|
|
||||||
imagesink = message.src
|
|
||||||
if gajim.config.get('video_see_self') and not self.out_xid_set:
|
|
||||||
imagesink.set_xwindow_id(self.out_xid)
|
|
||||||
self.out_xid_set = True
|
|
||||||
else:
|
|
||||||
imagesink.set_xwindow_id(self.in_xid)
|
|
||||||
|
|
||||||
def get_fallback_src(self):
|
def get_fallback_src(self):
|
||||||
# TODO: Use avatar?
|
# TODO: Use avatar?
|
||||||
pipeline = 'videotestsrc is-live=true ! video/x-raw-yuv,framerate=10/1 ! ffmpegcolorspace'
|
pipeline = 'videotestsrc is-live=true ! video/x-raw-yuv,framerate=10/1 ! ffmpegcolorspace'
|
||||||
return gst.parse_bin_from_description(pipeline, True)
|
return gst.parse_bin_from_description(pipeline, True)
|
||||||
|
|
||||||
def destroy(self):
|
|
||||||
JingleRTPContent.destroy(self)
|
|
||||||
self.pipeline.get_bus().disconnect_by_func(self._on_sync_message)
|
|
||||||
|
|
||||||
def get_content(desc):
|
def get_content(desc):
|
||||||
if desc['media'] == 'audio':
|
if desc['media'] == 'audio':
|
||||||
return JingleAudio
|
return JingleAudio
|
||||||
|
|
|
@ -28,12 +28,12 @@ Handles Jingle sessions (XEP 0166)
|
||||||
# - Tie-breaking
|
# - Tie-breaking
|
||||||
# * timeout
|
# * timeout
|
||||||
|
|
||||||
import gajim #Get rid of that?
|
from common import gajim
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
from jingle_transport import get_jingle_transport, JingleTransportIBB
|
from common.jingle_transport import get_jingle_transport, JingleTransportIBB
|
||||||
from jingle_content import get_jingle_content, JingleContentSetupException
|
from common.jingle_content import get_jingle_content, JingleContentSetupException
|
||||||
from jingle_content import JingleContent
|
from common.jingle_content import JingleContent
|
||||||
from jingle_ft import STATE_TRANSPORT_REPLACE
|
from common.jingle_ft import STATE_TRANSPORT_REPLACE
|
||||||
from common.connection_handlers_events import *
|
from common.connection_handlers_events import *
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger("gajim.c.jingle_session")
|
log = logging.getLogger("gajim.c.jingle_session")
|
||||||
|
@ -75,7 +75,6 @@ class JingleSession(object):
|
||||||
self.contents = {} # negotiated contents
|
self.contents = {} # negotiated contents
|
||||||
self.connection = con # connection to use
|
self.connection = con # connection to use
|
||||||
# our full jid
|
# our full jid
|
||||||
#FIXME: Get rid of gajim here?
|
|
||||||
self.ourjid = gajim.get_jid_from_account(self.connection.name)
|
self.ourjid = gajim.get_jid_from_account(self.connection.name)
|
||||||
if con.server_resource:
|
if con.server_resource:
|
||||||
self.ourjid = self.ourjid + '/' + con.server_resource
|
self.ourjid = self.ourjid + '/' + con.server_resource
|
||||||
|
@ -273,8 +272,8 @@ class JingleSession(object):
|
||||||
"""
|
"""
|
||||||
Return True when all codecs and candidates are ready (for all contents)
|
Return True when all codecs and candidates are ready (for all contents)
|
||||||
"""
|
"""
|
||||||
return (any((content.is_ready() for content in self.contents.itervalues()))
|
return (any((content.is_ready() for content in self.contents.values()))
|
||||||
and self.accepted)
|
and self.accepted)
|
||||||
|
|
||||||
def accept_session(self):
|
def accept_session(self):
|
||||||
"""
|
"""
|
||||||
|
@ -592,7 +591,7 @@ class JingleSession(object):
|
||||||
"""
|
"""
|
||||||
Broadcast the stanza to all content handlers
|
Broadcast the stanza to all content handlers
|
||||||
"""
|
"""
|
||||||
for content in self.contents.itervalues():
|
for content in self.contents.values():
|
||||||
content.on_stanza(stanza, None, error, action)
|
content.on_stanza(stanza, None, error, action)
|
||||||
|
|
||||||
def __parse_contents(self, jingle):
|
def __parse_contents(self, jingle):
|
||||||
|
|
|
@ -156,7 +156,8 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
candidates.append(cand)
|
candidates.append(cand)
|
||||||
|
|
||||||
# we need this when we construct file_props on session-initiation
|
# we need this when we construct file_props on session-initiation
|
||||||
self.remote_candidates = candidates
|
if candidates:
|
||||||
|
self.remote_candidates = candidates
|
||||||
return candidates
|
return candidates
|
||||||
|
|
||||||
|
|
||||||
|
@ -177,30 +178,39 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
return
|
return
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
local_ip_cand = []
|
|
||||||
port = int(gajim.config.get('file_transfers_port'))
|
port = int(gajim.config.get('file_transfers_port'))
|
||||||
#type preference of connection type. XEP-0260 section 2.2
|
#type preference of connection type. XEP-0260 section 2.2
|
||||||
type_preference = 126
|
type_preference = 126
|
||||||
c = {'host': self.connection.peerhost[0]}
|
priority = (2**16) * type_preference
|
||||||
c['candidate_id'] = self.connection.connection.getAnID()
|
|
||||||
c['port'] = port
|
|
||||||
c['type'] = 'direct'
|
|
||||||
c['jid'] = self.ourjid
|
|
||||||
c['priority'] = (2**16) * type_preference
|
|
||||||
|
|
||||||
|
hosts = set()
|
||||||
|
local_ip_cand = []
|
||||||
|
|
||||||
|
c = {'host': self.connection.peerhost[0],
|
||||||
|
'candidate_id': self.connection.connection.getAnID(),
|
||||||
|
'port': port,
|
||||||
|
'type': 'direct',
|
||||||
|
'jid': self.ourjid,
|
||||||
|
'priority': priority}
|
||||||
|
hosts.add(self.connection.peerhost[0])
|
||||||
local_ip_cand.append(c)
|
local_ip_cand.append(c)
|
||||||
|
|
||||||
for addr in socket.getaddrinfo(socket.gethostname(), None):
|
try:
|
||||||
if not addr[4][0] in local_ip_cand and not addr[4][0].startswith('127'):
|
for addrinfo in socket.getaddrinfo(socket.gethostname(), None):
|
||||||
c = {'host': addr[4][0]}
|
addr = addrinfo[4][0]
|
||||||
c['candidate_id'] = self.connection.connection.getAnID()
|
if not addr in hosts and not addr.startswith('127'):
|
||||||
c['port'] = port
|
c = {'host': addr,
|
||||||
c['type'] = 'direct'
|
'candidate_id': self.connection.connection.getAnID(),
|
||||||
c['jid'] = self.ourjid
|
'port': port,
|
||||||
c['priority'] = (2**16) * type_preference
|
'type': 'direct',
|
||||||
c['initiator'] = self.file_props.sender
|
'jid': self.ourjid,
|
||||||
c['target'] = self.file_props.receiver
|
'priority': priority,
|
||||||
local_ip_cand.append(c)
|
'initiator': self.file_props.sender,
|
||||||
|
'target': self.file_props.receiver}
|
||||||
|
hosts.add(addr)
|
||||||
|
local_ip_cand.append(c)
|
||||||
|
except socket.gaierror:
|
||||||
|
pass # ignore address-related errors for getaddrinfo
|
||||||
|
|
||||||
self._add_candidates(local_ip_cand)
|
self._add_candidates(local_ip_cand)
|
||||||
|
|
||||||
|
@ -208,6 +218,7 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
type_preference = 126
|
type_preference = 126
|
||||||
|
priority = (2**16) * type_preference
|
||||||
additional_ip_cand = []
|
additional_ip_cand = []
|
||||||
port = int(gajim.config.get('file_transfers_port'))
|
port = int(gajim.config.get('file_transfers_port'))
|
||||||
ft_add_hosts = gajim.config.get('ft_add_hosts_to_send')
|
ft_add_hosts = gajim.config.get('ft_add_hosts_to_send')
|
||||||
|
@ -215,14 +226,14 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
if ft_add_hosts:
|
if ft_add_hosts:
|
||||||
hosts = [e.strip() for e in ft_add_hosts.split(',')]
|
hosts = [e.strip() for e in ft_add_hosts.split(',')]
|
||||||
for h in hosts:
|
for h in hosts:
|
||||||
c = {'host': h}
|
c = {'host': h,
|
||||||
c['candidate_id'] = self.connection.connection.getAnID()
|
'candidate_id': self.connection.connection.getAnID(),
|
||||||
c['port'] = port
|
'port': port,
|
||||||
c['type'] = 'direct'
|
'type': 'direct',
|
||||||
c['jid'] = self.ourjid
|
'jid': self.ourjid,
|
||||||
c['priority'] = (2**16) * type_preference
|
'priority': priority,
|
||||||
c['initiator'] = self.file_props.sender
|
'initiator': self.file_props.sender,
|
||||||
c['target'] = self.file_props.receiver
|
'target': self.file_props.receiver}
|
||||||
additional_ip_cand.append(c)
|
additional_ip_cand.append(c)
|
||||||
|
|
||||||
self._add_candidates(additional_ip_cand)
|
self._add_candidates(additional_ip_cand)
|
||||||
|
@ -231,6 +242,7 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
if not self.connection:
|
if not self.connection:
|
||||||
return
|
return
|
||||||
type_preference = 10
|
type_preference = 10
|
||||||
|
priority = (2**16) * type_preference
|
||||||
proxy_cand = []
|
proxy_cand = []
|
||||||
socks5conn = self.connection
|
socks5conn = self.connection
|
||||||
proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
|
proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
|
||||||
|
@ -239,14 +251,14 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
self.file_props.proxyhosts = proxyhosts
|
self.file_props.proxyhosts = proxyhosts
|
||||||
|
|
||||||
for proxyhost in proxyhosts:
|
for proxyhost in proxyhosts:
|
||||||
c = {'host': proxyhost['host']}
|
c = {'host': proxyhost['host'],
|
||||||
c['candidate_id'] = self.connection.connection.getAnID()
|
'candidate_id': self.connection.connection.getAnID(),
|
||||||
c['port'] = int(proxyhost['port'])
|
'port': int(proxyhost['port']),
|
||||||
c['type'] = 'proxy'
|
'type': 'proxy',
|
||||||
c['jid'] = proxyhost['jid']
|
'jid': proxyhost['jid'],
|
||||||
c['priority'] = (2**16) * type_preference
|
'priority': priority,
|
||||||
c['initiator'] = self.file_props.sender
|
'initiator': self.file_props.sender,
|
||||||
c['target'] = self.file_props.receiver
|
'target': self.file_props.receiver}
|
||||||
proxy_cand.append(c)
|
proxy_cand.append(c)
|
||||||
|
|
||||||
self._add_candidates(proxy_cand)
|
self._add_candidates(proxy_cand)
|
||||||
|
@ -298,7 +310,7 @@ class JingleTransportSocks5(JingleTransport):
|
||||||
cid = host['candidate_id']
|
cid = host['candidate_id']
|
||||||
break
|
break
|
||||||
if cid is None:
|
if cid is None:
|
||||||
raise Exception, 'cid is missing'
|
raise Exception('cid is missing')
|
||||||
activated.setAttr('cid', cid)
|
activated.setAttr('cid', cid)
|
||||||
transport.addChild(node=activated)
|
transport.addChild(node=activated)
|
||||||
content.addChild(node=transport)
|
content.addChild(node=transport)
|
||||||
|
@ -331,6 +343,7 @@ class JingleTransportIBB(JingleTransport):
|
||||||
return transport
|
return transport
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
raise ImportError
|
||||||
import farstream
|
import farstream
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
@ -402,7 +415,7 @@ class JingleTransportICEUDP(JingleTransport):
|
||||||
if 'type' in candidate and candidate['type'] in types:
|
if 'type' in candidate and candidate['type'] in types:
|
||||||
cand.type = types[candidate['type']]
|
cand.type = types[candidate['type']]
|
||||||
else:
|
else:
|
||||||
print 'Unknown type %s', candidate['type']
|
print('Unknown type %s' % candidate['type'])
|
||||||
candidates.append(cand)
|
candidates.append(cand)
|
||||||
self.remote_candidates.extend(candidates)
|
self.remote_candidates.extend(candidates)
|
||||||
return candidates
|
return candidates
|
||||||
|
|
|
@ -20,21 +20,22 @@ import os
|
||||||
import nbxmpp
|
import nbxmpp
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import common
|
|
||||||
from common import gajim
|
from common import gajim
|
||||||
log = logging.getLogger('gajim.c.jingle_xtls')
|
log = logging.getLogger('gajim.c.jingle_xtls')
|
||||||
|
|
||||||
PYOPENSSL_PRESENT = False
|
PYOPENSSL_PRESENT = False
|
||||||
|
|
||||||
pending_contents = {} # key-exchange id -> session, accept that session once key-exchange completes
|
# key-exchange id -> [callback, args], accept that session once key-exchange completes
|
||||||
|
pending_contents = {}
|
||||||
|
|
||||||
def key_exchange_pend(id_, content):
|
def key_exchange_pend(id_, cb, args):
|
||||||
pending_contents[id_] = content
|
# args is a list
|
||||||
|
pending_contents[id_] = [cb, args]
|
||||||
|
|
||||||
def approve_pending_content(id_):
|
def approve_pending_content(id_):
|
||||||
content = pending_contents[id_]
|
cb = pending_contents[id_][0]
|
||||||
content.session.approve_session()
|
args = pending_contents[id_][1]
|
||||||
content.session.approve_content('file', name=content.name)
|
cb(*args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import OpenSSL.SSL
|
import OpenSSL.SSL
|
||||||
|
@ -50,23 +51,25 @@ if PYOPENSSL_PRESENT:
|
||||||
TYPE_DSA = crypto.TYPE_DSA
|
TYPE_DSA = crypto.TYPE_DSA
|
||||||
|
|
||||||
SELF_SIGNED_CERTIFICATE = 'localcert'
|
SELF_SIGNED_CERTIFICATE = 'localcert'
|
||||||
|
DH_PARAMS = 'dh_params.pem'
|
||||||
|
DEFAULT_DH_PARAMS = 'dh4096.pem'
|
||||||
|
|
||||||
def default_callback(connection, certificate, error_num, depth, return_code):
|
def default_callback(connection, certificate, error_num, depth, return_code):
|
||||||
log.info("certificate: %s" % certificate)
|
log.info("certificate: %s" % certificate)
|
||||||
return return_code
|
return return_code
|
||||||
|
|
||||||
def load_cert_file(cert_path, cert_store):
|
def load_cert_file(cert_path, cert_store=None):
|
||||||
"""
|
"""
|
||||||
This is almost identical to the one in nbxmpp.tls_nb
|
This is almost identical to the one in nbxmpp.tls_nb
|
||||||
"""
|
"""
|
||||||
if not os.path.isfile(cert_path):
|
if not os.path.isfile(cert_path):
|
||||||
return
|
return None
|
||||||
try:
|
try:
|
||||||
f = open(cert_path)
|
f = open(cert_path)
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
log.warning('Unable to open certificate file %s: %s' % (cert_path,
|
log.warning('Unable to open certificate file %s: %s' % (cert_path,
|
||||||
str(e)))
|
str(e)))
|
||||||
return
|
return None
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
i = 0
|
i = 0
|
||||||
begin = -1
|
begin = -1
|
||||||
|
@ -78,8 +81,10 @@ def load_cert_file(cert_path, cert_store):
|
||||||
try:
|
try:
|
||||||
x509cert = OpenSSL.crypto.load_certificate(
|
x509cert = OpenSSL.crypto.load_certificate(
|
||||||
OpenSSL.crypto.FILETYPE_PEM, cert)
|
OpenSSL.crypto.FILETYPE_PEM, cert)
|
||||||
cert_store.add_cert(x509cert)
|
if cert_store:
|
||||||
except OpenSSL.crypto.Error, exception_obj:
|
cert_store.add_cert(x509cert)
|
||||||
|
return x509cert
|
||||||
|
except OpenSSL.crypto.Error as exception_obj:
|
||||||
log.warning('Unable to load a certificate from file %s: %s' %\
|
log.warning('Unable to load a certificate from file %s: %s' %\
|
||||||
(cert_path, exception_obj.args[0][0][2]))
|
(cert_path, exception_obj.args[0][0][2]))
|
||||||
except:
|
except:
|
||||||
|
@ -87,13 +92,15 @@ def load_cert_file(cert_path, cert_store):
|
||||||
'%s' % cert_path)
|
'%s' % cert_path)
|
||||||
begin = -1
|
begin = -1
|
||||||
i += 1
|
i += 1
|
||||||
|
f.close()
|
||||||
|
|
||||||
def get_context(fingerprint, verify_cb=None):
|
def get_context(fingerprint, verify_cb=None, remote_jid=None):
|
||||||
"""
|
"""
|
||||||
constructs and returns the context objects
|
constructs and returns the context objects
|
||||||
"""
|
"""
|
||||||
ctx = SSL.Context(SSL.SSLv23_METHOD)
|
ctx = SSL.Context(SSL.SSLv23_METHOD)
|
||||||
flags = (SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3 | SSL.OP_SINGLE_DH_USE)
|
flags = (SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3 | SSL.OP_SINGLE_DH_USE \
|
||||||
|
| SSL.OP_NO_TICKET)
|
||||||
ctx.set_options(flags)
|
ctx.set_options(flags)
|
||||||
ctx.set_cipher_list('HIGH:!aNULL:!3DES')
|
ctx.set_cipher_list('HIGH:!aNULL:!3DES')
|
||||||
|
|
||||||
|
@ -106,22 +113,46 @@ def get_context(fingerprint, verify_cb=None):
|
||||||
cert_name = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)
|
cert_name = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)
|
||||||
ctx.use_privatekey_file (cert_name + '.pkey')
|
ctx.use_privatekey_file (cert_name + '.pkey')
|
||||||
ctx.use_certificate_file(cert_name + '.cert')
|
ctx.use_certificate_file(cert_name + '.cert')
|
||||||
store = ctx.get_cert_store()
|
|
||||||
for f in os.listdir(os.path.expanduser(gajim.MY_PEER_CERTS_PATH)):
|
# Try to load Diffie-Hellman parameters.
|
||||||
load_cert_file(os.path.join(os.path.expanduser(
|
# First try user DH parameters, if this fails load the default DH parameters
|
||||||
gajim.MY_PEER_CERTS_PATH), f), store)
|
dh_params_name = os.path.join(gajim.MY_CERT_DIR, DH_PARAMS)
|
||||||
log.debug('certificate file ' + f + ' loaded fingerprint ' + \
|
try:
|
||||||
fingerprint)
|
with open(dh_params_name, "r") as dh_params_file:
|
||||||
|
ctx.load_tmp_dh(str(dh_params_name).encode('utf-8'))
|
||||||
|
except IOError as err:
|
||||||
|
default_dh_params_name = os.path.join(common.gajim.DATA_DIR,
|
||||||
|
'other', DEFAULT_DH_PARAMS)
|
||||||
|
try:
|
||||||
|
with open(default_dh_params_name, "r") as default_dh_params_file:
|
||||||
|
ctx.load_tmp_dh(str(default_dh_params_name).encode('utf-8'))
|
||||||
|
except IOError as err:
|
||||||
|
log.error('Unable to load default DH parameter file: %s , %s'
|
||||||
|
% (default_dh_params_name, err))
|
||||||
|
raise
|
||||||
|
|
||||||
|
if remote_jid:
|
||||||
|
store = ctx.get_cert_store()
|
||||||
|
path = os.path.join(os.path.expanduser(gajim.MY_PEER_CERTS_PATH),
|
||||||
|
remote_jid) + '.cert'
|
||||||
|
if os.path.exists(path):
|
||||||
|
load_cert_file(path, cert_store=store)
|
||||||
|
log.debug('certificate file ' + path + ' loaded fingerprint ' + \
|
||||||
|
fingerprint)
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
def read_cert(certpath):
|
||||||
|
certificate = ''
|
||||||
|
with open(certpath, 'r') as certfile:
|
||||||
|
for line in certfile.readlines():
|
||||||
|
if not line.startswith('-'):
|
||||||
|
certificate += line
|
||||||
|
return certificate
|
||||||
|
|
||||||
def send_cert(con, jid_from, sid):
|
def send_cert(con, jid_from, sid):
|
||||||
certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE) + \
|
certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE) + \
|
||||||
'.cert'
|
'.cert'
|
||||||
certfile = open(certpath, 'r')
|
certificate = read_cert(certpath)
|
||||||
certificate = ''
|
|
||||||
for line in certfile.readlines():
|
|
||||||
if not line.startswith('-'):
|
|
||||||
certificate += line
|
|
||||||
iq = nbxmpp.Iq('result', to=jid_from);
|
iq = nbxmpp.Iq('result', to=jid_from);
|
||||||
iq.setAttr('id', sid)
|
iq.setAttr('id', sid)
|
||||||
|
|
||||||
|
@ -151,9 +182,21 @@ def handle_new_cert(con, obj, jid_from):
|
||||||
f.write('-----BEGIN CERTIFICATE-----\n')
|
f.write('-----BEGIN CERTIFICATE-----\n')
|
||||||
f.write(cert)
|
f.write(cert)
|
||||||
f.write('-----END CERTIFICATE-----\n')
|
f.write('-----END CERTIFICATE-----\n')
|
||||||
|
f.close()
|
||||||
|
|
||||||
approve_pending_content(id_)
|
approve_pending_content(id_)
|
||||||
|
|
||||||
|
def check_cert(jid, fingerprint):
|
||||||
|
certpath = os.path.join(os.path.expanduser(gajim.MY_PEER_CERTS_PATH), jid)
|
||||||
|
certpath += '.cert'
|
||||||
|
if os.path.exists(certpath):
|
||||||
|
cert = load_cert_file(certpath)
|
||||||
|
if cert:
|
||||||
|
digest_algo = cert.get_signature_algorithm().split('With')[0]
|
||||||
|
if cert.digest(digest_algo) == fingerprint:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def send_cert_request(con, to_jid):
|
def send_cert_request(con, to_jid):
|
||||||
iq = nbxmpp.Iq('get', to=to_jid)
|
iq = nbxmpp.Iq('get', to=to_jid)
|
||||||
id_ = con.connection.getAnID()
|
id_ = con.connection.getAnID()
|
||||||
|
@ -161,7 +204,7 @@ def send_cert_request(con, to_jid):
|
||||||
pubkey = iq.setTag('pubkeys')
|
pubkey = iq.setTag('pubkeys')
|
||||||
pubkey.setNamespace(nbxmpp.NS_PUBKEY_PUBKEY)
|
pubkey.setNamespace(nbxmpp.NS_PUBKEY_PUBKEY)
|
||||||
con.connection.send(iq)
|
con.connection.send(iq)
|
||||||
return unicode(id_)
|
return str(id_)
|
||||||
|
|
||||||
# the following code is partly due to pyopenssl examples
|
# the following code is partly due to pyopenssl examples
|
||||||
|
|
||||||
|
@ -177,12 +220,12 @@ def createKeyPair(type, bits):
|
||||||
pkey.generate_key(type, bits)
|
pkey.generate_key(type, bits)
|
||||||
return pkey
|
return pkey
|
||||||
|
|
||||||
def createCertRequest(pkey, digest="sha1", **name):
|
def createCertRequest(pkey, digest="sha256", **name):
|
||||||
"""
|
"""
|
||||||
Create a certificate request.
|
Create a certificate request.
|
||||||
|
|
||||||
Arguments: pkey - The key to associate with the request
|
Arguments: pkey - The key to associate with the request
|
||||||
digest - Digestion method to use for signing, default is sha1
|
digest - Digestion method to use for signing, default is sha256
|
||||||
**name - The name of the subject of the request, possible
|
**name - The name of the subject of the request, possible
|
||||||
arguments are:
|
arguments are:
|
||||||
C - Country name
|
C - Country name
|
||||||
|
@ -204,7 +247,7 @@ def createCertRequest(pkey, digest="sha1", **name):
|
||||||
req.sign(pkey, digest)
|
req.sign(pkey, digest)
|
||||||
return req
|
return req
|
||||||
|
|
||||||
def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter), digest="sha1"):
|
def createCertificate(req, issuerCert, issuerKey, serial, notBefore, notAfter, digest="shai256"):
|
||||||
"""
|
"""
|
||||||
Generate a certificate given a certificate request.
|
Generate a certificate given a certificate request.
|
||||||
|
|
||||||
|
@ -216,7 +259,7 @@ def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter
|
||||||
starts being valid
|
starts being valid
|
||||||
notAfter - Timestamp (relative to now) when the certificate
|
notAfter - Timestamp (relative to now) when the certificate
|
||||||
stops being valid
|
stops being valid
|
||||||
digest - Digest method to use for signing, default is sha1
|
digest - Digest method to use for signing, default is sha256
|
||||||
Returns: The signed certificate in an X509 object
|
Returns: The signed certificate in an X509 object
|
||||||
"""
|
"""
|
||||||
cert = crypto.X509()
|
cert = crypto.X509()
|
||||||
|
@ -238,13 +281,13 @@ def make_certs(filepath, CN):
|
||||||
"""
|
"""
|
||||||
key = createKeyPair(TYPE_RSA, 4096)
|
key = createKeyPair(TYPE_RSA, 4096)
|
||||||
req = createCertRequest(key, CN=CN)
|
req = createCertRequest(key, CN=CN)
|
||||||
cert = createCertificate(req, (req, key), 0, (0, 60*60*24*365*5)) # five years
|
cert = createCertificate(req, req, key, 0, 0, 60*60*24*365*5) # five years
|
||||||
private_key_file = open(filepath + '.pkey', 'w')
|
with open(filepath + '.pkey', 'wb') as f:
|
||||||
os.chmod(filepath + '.pkey', 0600)
|
os.chmod(filepath + '.pkey', 0o600)
|
||||||
private_key_file.write(crypto.dump_privatekey(
|
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
|
||||||
crypto.FILETYPE_PEM, key))
|
with open(filepath + '.cert', 'wb') as f:
|
||||||
open(filepath + '.cert', 'w').write(crypto.dump_certificate(
|
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode(
|
||||||
crypto.FILETYPE_PEM, cert))
|
'utf-8'))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -46,14 +46,14 @@ def kwallet_get(folder, entry):
|
||||||
• folder: The top-level category to use (normally the programme name)
|
• folder: The top-level category to use (normally the programme name)
|
||||||
• entry: The key of the entry to retrieve
|
• entry: The key of the entry to retrieve
|
||||||
|
|
||||||
Returns the passphrase as unicode, False if it cannot be found,
|
Returns the passphrase, False if it cannot be found,
|
||||||
or None if an error occured.
|
or None if an error occured.
|
||||||
"""
|
"""
|
||||||
p = subprocess.Popen(["kwalletcli", "-q", "-f", folder.encode('utf-8'),
|
p = subprocess.Popen(["kwalletcli", "-q", "-f", folder.encode('utf-8'),
|
||||||
"-e", entry.encode('utf-8')], stdout=subprocess.PIPE)
|
"-e", entry.encode('utf-8')], stdout=subprocess.PIPE)
|
||||||
pw = p.communicate()[0]
|
pw = p.communicate()[0]
|
||||||
if p.returncode == 0:
|
if p.returncode == 0:
|
||||||
return unicode(pw.decode('utf-8'))
|
return pw
|
||||||
if p.returncode == 1 or p.returncode == 4:
|
if p.returncode == 1 or p.returncode == 4:
|
||||||
# ENOENT
|
# ENOENT
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -33,16 +33,16 @@ import sys
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
from gzip import GzipFile
|
from gzip import GzipFile
|
||||||
from cStringIO import StringIO
|
from io import BytesIO
|
||||||
import gobject
|
from gi.repository import GLib
|
||||||
|
|
||||||
import exceptions
|
from common import exceptions
|
||||||
import gajim
|
from common import gajim
|
||||||
import ged
|
from common import ged
|
||||||
|
|
||||||
import sqlite3 as sqlite
|
import sqlite3 as sqlite
|
||||||
|
|
||||||
import configpaths
|
from common import configpaths
|
||||||
LOG_DB_PATH = configpaths.gajimpaths['LOG_DB']
|
LOG_DB_PATH = configpaths.gajimpaths['LOG_DB']
|
||||||
LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
|
LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
|
||||||
CACHE_DB_PATH = configpaths.gajimpaths['CACHE_DB']
|
CACHE_DB_PATH = configpaths.gajimpaths['CACHE_DB']
|
||||||
|
@ -151,7 +151,7 @@ class Logger:
|
||||||
try:
|
try:
|
||||||
self.cur.execute("ATTACH DATABASE '%s' AS cache" % \
|
self.cur.execute("ATTACH DATABASE '%s' AS cache" % \
|
||||||
CACHE_DB_PATH.replace("'", "''"))
|
CACHE_DB_PATH.replace("'", "''"))
|
||||||
except sqlite.Error, e:
|
except sqlite.Error as e:
|
||||||
log.debug("Failed to attach cache database: %s" % str(e))
|
log.debug("Failed to attach cache database: %s" % str(e))
|
||||||
|
|
||||||
def set_synchronous(self, sync):
|
def set_synchronous(self, sync):
|
||||||
|
@ -160,7 +160,7 @@ class Logger:
|
||||||
self.cur.execute("PRAGMA synchronous = NORMAL")
|
self.cur.execute("PRAGMA synchronous = NORMAL")
|
||||||
else:
|
else:
|
||||||
self.cur.execute("PRAGMA synchronous = OFF")
|
self.cur.execute("PRAGMA synchronous = OFF")
|
||||||
except sqlite.Error, e:
|
except sqlite.Error as e:
|
||||||
log.debug("Failed to set_synchronous(%s): %s" % (sync, str(e)))
|
log.debug("Failed to set_synchronous(%s): %s" % (sync, str(e)))
|
||||||
|
|
||||||
def init_vars(self):
|
def init_vars(self):
|
||||||
|
@ -170,15 +170,15 @@ class Logger:
|
||||||
def _really_commit(self):
|
def _really_commit(self):
|
||||||
try:
|
try:
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
print >> sys.stderr, str(e)
|
print(str(e), file=sys.stderr)
|
||||||
self.commit_timout_id = None
|
self.commit_timout_id = None
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _timeout_commit(self):
|
def _timeout_commit(self):
|
||||||
if self.commit_timout_id:
|
if self.commit_timout_id:
|
||||||
return
|
return
|
||||||
self.commit_timout_id = gobject.timeout_add(500, self._really_commit)
|
self.commit_timout_id = GLib.timeout_add(500, self._really_commit)
|
||||||
|
|
||||||
def simple_commit(self, sql_to_commit):
|
def simple_commit(self, sql_to_commit):
|
||||||
"""
|
"""
|
||||||
|
@ -190,7 +190,7 @@ class Logger:
|
||||||
def get_jids_already_in_db(self):
|
def get_jids_already_in_db(self):
|
||||||
try:
|
try:
|
||||||
self.cur.execute('SELECT jid FROM jids')
|
self.cur.execute('SELECT jid FROM jids')
|
||||||
# list of tupples: [(u'aaa@bbb',), (u'cc@dd',)]
|
# list of tupples: [('aaa@bbb',), ('cc@dd',)]
|
||||||
rows = self.cur.fetchall()
|
rows = self.cur.fetchall()
|
||||||
except sqlite.DatabaseError:
|
except sqlite.DatabaseError:
|
||||||
raise exceptions.DatabaseMalformed
|
raise exceptions.DatabaseMalformed
|
||||||
|
@ -258,11 +258,11 @@ class Logger:
|
||||||
self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)', (jid,
|
self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)', (jid,
|
||||||
typ))
|
typ))
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
except sqlite.IntegrityError, e:
|
except sqlite.IntegrityError:
|
||||||
# Jid already in DB, maybe added by another instance. re-read DB
|
# Jid already in DB, maybe added by another instance. re-read DB
|
||||||
self.get_jids_already_in_db()
|
self.get_jids_already_in_db()
|
||||||
return self.get_jid_id(jid, typestr)
|
return self.get_jid_id(jid, typestr)
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
jid_id = self.cur.lastrowid
|
jid_id = self.cur.lastrowid
|
||||||
self.jids_already_in.append(jid)
|
self.jids_already_in.append(jid)
|
||||||
|
@ -413,15 +413,15 @@ class Logger:
|
||||||
self.cur.execute(sql, values)
|
self.cur.execute(sql, values)
|
||||||
except sqlite.DatabaseError:
|
except sqlite.DatabaseError:
|
||||||
raise exceptions.DatabaseMalformed
|
raise exceptions.DatabaseMalformed
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
message_id = None
|
message_id = None
|
||||||
if write_unread:
|
if write_unread:
|
||||||
try:
|
try:
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
message_id = self.cur.lastrowid
|
message_id = self.cur.lastrowid
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
print >> sys.stderr, str(e)
|
print(str(e), file=sys.stderr)
|
||||||
else:
|
else:
|
||||||
self._timeout_commit()
|
self._timeout_commit()
|
||||||
if message_id:
|
if message_id:
|
||||||
|
@ -528,7 +528,7 @@ class Logger:
|
||||||
# status for roster items
|
# status for roster items
|
||||||
try:
|
try:
|
||||||
jid_id = self.get_jid_id(jid)
|
jid_id = self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
if show is None: # show is None (xmpp), but we say that 'online'
|
if show is None: # show is None (xmpp), but we say that 'online'
|
||||||
show_col = constants.SHOW_ONLINE
|
show_col = constants.SHOW_ONLINE
|
||||||
|
@ -541,7 +541,7 @@ class Logger:
|
||||||
try:
|
try:
|
||||||
# re-get jid_id for the new jid
|
# re-get jid_id for the new jid
|
||||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
contact_name_col = nick
|
contact_name_col = nick
|
||||||
|
|
||||||
|
@ -555,13 +555,13 @@ class Logger:
|
||||||
try:
|
try:
|
||||||
# re-get jid_id for the new jid
|
# re-get jid_id for the new jid
|
||||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
contact_name_col = nick
|
contact_name_col = nick
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
jid_id = self.get_jid_id(jid)
|
jid_id = self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
if kind == 'chat_msg_recv':
|
if kind == 'chat_msg_recv':
|
||||||
if not self.jid_is_from_pm(jid):
|
if not self.jid_is_from_pm(jid):
|
||||||
|
@ -586,7 +586,7 @@ class Logger:
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
self.get_jid_id(jid)
|
self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return []
|
return []
|
||||||
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
||||||
|
@ -630,7 +630,7 @@ class Logger:
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
self.get_jid_id(jid)
|
self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return []
|
return []
|
||||||
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
||||||
|
@ -659,14 +659,14 @@ class Logger:
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
self.get_jid_id(jid)
|
self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if False: # query.startswith('SELECT '): # it's SQL query (FIXME)
|
if False: # query.startswith('SELECT '): # it's SQL query (FIXME)
|
||||||
try:
|
try:
|
||||||
self.cur.execute(query)
|
self.cur.execute(query)
|
||||||
except sqlite.OperationalError, e:
|
except sqlite.OperationalError as e:
|
||||||
results = [('', '', '', '', str(e))]
|
results = [('', '', '', '', str(e))]
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
@ -700,7 +700,7 @@ class Logger:
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
self.get_jid_id(jid)
|
self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return []
|
return []
|
||||||
days_with_logs = []
|
days_with_logs = []
|
||||||
|
@ -742,7 +742,7 @@ class Logger:
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return None
|
return None
|
||||||
where_sql = 'jid_id = ?'
|
where_sql = 'jid_id = ?'
|
||||||
|
@ -768,7 +768,7 @@ class Logger:
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
# Error trying to create a new jid_id. This means there is no log
|
# Error trying to create a new jid_id. This means there is no log
|
||||||
return None
|
return None
|
||||||
where_sql = 'jid_id = %s' % jid_id
|
where_sql = 'jid_id = %s' % jid_id
|
||||||
|
@ -808,7 +808,7 @@ class Logger:
|
||||||
for user in family:
|
for user in family:
|
||||||
try:
|
try:
|
||||||
jid_id = self.get_jid_id(user['jid'])
|
jid_id = self.get_jid_id(user['jid'])
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError:
|
||||||
continue
|
continue
|
||||||
where_sql += 'jid_id = ?'
|
where_sql += 'jid_id = ?'
|
||||||
jid_tuple += (jid_id,)
|
jid_tuple += (jid_id,)
|
||||||
|
@ -890,8 +890,7 @@ class Logger:
|
||||||
# ..., 'FEAT', feature1, feature2, ...).join(' '))
|
# ..., 'FEAT', feature1, feature2, ...).join(' '))
|
||||||
# NOTE: if there's a need to do more gzip, put that to a function
|
# NOTE: if there's a need to do more gzip, put that to a function
|
||||||
try:
|
try:
|
||||||
data = GzipFile(fileobj=StringIO(str(data))).read().decode(
|
data = GzipFile(fileobj=BytesIO(data)).read().decode('utf-8').split('\0')
|
||||||
'utf-8').split('\0')
|
|
||||||
except IOError:
|
except IOError:
|
||||||
# This data is corrupted. It probably contains non-ascii chars
|
# This data is corrupted. It probably contains non-ascii chars
|
||||||
to_be_removed.append((hash_method, hash_))
|
to_be_removed.append((hash_method, hash_))
|
||||||
|
@ -931,16 +930,15 @@ class Logger:
|
||||||
data.extend(features)
|
data.extend(features)
|
||||||
data = '\0'.join(data)
|
data = '\0'.join(data)
|
||||||
# if there's a need to do more gzip, put that to a function
|
# if there's a need to do more gzip, put that to a function
|
||||||
string = StringIO()
|
string = BytesIO()
|
||||||
gzip = GzipFile(fileobj=string, mode='w')
|
gzip = GzipFile(fileobj=string, mode='w')
|
||||||
data = data.encode('utf-8') # the gzip module can't handle unicode objects
|
gzip.write(data.encode('utf-8'))
|
||||||
gzip.write(data)
|
|
||||||
gzip.close()
|
gzip.close()
|
||||||
data = string.getvalue()
|
data = string.getvalue()
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
INSERT INTO caps_cache ( hash_method, hash, data, last_seen )
|
INSERT INTO caps_cache ( hash_method, hash, data, last_seen )
|
||||||
VALUES (?, ?, ?, ?);
|
VALUES (?, ?, ?, ?);
|
||||||
''', (hash_method, hash_, buffer(data), int(time.time())))
|
''', (hash_method, hash_, memoryview(data), int(time.time())))
|
||||||
# (1) -- note above
|
# (1) -- note above
|
||||||
self._timeout_commit()
|
self._timeout_commit()
|
||||||
|
|
||||||
|
@ -996,7 +994,7 @@ class Logger:
|
||||||
try:
|
try:
|
||||||
account_jid_id = self.get_jid_id(account_jid)
|
account_jid_id = self.get_jid_id(account_jid)
|
||||||
jid_id = self.get_jid_id(jid)
|
jid_id = self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
'DELETE FROM roster_group WHERE account_jid_id=? AND jid_id=?',
|
'DELETE FROM roster_group WHERE account_jid_id=? AND jid_id=?',
|
||||||
|
@ -1018,7 +1016,7 @@ class Logger:
|
||||||
try:
|
try:
|
||||||
account_jid_id = self.get_jid_id(account_jid)
|
account_jid_id = self.get_jid_id(account_jid)
|
||||||
jid_id = self.get_jid_id(jid)
|
jid_id = self.get_jid_id(jid)
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
raise exceptions.PysqliteOperationalError(str(e))
|
raise exceptions.PysqliteOperationalError(str(e))
|
||||||
|
|
||||||
# Update groups information
|
# Update groups information
|
||||||
|
@ -1054,6 +1052,8 @@ class Logger:
|
||||||
FROM roster_entry re, jids j
|
FROM roster_entry re, jids j
|
||||||
WHERE re.account_jid_id=? AND j.jid_id=re.jid_id''', (account_jid_id,))
|
WHERE re.account_jid_id=? AND j.jid_id=re.jid_id''', (account_jid_id,))
|
||||||
for jid, jid_id, name, subscription, ask in self.cur:
|
for jid, jid_id, name, subscription, ask in self.cur:
|
||||||
|
jid = jid
|
||||||
|
name = name
|
||||||
data[jid] = {}
|
data[jid] = {}
|
||||||
if name:
|
if name:
|
||||||
data[jid]['name'] = name
|
data[jid]['name'] = name
|
||||||
|
@ -1077,6 +1077,7 @@ class Logger:
|
||||||
WHERE account_jid_id=? AND jid_id=?''',
|
WHERE account_jid_id=? AND jid_id=?''',
|
||||||
(account_jid_id, data[jid]['id']))
|
(account_jid_id, data[jid]['id']))
|
||||||
for (group_name,) in self.cur:
|
for (group_name,) in self.cur:
|
||||||
|
group_name = group_name
|
||||||
data[jid]['groups'].append(group_name)
|
data[jid]['groups'].append(group_name)
|
||||||
del data[jid]['id']
|
del data[jid]['id']
|
||||||
|
|
||||||
|
@ -1155,7 +1156,7 @@ class Logger:
|
||||||
# when we quit this muc
|
# when we quit this muc
|
||||||
obj.conn.last_history_time[obj.jid] = tim_f
|
obj.conn.last_history_time[obj.jid] = tim_f
|
||||||
|
|
||||||
except exceptions.PysqliteOperationalError, e:
|
except exceptions.PysqliteOperationalError as e:
|
||||||
obj.conn.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
obj.conn.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
||||||
except exceptions.DatabaseMalformed:
|
except exceptions.DatabaseMalformed:
|
||||||
pritext = _('Database Error')
|
pritext = _('Database Error')
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
##
|
##
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import i18n
|
from common import i18n
|
||||||
|
|
||||||
def parseLogLevel(arg):
|
def parseLogLevel(arg):
|
||||||
"""
|
"""
|
||||||
|
@ -30,7 +30,7 @@ def parseLogLevel(arg):
|
||||||
elif arg.isupper() and hasattr(logging, arg):
|
elif arg.isupper() and hasattr(logging, arg):
|
||||||
return getattr(logging, arg)
|
return getattr(logging, arg)
|
||||||
else:
|
else:
|
||||||
print _('%s is not a valid loglevel') % repr(arg)
|
print(_('%s is not a valid loglevel') % repr(arg))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def parseLogTarget(arg):
|
def parseLogTarget(arg):
|
||||||
|
@ -72,7 +72,7 @@ def parseAndSetLogLevels(arg):
|
||||||
target = parseLogTarget(target.strip())
|
target = parseLogTarget(target.strip())
|
||||||
if target:
|
if target:
|
||||||
logging.getLogger(target).setLevel(level)
|
logging.getLogger(target).setLevel(level)
|
||||||
print "Logger %s level set to %d" % (target, level)
|
print("Logger %s level set to %d" % (target, level))
|
||||||
|
|
||||||
|
|
||||||
class colors:
|
class colors:
|
||||||
|
@ -141,7 +141,7 @@ def init(use_color=False):
|
||||||
consoleloghandler.setFormatter(
|
consoleloghandler.setFormatter(
|
||||||
FancyFormatter(
|
FancyFormatter(
|
||||||
'%(asctime)s %(levelname)s %(name)s %(message)s',
|
'%(asctime)s %(levelname)s %(name)s %(message)s',
|
||||||
'%H:%M:%S',
|
'%x %H:%M:%S',
|
||||||
use_color
|
use_color
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -179,13 +179,13 @@ if __name__ == '__main__':
|
||||||
log = logging.getLogger('gajim')
|
log = logging.getLogger('gajim')
|
||||||
log.debug('debug')
|
log.debug('debug')
|
||||||
log.info('info')
|
log.info('info')
|
||||||
log.warn('warn')
|
log.warning('warn')
|
||||||
log.error('error')
|
log.error('error')
|
||||||
log.critical('critical')
|
log.critical('critical')
|
||||||
|
|
||||||
log = logging.getLogger('gajim.c.x.dispatcher')
|
log = logging.getLogger('gajim.c.x.dispatcher')
|
||||||
log.debug('debug')
|
log.debug('debug')
|
||||||
log.info('info')
|
log.info('info')
|
||||||
log.warn('warn')
|
log.warning('warn')
|
||||||
log.error('error')
|
log.error('error')
|
||||||
log.critical('critical')
|
log.critical('critical')
|
||||||
|
|
|
@ -96,7 +96,7 @@ class ConnectionArchive:
|
||||||
|
|
||||||
def get_item_pref(self, jid):
|
def get_item_pref(self, jid):
|
||||||
jid = nbxmpp.JID(jid)
|
jid = nbxmpp.JID(jid)
|
||||||
if unicode(jid) in self.items:
|
if str(jid) in self.items:
|
||||||
return self.items[jid]
|
return self.items[jid]
|
||||||
|
|
||||||
if jid.getStripped() in self.items:
|
if jid.getStripped() in self.items:
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue