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>
|
||||
<ul>
|
||||
<li>python2.5 or higher</li>
|
||||
<li>pygtk2.22 or higher</li>
|
||||
<li>python2.7 or higher</li>
|
||||
<li>python-gi</li>
|
||||
<li>gir1.2-gtk-3.0</li>
|
||||
<li>python-nbxmpp</li>
|
||||
</ul>
|
||||
|
||||
|
@ -28,7 +29,7 @@
|
|||
<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>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>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>
|
||||
|
|
|
@ -22,6 +22,9 @@ rename exe.win32-2.7 bin
|
|||
copy ..\LIBEAY32.dll bin
|
||||
copy ..\SSLEAY32.dll bin
|
||||
|
||||
REM for snarl plugin
|
||||
xcopy ..\win32com bin\win32com /e /i
|
||||
|
||||
mkdir bin\gtk
|
||||
cd ../src/gtk
|
||||
hg archive ..\..\gajim_built\bin\gtk
|
||||
|
|
|
@ -12,7 +12,9 @@ soundsdir = $(pkgdatadir)/data/sounds
|
|||
sounds_DATA = $(srcdir)/sounds/*.wav
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="image">image4</property>
|
||||
|
@ -93,7 +93,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="image">image8</property>
|
||||
|
|
|
@ -1,31 +1,54 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">12</property>
|
||||
<property name="title" translatable="yes">Gajim: Account Creation Wizard</property>
|
||||
<property name="resizable">False</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>
|
||||
<object class="GtkVBox" id="vbox77">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkNotebook" id="notebook">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_tabs">False</property>
|
||||
<property name="show_border">False</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox78">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label256">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">You need to have an account in order to connect
|
||||
to the Jabber network.</property>
|
||||
|
@ -39,18 +62,20 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkFrame" id="frame33">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment68">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="top_padding">5</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox83">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<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="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -74,6 +100,7 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">use_existing_account_radiobutton</property>
|
||||
</object>
|
||||
|
@ -90,6 +117,7 @@ to the Jabber network.</property>
|
|||
<child type="label">
|
||||
<object class="GtkLabel" id="label269">
|
||||
<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="use_markup">True</property>
|
||||
</object>
|
||||
|
@ -106,6 +134,7 @@ to the Jabber network.</property>
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label259">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="tab_fill">False</property>
|
||||
|
@ -114,12 +143,13 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkVBox" id="register_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label270">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</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="use_markup">True</property>
|
||||
|
@ -133,25 +163,30 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkTable" id="table27">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">4</property>
|
||||
<property name="column_spacing">12</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="username_entry">
|
||||
<property name="visible">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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label263">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Password:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -161,7 +196,7 @@ to the Jabber network.</property>
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</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="use_underline">True</property>
|
||||
<property name="focus_on_click">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="active">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>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
|
@ -183,7 +219,7 @@ to the Jabber network.</property>
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -198,12 +234,13 @@ to the Jabber network.</property>
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label262">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Jabber ID:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -211,30 +248,20 @@ to the Jabber network.</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label">@</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
</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>
|
||||
<property name="x_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -244,8 +271,9 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -260,6 +288,7 @@ to the Jabber network.</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -271,6 +300,7 @@ to the Jabber network.</property>
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label261">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
|
@ -280,12 +310,13 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkVBox" id="vbox105">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label368">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes"><b>Please select a server</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
|
@ -299,10 +330,12 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkHBox" id="hbox2997">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label369">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Server:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -313,14 +346,6 @@ to the Jabber network.</property>
|
|||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="server_comboboxentry1">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -335,10 +360,12 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -349,6 +376,7 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkTable" id="table32">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">3</property>
|
||||
|
@ -357,18 +385,20 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkLabel" id="label381">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Prox_y:</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="proxies_combobox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">liststore1</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext1"/>
|
||||
|
@ -390,13 +420,13 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
<property name="x_options"/>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -406,24 +436,27 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</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>
|
||||
<packing>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="custom_host_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label380">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Hostname:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -441,12 +474,15 @@ to the Jabber network.</property>
|
|||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label379">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Port:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -467,6 +503,7 @@ to the Jabber network.</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -484,12 +521,15 @@ to the Jabber network.</property>
|
|||
<child type="label">
|
||||
<object class="GtkLabel" id="label378">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Advanced</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -501,6 +541,7 @@ to the Jabber network.</property>
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label367">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
|
@ -510,34 +551,41 @@ to the Jabber network.</property>
|
|||
<child>
|
||||
<object class="GtkVBox" id="ssl_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<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>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1">
|
||||
<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="stock">gtk-dialog-warning</property>
|
||||
<property name="icon-size">5</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="ssl_label">
|
||||
<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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
|
@ -551,9 +599,11 @@ SHA1 fingerprint of the certificate:
|
|||
<property name="can_focus">True</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="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
|
@ -566,6 +616,7 @@ SHA1 fingerprint of the certificate:
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label482">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
|
@ -575,7 +626,7 @@ SHA1 fingerprint of the certificate:
|
|||
<child>
|
||||
<object class="GtkVBox" id="form_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
|
@ -587,6 +638,7 @@ SHA1 fingerprint of the certificate:
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label382">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">4</property>
|
||||
|
@ -596,10 +648,11 @@ SHA1 fingerprint of the certificate:
|
|||
<child>
|
||||
<object class="GtkVBox" id="vbox104">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="progressbar_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><b>Connecting to server</b>
|
||||
|
||||
Please wait...</property>
|
||||
|
@ -607,6 +660,7 @@ Please wait...</property>
|
|||
<property name="justify">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
|
@ -614,6 +668,7 @@ Please wait...</property>
|
|||
<child>
|
||||
<object class="GtkProgressBar" id="progressbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="pulse_step">0.10000000149</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -630,6 +685,7 @@ Please wait...</property>
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label365">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">5</property>
|
||||
|
@ -639,14 +695,16 @@ Please wait...</property>
|
|||
<child>
|
||||
<object class="GtkVBox" id="vbox103">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2986">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="finish_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -658,16 +716,21 @@ Please wait...</property>
|
|||
<child>
|
||||
<object class="GtkLabel" id="finish_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0.10000000149011612</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="wrap">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">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -678,6 +741,7 @@ Please wait...</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
|
@ -694,6 +758,7 @@ Please wait...</property>
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
|
@ -711,6 +776,7 @@ Please wait...</property>
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label286">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">6</property>
|
||||
|
@ -719,12 +785,15 @@ Please wait...</property>
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox19">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
|
@ -735,7 +804,7 @@ Please wait...</property>
|
|||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -752,7 +821,7 @@ Please wait...</property>
|
|||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -769,7 +838,7 @@ Please wait...</property>
|
|||
<property name="has_default">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -779,47 +848,14 @@ Please wait...</property>
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="advanced_button">
|
||||
<property name="label" translatable="yes">_Advanced</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<signal name="clicked" handler="on_advanced_button_clicked"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment96">
|
||||
<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>
|
||||
<property name="image">image2</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="clicked" handler="on_advanced_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -829,47 +865,14 @@ Please wait...</property>
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="finish_button">
|
||||
<property name="label" translatable="yes">_Finish</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<signal name="clicked" handler="on_finish_button_clicked"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment87">
|
||||
<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>
|
||||
<property name="image">image3</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="clicked" handler="on_finish_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -880,21 +883,25 @@ Please wait...</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore1">
|
||||
<object class="GtkListStore" id="server_liststore">
|
||||
<columns>
|
||||
<!-- column-name item -->
|
||||
<!-- column-name gchararray1 -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0" translatable="yes">None</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkEntryCompletion" id="server_entrycompletion">
|
||||
<property name="model">server_liststore</property>
|
||||
<property name="text_column">0</property>
|
||||
</object>
|
||||
<object class="GtkEntryCompletion" id="server_entrycompletion1">
|
||||
<property name="model">server_liststore</property>
|
||||
<property name="text_column">0</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -63,42 +63,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_button">
|
||||
<property name="label" translatable="yes">Add</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -107,42 +79,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="remove_button">
|
||||
<property name="label" translatable="yes">Delete</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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="image">image2</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -151,46 +95,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="rename_button">
|
||||
<property name="label" translatable="yes">Re_name</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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="image">rename_image</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -225,7 +137,7 @@
|
|||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<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="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
|
@ -520,6 +432,7 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<signal name="focus_out_event" handler="on_cert_entry1_focus_out_event"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
|
@ -531,6 +444,7 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">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"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -1120,7 +1034,7 @@
|
|||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<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="can_focus">True</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="page_increment">5</property>
|
||||
</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>
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkWindow" id="add_new_contact_window">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Add New Contact</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<signal name="destroy" handler="on_add_new_contact_window_destroy"/>
|
||||
<signal name="key_press_event" handler="on_add_new_contact_window_key_press_event"/>
|
||||
<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" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox8">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="prompt_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -27,10 +28,12 @@
|
|||
<child>
|
||||
<object class="GtkHBox" id="account_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="account_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">A_ccount:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -44,8 +47,9 @@
|
|||
<child>
|
||||
<object class="GtkComboBox" id="account_combobox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</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>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext3"/>
|
||||
<attributes>
|
||||
|
@ -64,16 +68,20 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="protocol_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="protocol_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Protocol:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -88,7 +96,8 @@
|
|||
<child>
|
||||
<object class="GtkComboBox" id="protocol_combobox">
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -99,9 +108,10 @@
|
|||
<child>
|
||||
<object class="GtkComboBox" id="protocol_jid_combobox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</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>
|
||||
<object class="GtkCellRendererText" id="cellrenderertext2"/>
|
||||
<attributes>
|
||||
|
@ -110,17 +120,22 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="subscription_table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="n_rows">3</property>
|
||||
|
@ -130,6 +145,7 @@
|
|||
<child>
|
||||
<object class="GtkLabel" id="uid_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_User ID:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -137,7 +153,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -145,16 +161,18 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="activates_default">True</property>
|
||||
<property name="placeholder_text">Type User ID</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label188">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Nickname:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -164,7 +182,7 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -172,18 +190,20 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="activates_default">True</property>
|
||||
<property name="placeholder_text">Type Nickname</property>
|
||||
</object>
|
||||
<packing>
|
||||
<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"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label223">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">_Group:</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -192,37 +212,48 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="group_comboboxentry">
|
||||
<object class="GtkComboBoxText" id="group_comboboxentry">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">groups_liststore</property>
|
||||
<property name="text_column">0</property>
|
||||
<property name="can_focus">False</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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="auto_authorize_checkbutton">
|
||||
<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="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
|
@ -238,9 +269,8 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="no_show_all">True</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="min_content_height">5</property>
|
||||
<child>
|
||||
<object class="GtkTextView" id="message_textview">
|
||||
<property name="visible">True</property>
|
||||
|
@ -251,30 +281,39 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="save_message_checkbutton">
|
||||
<property name="label" translatable="yes">_Save subscription message</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="register_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label224">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">You have to register with this transport
|
||||
to be able to add a contact from this
|
||||
|
@ -283,18 +322,22 @@ proceed.</property>
|
|||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="register_button">
|
||||
<property name="label" translatable="yes">_Register</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_underline">True</property>
|
||||
<signal name="clicked" handler="on_register_button_clicked"/>
|
||||
<signal name="clicked" handler="on_register_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -304,12 +347,15 @@ proceed.</property>
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="connected_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="label" translatable="yes">You must be connected to the transport to be able
|
||||
to add a contact from this protocol.</property>
|
||||
|
@ -323,18 +369,21 @@ to add a contact from this protocol.</property>
|
|||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="spacing">12</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>
|
||||
<signal name="clicked" handler="on_cancel_button_clicked"/>
|
||||
<signal name="clicked" handler="on_cancel_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -345,13 +394,15 @@ to add a contact from this protocol.</property>
|
|||
<child>
|
||||
<object class="GtkButton" id="add_button">
|
||||
<property name="label">gtk-add</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>
|
||||
<signal name="clicked" handler="on_add_button_clicked"/>
|
||||
<signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -369,9 +420,6 @@ to add a contact from this protocol.</property>
|
|||
</object>
|
||||
</child>
|
||||
</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">
|
||||
<columns>
|
||||
<!-- column-name item -->
|
||||
|
@ -390,4 +438,7 @@ to add a contact from this protocol.</property>
|
|||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkTextBuffer" id="textbuffer1">
|
||||
<property name="text" translatable="yes">I would like to add you to my contact list.</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</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="default_width">650</property>
|
||||
<property name="default_height">540</property>
|
||||
|
|
|
@ -38,47 +38,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="remove_button">
|
||||
<property name="label" translatable="yes">_Unblock</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</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"/>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -89,4 +56,8 @@
|
|||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -1,39 +1,88 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkDialog" id="change_status_message_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</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>
|
||||
<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">
|
||||
<object class="GtkVBox" id="dialog-vbox5">
|
||||
<object class="GtkBox" id="dialog-vbox5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</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>
|
||||
<object class="GtkFrame" id="frame38">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment107">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox112">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow24">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<object class="GtkTextView" id="message_textview">
|
||||
|
@ -45,33 +94,41 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox33">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="save_as_preset_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</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>
|
||||
<object class="GtkAlignment" id="alignment106">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xscale">0</property>
|
||||
<property name="yscale">0</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3021">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1369">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save-as</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -83,6 +140,7 @@
|
|||
<child>
|
||||
<object class="GtkLabel" id="label380">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Save as Preset...</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
|
@ -106,44 +164,53 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTable" id="under_table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="mood_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="mood_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</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="mood_button_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -155,35 +222,44 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="activity_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="activity_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</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="activity_button_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -195,11 +271,13 @@
|
|||
<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>
|
||||
<object class="GtkLabel" id="mood_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Mood:</property>
|
||||
</object>
|
||||
|
@ -207,11 +285,13 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="activity_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Activity:</property>
|
||||
</object>
|
||||
|
@ -219,31 +299,37 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="message_combobox">
|
||||
<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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label165">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Preset messages:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -254,63 +340,19 @@
|
|||
<child type="label">
|
||||
<object class="GtkLabel" id="label383">
|
||||
<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="use_markup">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</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>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-6">cancel_button</action-widget>
|
||||
<action-widget response="-5">ok_button</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -75,7 +75,7 @@ Select the contacts you want to invite</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="server_list_comboboxentry">
|
||||
<object class="GtkComboBox" id="server_list_comboboxentry">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -122,46 +122,13 @@ Select the contacts you want to invite</property>
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="invite_button">
|
||||
<property name="label" translatable="yes">In_vite</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</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"/>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -179,4 +146,8 @@ Select the contacts you want to invite</property>
|
|||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-jump-to</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -1,50 +1,105 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkDialog" id="dubbleinput_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="has_separator">False</property>
|
||||
<signal name="destroy" handler="on_dubbleinput_dialog_destroy"/>
|
||||
<signal name="destroy" handler="on_dubbleinput_dialog_destroy" swapped="no"/>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox10">
|
||||
<object class="GtkBox" id="dialog-vbox10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</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>
|
||||
<object class="GtkVBox" id="vbox76">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</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="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="label1">
|
||||
<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>
|
||||
|
@ -63,6 +118,7 @@
|
|||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -82,50 +138,10 @@
|
|||
</packing>
|
||||
</child>
|
||||
</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>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -1,41 +1,77 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkDialog" id="edit_groups_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Edit Groups</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="default_height">290</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">
|
||||
<object class="GtkVBox" id="dialog-vbox6">
|
||||
<object class="GtkBox" id="dialog-vbox6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="nickname_label">
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="dialog-action_area5">
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="jid_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2926">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="group_entry">
|
||||
|
@ -44,19 +80,23 @@
|
|||
<property name="activates_default">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_button">
|
||||
<property name="label">gtk-add</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>
|
||||
<signal name="clicked" handler="on_add_button_clicked"/>
|
||||
<signal name="clicked" handler="on_add_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -75,47 +115,24 @@
|
|||
<object class="GtkScrolledWindow" id="scrolledwindow32">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="groups_treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</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>
|
||||
</child>
|
||||
<action-widgets>
|
||||
|
|
|
@ -1,93 +1,46 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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="border_width">5</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox1">
|
||||
<object class="GtkBox" id="dialog-vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</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">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<object class="GtkButtonBox" id="dialog-action_area1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="verify_now_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</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>
|
||||
<object class="GtkAlignment" id="alignment2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xscale">0</property>
|
||||
<property name="yscale">0</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-apply</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -99,6 +52,7 @@
|
|||
<child>
|
||||
<object class="GtkLabel" id="button_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Verify</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
|
@ -122,11 +76,13 @@
|
|||
<child>
|
||||
<object class="GtkButton" id="close_button3">
|
||||
<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="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -137,10 +93,74 @@
|
|||
</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>
|
||||
<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>
|
||||
</child>
|
||||
<action-widgets>
|
||||
|
|
|
@ -41,11 +41,11 @@
|
|||
</object>
|
||||
</child>
|
||||
<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="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="row_activated" handler="on_transfers_list_row_activated"/>
|
||||
<signal name="leave_notify_event" handler="on_transfers_list_leave_notify_event"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -81,12 +81,15 @@
|
|||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="cleanup_button">
|
||||
<property name="label" translatable="yes">Clean _up</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="cleanup_button-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes">Remove file transfer from the list.</property>
|
||||
|
@ -94,42 +97,6 @@
|
|||
</object>
|
||||
</child>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -139,48 +106,15 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pause_restore_button">
|
||||
<property name="label" translatable="yes">_Pause</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</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"/>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -252,7 +186,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
|
@ -262,7 +196,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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_stock">True</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
|
@ -285,7 +219,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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_stock">True</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
|
@ -294,4 +228,12 @@
|
|||
</child>
|
||||
</object>
|
||||
<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>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
<object class="GtkWindow" id="gajim_themes_window">
|
||||
<property name="border_width">12</property>
|
||||
<property name="title" translatable="yes">Gajim Themes Customization</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox97">
|
||||
|
@ -64,6 +65,7 @@
|
|||
<object class="GtkHButtonBox" id="hbuttonbox27">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="layout_style">center</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_button">
|
||||
<property name="label">gtk-add</property>
|
||||
|
@ -148,7 +150,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -165,7 +167,7 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -182,7 +184,7 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -197,7 +199,7 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -211,8 +213,8 @@
|
|||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
<property name="x_options"/>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -228,8 +230,8 @@
|
|||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
<property name="x_options"/>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -247,7 +249,7 @@
|
|||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -269,8 +271,8 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
<property name="x_options"/>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -292,8 +294,8 @@
|
|||
<property name="right_attach">3</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options"></property>
|
||||
<property name="y_options"></property>
|
||||
<property name="x_options"/>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -348,7 +350,7 @@
|
|||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -364,7 +366,7 @@
|
|||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -380,7 +382,7 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -393,7 +395,7 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -406,7 +408,7 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -422,7 +424,7 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -435,7 +437,7 @@
|
|||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -448,7 +450,7 @@
|
|||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -464,7 +466,7 @@
|
|||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -478,7 +480,7 @@ Messages</property>
|
|||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -494,7 +496,7 @@ Messages</property>
|
|||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -520,7 +522,7 @@ Messages</property>
|
|||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -536,7 +538,7 @@ Messages</property>
|
|||
<property name="top_attach">8</property>
|
||||
<property name="bottom_attach">9</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
|
|
@ -1,29 +1,31 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy project-wide -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkHBox" id="groupchat_control_hbox">
|
||||
<property name="can_focus">True</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="groupchat_control_vbox">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="border_width">3</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="bottom_padding">1</property>
|
||||
<property name="left_padding">3</property>
|
||||
<property name="right_padding">3</property>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="banner_eventbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3024">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="gc_banner_status_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -36,34 +38,42 @@
|
|||
<child>
|
||||
<object class="GtkVBox" id="banner_vbox">
|
||||
<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="border_width">5</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="banner_name_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label"><span weight="heavy" size="large">room jid</span></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="banner_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label">label</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="selectable">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">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -85,12 +95,12 @@
|
|||
<property name="border_width">3</property>
|
||||
<property name="position">495</property>
|
||||
<property name="position_set">True</property>
|
||||
<signal name="notify" handler="on_hpaned_notify"/>
|
||||
<signal name="notify" handler="on_hpaned_notify" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="gc_textviews_vbox">
|
||||
<property name="width_request">0</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="conversation_scrolledwindow">
|
||||
|
@ -98,14 +108,14 @@
|
|||
<property name="height_request">60</property>
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -122,6 +132,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -137,7 +148,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<property name="vscrollbar_policy">automatic</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="list_treeview">
|
||||
|
@ -155,15 +165,19 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="actions_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3023">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="emoticons_button">
|
||||
<property name="visible">True</property>
|
||||
|
@ -176,6 +190,7 @@
|
|||
<child>
|
||||
<object class="GtkImage" id="emoticons_button_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
|
@ -190,6 +205,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -206,6 +222,7 @@
|
|||
<child>
|
||||
<object class="GtkImage" id="image11">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-bold</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
|
@ -213,16 +230,19 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVSeparator" id="vseparator2">
|
||||
<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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -238,6 +258,7 @@
|
|||
<child>
|
||||
<object class="GtkImage" id="image4">
|
||||
<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="stock">gtk-edit</property>
|
||||
<property name="icon-size">1</property>
|
||||
|
@ -262,6 +283,7 @@
|
|||
<child>
|
||||
<object class="GtkImage" id="image6">
|
||||
<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="stock">gtk-properties</property>
|
||||
<property name="icon-size">1</property>
|
||||
|
@ -287,6 +309,7 @@
|
|||
<child>
|
||||
<object class="GtkImage" id="image7">
|
||||
<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="stock">gtk-add</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="relief">none</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image8">
|
||||
<object class="GtkImage" id="history_image">
|
||||
<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="stock">gtk-justify-fill</property>
|
||||
<property name="icon-size">1</property>
|
||||
|
@ -326,10 +350,12 @@
|
|||
<child>
|
||||
<object class="GtkVSeparator" id="vseparator4">
|
||||
<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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -346,11 +372,13 @@
|
|||
<child>
|
||||
<object class="GtkAlignment" id="alignment104">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xscale">0</property>
|
||||
<property name="yscale">0</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1344">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
|
@ -367,65 +395,38 @@
|
|||
<child>
|
||||
<object class="GtkComboBox" id="label_selector">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment2">
|
||||
<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>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="send_button">
|
||||
<property name="label" translatable="yes">_Send</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Send message</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment105">
|
||||
<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>
|
||||
<property name="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -436,13 +437,21 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -212,48 +212,16 @@ If you plan to do massive deletions, please make sure Gajim is not running. Gene
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="search_db_button">
|
||||
<property name="label" translatable="yes">_Search Database</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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image_position">bottom</property>
|
||||
<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>
|
||||
<packing>
|
||||
<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-widgets>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-find</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -1,63 +1,49 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- 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>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkWindow" id="history_window">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Conversation History</property>
|
||||
<property name="role">history</property>
|
||||
<property name="default_width">650</property>
|
||||
<property name="default_height">450</property>
|
||||
<signal name="destroy" handler="on_history_window_destroy"/>
|
||||
<signal name="key_press_event" handler="on_history_window_key_press_event"/>
|
||||
<signal name="destroy" handler="on_history_window_destroy" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_history_window_key_press_event" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">12</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<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="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<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="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="query_combobox">
|
||||
<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="model">liststore1</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_query_combobox_changed"/>
|
||||
<object class="GtkEntry" id="query_entry">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char_set">True</property>
|
||||
<property name="placeholder_text">Enter name / JID of contact or groupchat</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<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="label" translatable="yes">Search:</property>
|
||||
</object>
|
||||
|
@ -68,26 +54,30 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="query_entry">
|
||||
<object class="GtkEntry" id="search_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="search_in_date">
|
||||
<property name="label" translatable="yes">_In date search</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</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="xalign">0.5</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -99,6 +89,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -114,17 +105,18 @@
|
|||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkCalendar" id="calendar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<signal name="month_changed" handler="on_calendar_month_changed"/>
|
||||
<signal name="day_selected" handler="on_calendar_day_selected"/>
|
||||
<signal name="month-changed" handler="on_calendar_month_changed" swapped="no"/>
|
||||
<signal name="day-selected" handler="on_calendar_day_selected" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -141,8 +133,6 @@
|
|||
<object class="GtkScrolledWindow" id="scrolledwindow">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<placeholder/>
|
||||
|
@ -163,15 +153,16 @@
|
|||
<object class="GtkScrolledWindow" id="results_scrolledwindow">
|
||||
<property name="can_focus">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>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="results_treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -182,25 +173,33 @@
|
|||
</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">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<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>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="log_history_checkbutton">
|
||||
<property name="label" translatable="yes">_Log conversation history</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
|
@ -230,23 +229,27 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</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>
|
||||
<signal name="clicked" handler="on_close_button_clicked"/>
|
||||
<signal name="clicked" handler="on_close_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
|
@ -1,51 +1,106 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkDialog" id="input_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="has_separator">False</property>
|
||||
<signal name="destroy" handler="on_input_dialog_destroy"/>
|
||||
<signal name="delete_event" handler="on_input_dialog_delete_event"/>
|
||||
<signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
|
||||
<signal name="delete-event" handler="on_input_dialog_delete_event" swapped="no"/>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox10">
|
||||
<object class="GtkBox" id="dialog-vbox10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</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>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</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="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>
|
||||
|
@ -62,50 +117,10 @@
|
|||
</packing>
|
||||
</child>
|
||||
</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>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -1,89 +1,32 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkDialog" id="input_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="default_width">400</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="has_separator">False</property>
|
||||
<signal name="destroy" handler="on_input_dialog_destroy"/>
|
||||
<signal name="destroy" handler="on_input_dialog_destroy" swapped="no"/>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox10">
|
||||
<object class="GtkBox" id="dialog-vbox10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</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">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area9">
|
||||
<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>
|
||||
|
@ -95,11 +38,13 @@
|
|||
<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>
|
||||
|
@ -111,10 +56,81 @@
|
|||
</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>
|
||||
<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>
|
||||
</child>
|
||||
<action-widgets>
|
||||
|
|
|
@ -1,21 +1,32 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Join Group Chat</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<signal name="destroy" handler="on_join_groupchat_window_destroy"/>
|
||||
<signal name="key_press_event" handler="on_join_groupchat_window_key_press_event"/>
|
||||
<signal name="destroy" handler="on_join_groupchat_window_destroy" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_join_groupchat_window_key_press_event" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox28">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkTable" id="table15">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">8</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">12</property>
|
||||
|
@ -26,14 +37,14 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -41,19 +52,20 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label143">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Room:</property>
|
||||
</object>
|
||||
|
@ -61,12 +73,13 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label142">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Nickname:</property>
|
||||
</object>
|
||||
|
@ -74,12 +87,13 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label225">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Recently:</property>
|
||||
</object>
|
||||
|
@ -87,13 +101,14 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="recently_combobox">
|
||||
<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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -107,6 +122,7 @@
|
|||
<child>
|
||||
<object class="GtkLabel" id="label145">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Password:</property>
|
||||
</object>
|
||||
|
@ -114,7 +130,7 @@
|
|||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -129,7 +145,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -140,6 +156,7 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -147,24 +164,26 @@
|
|||
<property name="top_attach">7</property>
|
||||
<property name="bottom_attach">8</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="account_label">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Account</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="account_combobox">
|
||||
<property name="can_focus">False</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>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
@ -180,20 +199,22 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</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>
|
||||
<packing>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Server:</property>
|
||||
</object>
|
||||
|
@ -205,16 +226,10 @@
|
|||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="server_comboboxentry">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">liststore1</property>
|
||||
<property name="text_column">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="browse_rooms_button">
|
||||
|
@ -224,9 +239,12 @@
|
|||
<property name="receives_default">True</property>
|
||||
<property name="image">image1</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -242,12 +260,14 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
|
@ -258,7 +278,7 @@
|
|||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -268,48 +288,15 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="join_button">
|
||||
<property name="label" translatable="yes">_Join</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>
|
||||
<signal name="clicked" handler="on_join_button_clicked"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment25">
|
||||
<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>
|
||||
<property name="image">image2</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="clicked" handler="on_join_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -320,6 +307,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
|
@ -327,14 +315,4 @@
|
|||
</object>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<object class="GtkHButtonBox" id="hbuttonbox25">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="layout_style">end</property>
|
||||
<property name="layout_style">center</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_bookmark_button">
|
||||
<property name="label">gtk-add</property>
|
||||
|
@ -113,7 +113,7 @@
|
|||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -128,7 +128,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -142,7 +142,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -156,7 +156,7 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -170,7 +170,7 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -184,7 +184,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -198,7 +198,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -212,7 +212,7 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -224,7 +224,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -236,7 +236,7 @@
|
|||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -250,7 +250,7 @@
|
|||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
|
|
@ -55,38 +55,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="configure_button">
|
||||
<property name="label" translatable="yes">_Configure</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -120,4 +96,8 @@
|
|||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-preferences</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
<object class="GtkWindow" id="manage_proxies_window">
|
||||
<property name="border_width">12</property>
|
||||
<property name="title" translatable="yes">Manage Proxy Profiles</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<signal name="destroy" handler="on_manage_proxies_window_destroy"/>
|
||||
<child>
|
||||
|
@ -63,7 +64,7 @@
|
|||
<object class="GtkHButtonBox" id="hbuttonbox21">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="layout_style">end</property>
|
||||
<property name="layout_style">center</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_proxy_button">
|
||||
<property name="label">gtk-add</property>
|
||||
|
@ -137,7 +138,7 @@
|
|||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -172,7 +173,7 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -185,7 +186,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -237,7 +238,7 @@
|
|||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -249,7 +250,7 @@
|
|||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -262,7 +263,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -280,7 +281,7 @@
|
|||
<property name="top_attach">4</property>
|
||||
<property name="bottom_attach">5</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -294,7 +295,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -309,7 +310,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -324,7 +325,7 @@
|
|||
<property name="top_attach">5</property>
|
||||
<property name="bottom_attach">6</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -339,7 +340,7 @@
|
|||
<property name="top_attach">6</property>
|
||||
<property name="bottom_attach">7</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -354,7 +355,7 @@
|
|||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -368,7 +369,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -382,7 +383,7 @@
|
|||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -397,7 +398,7 @@
|
|||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<property name="height_request">350</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Manage sounds</property>
|
||||
<property name="window_position">center-on-parent</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<signal name="delete_event" handler="on_manage_sounds_window_delete_event"/>
|
||||
<child>
|
||||
|
|
|
@ -1,34 +1,19 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- 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>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkEventBox" id="chat_tab_ebox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="visible_window">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="tab_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">4</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="tab_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -39,25 +24,32 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="tab_label">
|
||||
<property name="width_request">70</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="max_width_chars">9</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="tab_close_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="relief">none</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1329">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-close</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
|
@ -72,4 +64,23 @@
|
|||
</object>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -1,39 +1,55 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<property name="width_request">650</property>
|
||||
<property name="height_request">500</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="title" translatable="yes">Plugins</property>
|
||||
<property name="default_width">650</property>
|
||||
<property name="default_height">500</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>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkNotebook" id="plugins_notebook">
|
||||
<property name="visible">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>
|
||||
<object class="GtkHPaned" id="hpaned1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="position">250</property>
|
||||
<property name="position_set">True</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox6">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
|
@ -48,50 +64,32 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAspectFrame" id="aspectframe1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<property name="xalign">0</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="install_plugin_button">
|
||||
<property name="label" translatable="yes">Install from zip</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="clicked" handler="on_install_plugin_button_clicked"/>
|
||||
<child>
|
||||
<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>
|
||||
<property name="image">image1</property>
|
||||
<signal name="clicked" handler="on_install_plugin_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">5</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
|
@ -107,104 +105,125 @@
|
|||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="plugin_name_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">&lt;empty&gt;</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="selectable">True</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Version:</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="plugin_version_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes"><empty></property>
|
||||
<property name="label"><empty></property>
|
||||
<property name="selectable">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">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="yalign">0</property>
|
||||
<property name="label" translatable="yes">Authors:</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="plugin_authors_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">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="selectable">True</property>
|
||||
<property name="ellipsize">end</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">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Homepage:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
|
@ -213,28 +232,35 @@
|
|||
<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">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Description:</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -244,6 +270,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -251,56 +278,38 @@
|
|||
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</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">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="uninstall_plugin_button">
|
||||
<property name="label" translatable="yes">Uninstall</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="clicked" handler="on_uninstall_plugin_button_clicked"/>
|
||||
<child>
|
||||
<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>
|
||||
<property name="image">image2</property>
|
||||
<signal name="clicked" handler="on_uninstall_plugin_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -310,34 +319,12 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="configure_plugin_button">
|
||||
<property name="label" translatable="yes">Configure</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="clicked" handler="on_configure_plugin_button_clicked"/>
|
||||
<child>
|
||||
<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>
|
||||
<property name="image">image3</property>
|
||||
<signal name="clicked" handler="on_configure_plugin_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -348,13 +335,14 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="resize">True</property>
|
||||
<property name="shrink">True</property>
|
||||
<property name="shrink">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -362,6 +350,7 @@
|
|||
<child type="tab">
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Installed</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -376,12 +365,15 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">15</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
|
@ -391,7 +383,7 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -402,6 +394,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -531,6 +531,7 @@
|
|||
<object class="GtkEventBox" id="eventbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
||||
<property name="visible_window">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label13">
|
||||
<property name="visible">True</property>
|
||||
|
@ -1152,7 +1153,6 @@
|
|||
<child>
|
||||
<object class="GtkStatusbar" id="statusbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="has_resize_grip">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
|
@ -123,47 +123,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="remove_button">
|
||||
<property name="label" translatable="yes">_Remove</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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -181,4 +148,8 @@
|
|||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock">gtk-delete</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
@ -1,10 +1,95 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<property name="width_request">85</property>
|
||||
<property name="height_request">200</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Gajim</property>
|
||||
<property name="role">roster</property>
|
||||
<property name="default_width">250</property>
|
||||
|
@ -12,30 +97,34 @@
|
|||
<accel-groups>
|
||||
<group name="accelgroup1"/>
|
||||
</accel-groups>
|
||||
<signal name="key_press_event" handler="on_roster_window_key_press_event"/>
|
||||
<signal name="delete_event" handler="on_roster_window_delete_event"/>
|
||||
<signal name="focus_in_event" handler="on_roster_window_focus_in_event"/>
|
||||
<signal name="focus_out_event" handler="on_roster_window_focus_out_event"/>
|
||||
<signal name="popup_menu" handler="on_roster_window_popup_menu"/>
|
||||
<signal name="key-press-event" handler="on_roster_window_key_press_event" swapped="no"/>
|
||||
<signal name="delete-event" handler="on_roster_window_delete_event" swapped="no"/>
|
||||
<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" swapped="no"/>
|
||||
<signal name="popup-menu" handler="on_roster_window_popup_menu" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="roster_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkMenuBar" id="menubar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="actions_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Actions</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">
|
||||
<object class="GtkMenu" id="actions_menu_menu">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="new_chat_menuitem">
|
||||
<property name="label" translatable="yes">_Start Chat...</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image1</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -45,6 +134,7 @@
|
|||
<child>
|
||||
<object class="GtkImageMenuItem" id="send_single_message_menuitem">
|
||||
<property name="label" translatable="yes">Send Single _Message...</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image2</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -53,8 +143,9 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image3</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -64,12 +155,14 @@
|
|||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="add_new_contact_menuitem">
|
||||
<property name="label" translatable="yes">Add _Contact...</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image4</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -80,6 +173,7 @@
|
|||
<object class="GtkImageMenuItem" id="service_disco_menuitem">
|
||||
<property name="label" translatable="yes">_Discover Services</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image5</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -89,6 +183,7 @@
|
|||
<child>
|
||||
<object class="GtkMenuItem" id="advanced_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Advanced</property>
|
||||
<property name="use_underline">True</property>
|
||||
</object>
|
||||
|
@ -96,17 +191,19 @@
|
|||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="separator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="quit_menuitem">
|
||||
<property name="label">gtk-quit</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
<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>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -116,27 +213,31 @@
|
|||
<child>
|
||||
<object class="GtkMenuItem" id="edit_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Edit</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">
|
||||
<object class="GtkMenu" id="edit_menu_menu">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="accounts_menuitem">
|
||||
<property name="label" translatable="yes">_Accounts</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image6</property>
|
||||
<property name="use_stock">False</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="profile_avatar_menuitem">
|
||||
<property name="label" translatable="yes">Profile, A_vatar</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image7</property>
|
||||
<property name="use_stock">False</property>
|
||||
|
@ -146,27 +247,30 @@
|
|||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="separator2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="preferences_menuitem">
|
||||
<property name="label">gtk-preferences</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="plugins_menuitem">
|
||||
<property name="label" translatable="yes">P_lugins</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image13</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>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -176,75 +280,84 @@
|
|||
<child>
|
||||
<object class="GtkMenuItem" id="view_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_View</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">
|
||||
<object class="GtkMenu" id="view_menu_menu">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckMenuItem" id="show_offline_contacts_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Show _Offline Contacts</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckMenuItem" id="show_only_active_contacts_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Show Only _Active Contacts</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckMenuItem" id="show_transports_menuitem">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Show T_ransports</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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckMenuItem" id="show_roster_menuitem">
|
||||
<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="label" translatable="yes">Show _Roster</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="separator3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="file_transfers_menuitem">
|
||||
<property name="label" translatable="yes">File _Transfers</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image8</property>
|
||||
<property name="use_stock">False</property>
|
||||
<property name="accel_group">accelgroup1</property>
|
||||
<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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="history_menuitem">
|
||||
<property name="label" translatable="yes">_History</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="use_underline">True</property>
|
||||
<property name="image">image9</property>
|
||||
<property name="use_stock">False</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>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -254,69 +367,77 @@
|
|||
<child>
|
||||
<object class="GtkMenuItem" id="help_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Help</property>
|
||||
<property name="use_underline">True</property>
|
||||
<child type="submenu">
|
||||
<object class="GtkMenu" id="help_menu_menu">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="contents_menuitem">
|
||||
<property name="label" translatable="yes">_Contents</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Help online</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image10</property>
|
||||
<property name="use_stock">False</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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="faq_menuitem">
|
||||
<property name="label" translatable="yes">_FAQ</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="use_underline">True</property>
|
||||
<property name="image">image11</property>
|
||||
<property name="use_stock">False</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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="keyboard_shortcuts_menuitem">
|
||||
<property name="label" translatable="yes">Keyboard Shortcuts</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image14</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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparatorMenuItem" id="menuitem1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="features_menuitem">
|
||||
<property name="label" translatable="yes">Fea_tures</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="use_underline">True</property>
|
||||
<property name="image">image12</property>
|
||||
<property name="use_stock">False</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>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="about_menuitem">
|
||||
<property name="label">gtk-about</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</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>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -335,24 +456,24 @@
|
|||
<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>
|
||||
<signal name="notify" handler="on_roster_hpaned_notify"/>
|
||||
<signal name="notify" handler="on_roster_hpaned_notify" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="roster_vbox2">
|
||||
<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="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="rfilter_entry">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="editable">False</property>
|
||||
<property name="primary_icon_stock">gtk-clear</property>
|
||||
<property name="primary_icon_activatable">True</property>
|
||||
<signal name="changed" handler="on_rfilter_entry_changed"/>
|
||||
<signal name="icon_press" handler="on_rfilter_entry_icon_press"/>
|
||||
<signal name="changed" handler="on_rfilter_entry_changed" swapped="no"/>
|
||||
<signal name="icon-press" handler="on_rfilter_entry_icon_press" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -361,36 +482,40 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<property name="vscrollbar_policy">automatic</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="roster_treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="reorderable">True</property>
|
||||
<signal name="row_expanded" handler="on_roster_treeview_row_expanded"/>
|
||||
<signal name="key_press_event" handler="on_roster_treeview_key_press_event"/>
|
||||
<signal name="scroll_event" handler="on_roster_treeview_scroll_event"/>
|
||||
<signal name="leave_notify_event" handler="on_roster_treeview_leave_notify_event"/>
|
||||
<signal name="button_press_event" handler="on_roster_treeview_button_press_event"/>
|
||||
<signal name="row_activated" handler="on_roster_treeview_row_activated"/>
|
||||
<signal name="row_collapsed" handler="on_roster_treeview_row_collapsed"/>
|
||||
<signal name="motion_notify_event" handler="on_roster_treeview_motion_notify_event"/>
|
||||
<signal name="button_release_event" handler="on_roster_treeview_button_release_event"/>
|
||||
<signal name="row-expanded" handler="on_roster_treeview_row_expanded" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_roster_treeview_key_press_event" swapped="no"/>
|
||||
<signal name="scroll-event" handler="on_roster_treeview_scroll_event" swapped="no"/>
|
||||
<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" swapped="no"/>
|
||||
<signal name="row-activated" handler="on_roster_treeview_row_activated" swapped="no"/>
|
||||
<signal name="row-collapsed" handler="on_roster_treeview_row_collapsed" swapped="no"/>
|
||||
<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" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="status_combobox">
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -405,81 +530,12 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -52,50 +52,15 @@
|
|||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="add_contact_button">
|
||||
<property name="label" translatable="yes">_Add contact</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">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="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"/>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -105,50 +70,15 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="information_button">
|
||||
<property name="label" translatable="yes">_Information</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">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="no_show_all">True</property>
|
||||
<property name="image">image3</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -158,47 +88,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="search_button">
|
||||
<property name="label" translatable="yes">_Search</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="image">image2</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -231,4 +128,16 @@
|
|||
</object>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<columns>
|
||||
<!-- column-name item -->
|
||||
|
@ -9,27 +13,31 @@
|
|||
</columns>
|
||||
</object>
|
||||
<object class="GtkWindow" id="service_discovery_window">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="role">Service Discovery</property>
|
||||
<property name="default_width">550</property>
|
||||
<property name="default_height">420</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>
|
||||
<object class="GtkVBox" id="vbox11">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="banner_agent_eventbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="banner_agent_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="banner_agent_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0.05000000074505806</property>
|
||||
<property name="ypad">6</property>
|
||||
<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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="banner_agent_icon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xpad">6</property>
|
||||
<property name="ypad">6</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -64,99 +76,56 @@ Agent JID - node</property>
|
|||
<child>
|
||||
<object class="GtkTable" id="address_table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">3</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkComboBoxEntry" id="address_comboboxentry">
|
||||
<property name="visible">True</property>
|
||||
<property name="model">liststore1</property>
|
||||
<property name="text_column">0</property>
|
||||
<signal name="changed" handler="on_address_comboboxentry_changed"/>
|
||||
</object>
|
||||
<packing>
|
||||
<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>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="browse_button">
|
||||
<property name="label" translatable="yes">G_o</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>
|
||||
<signal name="clicked" handler="on_go_button_clicked"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment93">
|
||||
<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>
|
||||
<property name="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="clicked" handler="on_go_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="right_attach">3</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label224">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">_Address:</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="mnemonic_widget">address_comboboxentry</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
<property name="y_options"></property>
|
||||
<property name="y_options"/>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -164,29 +133,31 @@ Agent JID - node</property>
|
|||
<object class="GtkScrolledWindow" id="services_scrollwin">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="services_treeview">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</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>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2994">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="services_progressbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="pulse_step">0.10000000149</property>
|
||||
</object>
|
||||
|
@ -199,14 +170,18 @@ Agent JID - node</property>
|
|||
<child>
|
||||
<object class="GtkLabel" id="label363">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="action_buttonbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="close_button">
|
||||
|
@ -217,7 +192,7 @@ Agent JID - node</property>
|
|||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -229,12 +204,14 @@ Agent JID - node</property>
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
|
|
|
@ -35,47 +35,14 @@
|
|||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="cancel_button">
|
||||
<property name="label" translatable="yes">_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="image">image2</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -85,48 +52,15 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="ok_button">
|
||||
<property name="label" translatable="yes">_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="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -143,4 +77,12 @@
|
|||
</object>
|
||||
</child>
|
||||
</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>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="image">image2</property>
|
||||
|
@ -25,7 +25,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="image">image3</property>
|
||||
|
@ -35,7 +35,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<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="use_underline">True</property>
|
||||
<property name="image">image4</property>
|
||||
|
|
|
@ -201,6 +201,7 @@
|
|||
<child>
|
||||
<object class="GtkEventBox" id="status_label_eventbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="visible_window">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="status_label">
|
||||
<property name="visible">True</property>
|
||||
|
@ -942,6 +943,7 @@
|
|||
<object class="GtkEventBox" id="eventbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Format: YYYY-MM-DD</property>
|
||||
<property name="visible_window">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label13">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<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">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">12</property>
|
||||
<property name="default_width">550</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>
|
||||
<object class="GtkVBox" id="vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label342">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes"><b>Jabber Traffic</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
|
@ -29,8 +35,6 @@
|
|||
<object class="GtkScrolledWindow" id="scrolledwindow43">
|
||||
<property name="visible">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>
|
||||
<child>
|
||||
<object class="GtkTextView" id="stanzas_log_textview">
|
||||
|
@ -42,12 +46,15 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2988">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="enable_checkbutton">
|
||||
<property name="label" translatable="yes" comments="XML Console enable checkbutton">_Enable</property>
|
||||
|
@ -55,23 +62,16 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label351">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="clear_button">
|
||||
<property name="label">gtk-clear</property>
|
||||
|
@ -79,12 +79,12 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -102,21 +102,25 @@
|
|||
<child>
|
||||
<object class="GtkVBox" id="input_vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="in_stanza_checkbutton">
|
||||
<property name="label" translatable="yes">Hide IN stanzas</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.5</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -126,10 +130,13 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.5</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -139,10 +146,13 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.5</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -152,10 +162,13 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.5</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -165,21 +178,27 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0.5</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>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
|
@ -188,6 +207,8 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -196,6 +217,7 @@
|
|||
<child type="label">
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes"><b>Filter</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
|
@ -204,6 +226,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -212,18 +235,17 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<signal name="activate" handler="on_expander_activate"/>
|
||||
<signal name="activate" handler="on_expander_activate" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkVBox" id="input_vbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow42">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<property name="vscrollbar_policy">automatic</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkTextView" id="input_textview">
|
||||
|
@ -235,12 +257,15 @@
|
|||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHButtonBox" id="hbuttonbox31">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
|
@ -251,7 +276,7 @@
|
|||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Info/Query</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -266,7 +291,7 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -281,7 +306,7 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</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>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -291,47 +316,14 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="send_button">
|
||||
<property name="label" translatable="yes">_Send</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<signal name="clicked" handler="on_send_button_clicked"/>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment80">
|
||||
<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>
|
||||
<property name="image">image1</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="clicked" handler="on_send_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -351,6 +343,7 @@
|
|||
<child type="label">
|
||||
<object class="GtkLabel" id="label343">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes"><b>XML Input</b></property>
|
||||
<property name="use_markup">True</property>
|
||||
|
@ -359,6 +352,7 @@
|
|||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</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\pangocairo.pyd"
|
||||
File "bin\pango.pyd"
|
||||
File "bin\pycurl.pyd"
|
||||
File "bin\pyexpat.pyd"
|
||||
File "bin\python27.dll"
|
||||
File "bin\pythoncom27.dll"
|
||||
File "bin\pywintypes27.dll"
|
||||
File "bin\OpenSSL.rand.pyd"
|
||||
File "bin\select.pyd"
|
||||
|
@ -194,8 +196,10 @@ Section "Gajim" SecGajim
|
|||
File "bin\win32api.pyd"
|
||||
File "bin\win32file.pyd"
|
||||
File "bin\win32pipe.pyd"
|
||||
File "bin\win32ui.pyd"
|
||||
File "bin\winsound.pyd"
|
||||
File "msvcr90.dll"
|
||||
File /r "bin\win32com"
|
||||
|
||||
WriteRegStr HKCU "Software\Gajim" "" $INSTDIR
|
||||
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\share"
|
||||
RMDir "$INSTDIR\bin\gtk"
|
||||
RMDir "$INSTDIR\bin\win32com"
|
||||
Delete "$INSTDIR\bin\_bsddb.pyd"
|
||||
Delete "$INSTDIR\bin\_ctypes.pyd"
|
||||
Delete "$INSTDIR\bin\_hashlib.pyd"
|
||||
|
@ -558,8 +563,10 @@ Section "Uninstall"
|
|||
Delete "$INSTDIR\bin\OpenSSL.SSL.pyd"
|
||||
Delete "$INSTDIR\bin\pango.pyd"
|
||||
Delete "$INSTDIR\bin\pangocairo.pyd"
|
||||
Delete "$INSTDIR\bin\pycurl.pyd"
|
||||
Delete "$INSTDIR\bin\pyexpat.pyd"
|
||||
Delete "$INSTDIR\bin\python27.dll"
|
||||
Delete "$INSTDIR\bin\pythoncom27.dll"
|
||||
Delete "$INSTDIR\bin\pywintypes27.dll"
|
||||
Delete "$INSTDIR\bin\select.pyd"
|
||||
Delete "$INSTDIR\bin\sqlite3.dll"
|
||||
|
@ -568,6 +575,7 @@ Section "Uninstall"
|
|||
Delete "$INSTDIR\bin\win32api.pyd"
|
||||
Delete "$INSTDIR\bin\win32file.pyd"
|
||||
Delete "$INSTDIR\bin\win32pipe.pyd"
|
||||
Delete "$INSTDIR\bin\win32ui.pyd"
|
||||
Delete "$INSTDIR\bin\winsound.pyd"
|
||||
Delete "$INSTDIR\bin\msvcr90.dll"
|
||||
RMDir /r "$INSTDIR\bin"
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 209 B |
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
if [ ! $PYTHON ]; then
|
||||
PYTHON="python";
|
||||
PYTHON="python3";
|
||||
fi
|
||||
cd "$(dirname $0)/src"
|
||||
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 gtk
|
||||
import gobject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GObject
|
||||
|
||||
from plugins import GajimPlugin
|
||||
from plugins.helpers import log, log_calls
|
||||
|
@ -62,7 +62,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
|||
|
||||
@log_calls('AcronymsExpanderPlugin')
|
||||
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')
|
||||
acronyms = eval(data.read())
|
||||
data.close()
|
||||
|
@ -76,7 +76,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
|||
#assert isinstance(tb,gtk.TextBuffer)
|
||||
ACRONYMS = self.config['ACRONYMS']
|
||||
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)))
|
||||
if t and t[-1] == INVOKER:
|
||||
#log.debug('changing msg text')
|
||||
|
@ -87,7 +87,7 @@ class AcronymsExpanderPlugin(GajimPlugin):
|
|||
#log.debug('head: %s'%(head))
|
||||
t = ''.join((base, sep, head, INVOKER))
|
||||
#log.debug("setting text: '%s'"%(t))
|
||||
gobject.idle_add(tb.set_text, t)
|
||||
GObject.idle_add(tb.set_text, t)
|
||||
|
||||
@log_calls('AcronymsExpanderPlugin')
|
||||
def connect_with_chat_control_base(self, chat_control):
|
||||
|
|
|
@ -407,7 +407,7 @@ if dbus_support.supported:
|
|||
return DBUS_DICT_SV()
|
||||
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:
|
||||
return get_dbus_struct(cached_vcard)
|
||||
|
||||
|
@ -428,7 +428,7 @@ if dbus_support.supported:
|
|||
def account_info(self, account):
|
||||
'''show info on account: resource, jid, nick, prio, message'''
|
||||
result = DBUS_DICT_SS()
|
||||
if gajim.connections.has_key(account):
|
||||
if account in gajim.connections:
|
||||
# account is valid
|
||||
con = gajim.connections[account]
|
||||
index = con.connected
|
||||
|
@ -508,7 +508,7 @@ if dbus_support.supported:
|
|||
def prefs_store(self):
|
||||
try:
|
||||
gajim.interface.save_config()
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
return DBUS_BOOLEAN(False)
|
||||
return DBUS_BOOLEAN(True)
|
||||
|
||||
|
|
|
@ -31,9 +31,9 @@ if 'gtk' in os.listdir('.'):
|
|||
|
||||
options = {
|
||||
'build_exe': {
|
||||
'includes': ['gtk.keysyms', 'dumbdbm', 'dbhash', 'bsddb', 'new',
|
||||
'includes': ['Gdk.KEY_, 'dumbdbm', 'dbhash', 'bsddb', 'new',
|
||||
'goocanvas', 'Crypto.PublicKey.DSA', 'Crypto.Hash.HMAC',
|
||||
'numbers'],
|
||||
'numbers', 'win32com.client', 'win32com.server'],
|
||||
'base': 'Win32GUI',
|
||||
'bin_excludes': [
|
||||
'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
|
||||
# be entities that often change the list, it may be slow to fetch it every time
|
||||
|
||||
import gobject
|
||||
import gtk
|
||||
from gi.repository import GLib
|
||||
from gi.repository import Gtk
|
||||
|
||||
import nbxmpp
|
||||
from common import gajim
|
||||
|
@ -91,7 +91,7 @@ class CommandWindow:
|
|||
self.data_form_widget.destroy()
|
||||
self.data_form_widget = dataforms_widget.DataFormWidget()
|
||||
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:
|
||||
# Execute command
|
||||
|
@ -159,7 +159,7 @@ class CommandWindow:
|
|||
return self.stage_adhoc_commands_window_delete_event(self.window)
|
||||
|
||||
def __del__(self):
|
||||
print 'Object has been deleted.'
|
||||
print('Object has been deleted.')
|
||||
|
||||
# stage 1: waiting for command list
|
||||
def stage1(self):
|
||||
|
@ -236,13 +236,13 @@ class CommandWindow:
|
|||
# build the commands list radiobuttons
|
||||
first_radio = None
|
||||
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,
|
||||
commandnode)
|
||||
if not first_radio:
|
||||
first_radio = radio
|
||||
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.stage_finish = self.stage2_finish
|
||||
|
@ -255,9 +255,9 @@ class CommandWindow:
|
|||
"""
|
||||
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.foreach(remove_widget)
|
||||
self.command_list_vbox.foreach(remove_widget, None)
|
||||
|
||||
def stage2_close_button_clicked(self, widget):
|
||||
self.stage_finish()
|
||||
|
@ -281,8 +281,6 @@ class CommandWindow:
|
|||
# close old stage
|
||||
self.stage_finish()
|
||||
|
||||
assert isinstance(self.commandnode, unicode)
|
||||
|
||||
self.form_status = None
|
||||
|
||||
self.stages_notebook.set_current_page(
|
||||
|
@ -321,8 +319,8 @@ class CommandWindow:
|
|||
dialog.destroy()
|
||||
cb()
|
||||
|
||||
dialog = dialogs.HigDialog(self.window, gtk.MESSAGE_WARNING,
|
||||
gtk.BUTTONS_YES_NO, _('Cancel confirmation'),
|
||||
dialog = dialogs.HigDialog(self.window, Gtk.MessageType.WARNING,
|
||||
Gtk.ButtonsType.YES_NO, _('Cancel confirmation'),
|
||||
_('You are in process of executing command. Do you really want to '
|
||||
'cancel it?'), on_response_yes=on_yes)
|
||||
dialog.popup()
|
||||
|
@ -452,7 +450,7 @@ class CommandWindow:
|
|||
|
||||
note = command.getTag('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.show()
|
||||
else:
|
||||
|
@ -510,7 +508,7 @@ class CommandWindow:
|
|||
try:
|
||||
errorname = nbxmpp.NS_STANZAS + ' ' + str(errorid)
|
||||
errordesc = nbxmpp.ERRORS[errorname][2]
|
||||
error = errordesc.decode('utf-8')
|
||||
error = errordesc
|
||||
del errorname, errordesc
|
||||
except KeyError: # when stanza doesn't have error description
|
||||
error = _('Service returned an error.')
|
||||
|
@ -550,21 +548,21 @@ class CommandWindow:
|
|||
progressbar.pulse() method
|
||||
"""
|
||||
assert not self.pulse_id
|
||||
assert isinstance(progressbar, gtk.ProgressBar)
|
||||
assert isinstance(progressbar, Gtk.ProgressBar)
|
||||
|
||||
def callback():
|
||||
progressbar.pulse()
|
||||
return True # important to keep callback be called back!
|
||||
|
||||
# 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):
|
||||
"""
|
||||
Stop pulsing, useful when especially when removing widget
|
||||
"""
|
||||
if self.pulse_id:
|
||||
gobject.source_remove(self.pulse_id)
|
||||
GLib.source_remove(self.pulse_id)
|
||||
self.pulse_id = None
|
||||
|
||||
# handling xml stanzas
|
||||
|
@ -608,7 +606,6 @@ class CommandWindow:
|
|||
Send the command with data form. Wait for reply
|
||||
"""
|
||||
# create the stanza
|
||||
assert isinstance(self.commandnode, unicode)
|
||||
assert action in ('execute', 'prev', 'next', 'complete')
|
||||
|
||||
stanza = nbxmpp.Iq(typ='set', to=self.jid)
|
||||
|
|
|
@ -23,11 +23,12 @@
|
|||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
import gtk
|
||||
from gi.repository import Gtk
|
||||
import gtkgui_helpers
|
||||
import gobject
|
||||
from gi.repository import GLib
|
||||
|
||||
from common import gajim
|
||||
from common import helpers
|
||||
|
||||
(
|
||||
OPT_TYPE,
|
||||
|
@ -50,12 +51,12 @@ def rate_limit(rate):
|
|||
timeout = [None]
|
||||
def f(*args, **kwargs):
|
||||
if timeout[0] is not None:
|
||||
gobject.source_remove(timeout[0])
|
||||
GLib.source_remove(timeout[0])
|
||||
timeout[0] = None
|
||||
def timeout_func():
|
||||
func(*args, **kwargs)
|
||||
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 decorator
|
||||
|
||||
|
@ -98,32 +99,32 @@ class AdvancedConfigurationWindow(object):
|
|||
|
||||
treeview = self.xml.get_object('advanced_treeview')
|
||||
self.treeview = treeview
|
||||
self.model = gtk.TreeStore(str, str, str)
|
||||
self.model = Gtk.TreeStore(str, str, str)
|
||||
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.set_visible_func(self.visible_func)
|
||||
|
||||
renderer_text = gtk.CellRendererText()
|
||||
col = treeview.insert_column_with_attributes(-1, _('Preference Name'),
|
||||
renderer_text, text = 0)
|
||||
renderer_text = Gtk.CellRendererText()
|
||||
col = Gtk.TreeViewColumn(_('Preference Name'), renderer_text, text = 0)
|
||||
treeview.insert_column(col, -1)
|
||||
col.set_resizable(True)
|
||||
|
||||
renderer_text = gtk.CellRendererText()
|
||||
renderer_text = Gtk.CellRendererText()
|
||||
renderer_text.connect('edited', self.on_config_edited)
|
||||
col = treeview.insert_column_with_attributes(-1, _('Value'),
|
||||
renderer_text, text = 1)
|
||||
col = Gtk.TreeViewColumn(_('Value'),renderer_text, text = 1)
|
||||
treeview.insert_column(col, -1)
|
||||
col.set_cell_data_func(renderer_text, self.cb_value_column_data)
|
||||
|
||||
col.props.resizable = True
|
||||
col.set_property('expand',True)
|
||||
col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
|
||||
col.props.expand = True
|
||||
col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
|
||||
|
||||
renderer_text = gtk.CellRendererText()
|
||||
col = treeview.insert_column_with_attributes(-1, _('Type'),
|
||||
renderer_text, text = 2)
|
||||
col.set_property('expand',True)
|
||||
col.set_property('sizing',gtk.TREE_VIEW_COLUMN_FIXED)
|
||||
renderer_text = Gtk.CellRendererText()
|
||||
col = Gtk.TreeViewColumn(_('Type'), renderer_text, text = 2)
|
||||
treeview.insert_column(col, -1)
|
||||
col.props.expand = True
|
||||
col.props.sizing = Gtk.TreeViewColumnSizing.FIXED
|
||||
|
||||
treeview.set_model(self.modelfilter)
|
||||
|
||||
|
@ -136,7 +137,7 @@ class AdvancedConfigurationWindow(object):
|
|||
self.restart_label.hide()
|
||||
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
|
||||
cellrenderertext not editable, else - it's editable
|
||||
|
@ -154,10 +155,10 @@ class AdvancedConfigurationWindow(object):
|
|||
# path[1] is the key name
|
||||
# path[2] is the root of tree
|
||||
# last two is optional
|
||||
path = [model[iter_][0].decode('utf-8')]
|
||||
path = [model[iter_][0]]
|
||||
parent = model.iter_parent(iter_)
|
||||
while parent:
|
||||
path.append(model[parent][0].decode('utf-8'))
|
||||
path.append(model[parent][0])
|
||||
parent = model.iter_parent(parent)
|
||||
return path
|
||||
|
||||
|
@ -195,17 +196,18 @@ class AdvancedConfigurationWindow(object):
|
|||
def on_advanced_treeview_row_activated(self, treeview, path, column):
|
||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||
modelrow = self.model[modelpath]
|
||||
option = modelrow[0].decode('utf-8')
|
||||
option = modelrow[0]
|
||||
if modelrow[2] == self.types['boolean']:
|
||||
for key in self.right_true_dict.keys():
|
||||
if self.right_true_dict[key] == modelrow[1]:
|
||||
modelrow[1] = key
|
||||
modelrow[1] = str(key)
|
||||
newval = {'False': True, 'True': False}[modelrow[1]]
|
||||
if len(modelpath) > 1:
|
||||
optnamerow = self.model[modelpath[0]]
|
||||
optname = optnamerow[0].decode('utf-8')
|
||||
keyrow = self.model[modelpath[:2]]
|
||||
key = keyrow[0].decode('utf-8')
|
||||
if len(modelpath.get_indices()) > 1:
|
||||
optnamerow = self.model[modelpath.get_indices()[0]]
|
||||
optname = optnamerow[0]
|
||||
modelpath.up()
|
||||
keyrow = self.model[modelpath]
|
||||
key = keyrow[0]
|
||||
self.remember_option(option + '\n' + key + '\n' + optname,
|
||||
modelrow[1], newval)
|
||||
gajim.config.set_per(optname, key, option, newval)
|
||||
|
@ -231,15 +233,17 @@ class AdvancedConfigurationWindow(object):
|
|||
|
||||
def on_config_edited(self, cell, path, text):
|
||||
# convert modelfilter path to model path
|
||||
path=Gtk.TreePath.new_from_string(path)
|
||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||
modelrow = self.model[modelpath]
|
||||
option = modelrow[0].decode('utf-8')
|
||||
text = text.decode('utf-8')
|
||||
if len(modelpath) > 1:
|
||||
optnamerow = self.model[modelpath[0]]
|
||||
optname = optnamerow[0].decode('utf-8')
|
||||
keyrow = self.model[modelpath[:2]]
|
||||
key = keyrow[0].decode('utf-8')
|
||||
option = modelrow[0]
|
||||
if modelpath.get_depth() > 2:
|
||||
modelpath.up() # Get parent
|
||||
keyrow = self.model[modelpath]
|
||||
key = keyrow[0]
|
||||
modelpath.up() # Get parent
|
||||
optnamerow = self.model[modelpath]
|
||||
optname = optnamerow[0]
|
||||
self.remember_option(option + '\n' + key + '\n' + optname, modelrow[1],
|
||||
text)
|
||||
gajim.config.set_per(optname, key, option, text)
|
||||
|
@ -268,12 +272,12 @@ class AdvancedConfigurationWindow(object):
|
|||
return
|
||||
modelpath = self.modelfilter.convert_path_to_child_path(path)
|
||||
modelrow = self.model[modelpath]
|
||||
option = modelrow[0].decode('utf-8')
|
||||
option = modelrow[0]
|
||||
if len(modelpath) > 1:
|
||||
optnamerow = self.model[modelpath[0]]
|
||||
optname = optnamerow[0].decode('utf-8')
|
||||
optname = optnamerow[0]
|
||||
keyrow = self.model[modelpath[:2]]
|
||||
key = keyrow[0].decode('utf-8')
|
||||
key = keyrow[0]
|
||||
self.remember_option(option + '\n' + key + '\n' + optname,
|
||||
modelrow[C_VALUE], default)
|
||||
gajim.config.set_per(optname, key, option, default)
|
||||
|
@ -285,7 +289,7 @@ class AdvancedConfigurationWindow(object):
|
|||
else:
|
||||
if str(default) == model[iter_][C_VALUE]:
|
||||
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):
|
||||
self.window.destroy()
|
||||
|
@ -308,11 +312,14 @@ class AdvancedConfigurationWindow(object):
|
|||
if type_ == self.types['boolean']:
|
||||
value = self.right_true_dict[option]
|
||||
else:
|
||||
value = option
|
||||
try:
|
||||
value = str(option)
|
||||
except:
|
||||
value = option
|
||||
self.model.append(parent, [name, value, type_])
|
||||
|
||||
def visible_func(self, model, treeiter):
|
||||
search_string = self.entry.get_text().decode('utf-8').lower()
|
||||
def visible_func(self, model, treeiter, data):
|
||||
search_string = self.entry.get_text().lower()
|
||||
for it in tree_model_pre_order(model, treeiter):
|
||||
if model[it][C_TYPE] != '':
|
||||
opt_path = self.get_option_path(model, it)
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
##
|
||||
|
||||
|
||||
import gtk
|
||||
import gobject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GLib
|
||||
|
||||
import gtkgui_helpers
|
||||
from common import helpers
|
||||
|
@ -70,8 +70,8 @@ class AtomWindow:
|
|||
self.xml.connect_signals(self)
|
||||
self.window.show_all()
|
||||
|
||||
self.entry_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
|
||||
self.feed_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(Gdk.EventMask.BUTTON_PRESS_MASK)
|
||||
|
||||
def displayNextEntry(self):
|
||||
"""
|
||||
|
@ -84,24 +84,24 @@ class AtomWindow:
|
|||
# fill the fields
|
||||
if newentry.feed_link is not None:
|
||||
self.feed_title_label.set_markup(
|
||||
u'<span foreground="blue" underline="single">%s</span>' % \
|
||||
gobject.markup_escape_text(newentry.feed_title))
|
||||
'<span foreground="blue" underline="single">%s</span>' % \
|
||||
GLib.markup_escape_text(newentry.feed_title))
|
||||
else:
|
||||
self.feed_title_label.set_markup(
|
||||
gobject.markup_escape_text(newentry.feed_title))
|
||||
self.feed_title_label.set_markup(GLib.markup_escape_text(
|
||||
newentry.feed_title))
|
||||
|
||||
self.feed_tagline_label.set_markup(
|
||||
u'<small>%s</small>' % \
|
||||
gobject.markup_escape_text(newentry.feed_tagline))
|
||||
'<small>%s</small>' % GLib.markup_escape_text(
|
||||
newentry.feed_tagline))
|
||||
|
||||
if newentry.title:
|
||||
if newentry.uri is not None:
|
||||
self.entry_title_label.set_markup(
|
||||
u'<span foreground="blue" underline="single">%s</span>' % \
|
||||
gobject.markup_escape_text(newentry.title))
|
||||
'<span foreground="blue" underline="single">%s</span>' % \
|
||||
GLib.markup_escape_text(newentry.title))
|
||||
else:
|
||||
self.entry_title_label.set_markup(
|
||||
gobject.markup_escape_text(newentry.title))
|
||||
self.entry_title_label.set_markup(GLib.markup_escape_text(
|
||||
newentry.title))
|
||||
else:
|
||||
self.entry_title_label.set_markup('')
|
||||
|
||||
|
|
|
@ -21,19 +21,20 @@
|
|||
## 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
|
||||
import gobject
|
||||
|
||||
class CellRendererImage(gtk.GenericCellRenderer):
|
||||
class CellRendererImage(Gtk.CellRendererPixbuf):
|
||||
|
||||
__gproperties__ = {
|
||||
'image': (gobject.TYPE_OBJECT, 'Image',
|
||||
'Image', gobject.PARAM_READWRITE),
|
||||
'image': (GObject.TYPE_OBJECT, 'Image',
|
||||
'Image', GObject.PARAM_READWRITE),
|
||||
}
|
||||
|
||||
def __init__(self, col_index, tv_index):
|
||||
self.__gobject_init__()
|
||||
super(CellRendererImage, self).__init__()
|
||||
self.image = None
|
||||
self.col_index = col_index
|
||||
self.tv_index = tv_index
|
||||
|
@ -45,6 +46,14 @@ class CellRendererImage(gtk.GenericCellRenderer):
|
|||
def do_get_property(self, pspec):
|
||||
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):
|
||||
image, tree = image_tree
|
||||
if model.get_value(iter_, self.tv_index) != image:
|
||||
|
@ -53,71 +62,67 @@ class CellRendererImage(gtk.GenericCellRenderer):
|
|||
col = tree.get_column(self.col_index)
|
||||
cell_area = tree.get_cell_area(path, col)
|
||||
|
||||
tree.queue_draw_area(cell_area.x, cell_area.y,
|
||||
cell_area.width, cell_area.height)
|
||||
tree.queue_draw_area(cell_area.x, cell_area.y, cell_area.width,
|
||||
cell_area.height)
|
||||
|
||||
def animation_timeout(self, tree, image):
|
||||
if image.get_storage_type() != gtk.IMAGE_ANIMATION:
|
||||
if image.get_storage_type() != Gtk.ImageType.ANIMATION:
|
||||
return
|
||||
self.redraw = 0
|
||||
iter_ = self.iters[image]
|
||||
iter_.advance()
|
||||
timeval = GLib.TimeVal()
|
||||
timeval.tv_sec = GLib.get_monotonic_time() / 1000000
|
||||
iter_.advance(timeval)
|
||||
model = tree.get_model()
|
||||
if model:
|
||||
model.foreach(self.func, (image, tree))
|
||||
if self.redraw:
|
||||
gobject.timeout_add(iter_.get_delay_time(),
|
||||
self.animation_timeout, tree, image)
|
||||
GLib.timeout_add(iter_.get_delay_time(),
|
||||
self.animation_timeout, tree, image)
|
||||
elif image in self.iters:
|
||||
del self.iters[image]
|
||||
|
||||
def on_render(self, window, widget, background_area, cell_area,
|
||||
expose_area, flags):
|
||||
def do_render(self, ctx, widget, background_area, cell_area, flags):
|
||||
if not self.image:
|
||||
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
|
||||
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.get_storage_type() == Gtk.ImageType.ANIMATION:
|
||||
if self.image not in self.iters:
|
||||
if not isinstance(widget, gtk.TreeView):
|
||||
if not isinstance(widget, Gtk.TreeView):
|
||||
return
|
||||
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_
|
||||
gobject.timeout_add(iter_.get_delay_time(),
|
||||
self.animation_timeout, widget, self.image)
|
||||
GLib.timeout_add(iter_.get_delay_time(), self.animation_timeout,
|
||||
widget, self.image)
|
||||
|
||||
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()
|
||||
else:
|
||||
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:
|
||||
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()
|
||||
pix = animation.get_iter().get_pixbuf()
|
||||
elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF:
|
||||
timeval = GLib.TimeVal()
|
||||
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()
|
||||
else:
|
||||
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.
|
||||
"""
|
||||
|
||||
from types import NoneType
|
||||
from tools import remove
|
||||
from .tools import remove
|
||||
|
||||
COMMANDS = {}
|
||||
CONTAINERS = {}
|
||||
|
@ -67,11 +66,13 @@ def traverse_commands(container):
|
|||
yield attribute
|
||||
|
||||
def is_command(attribute):
|
||||
from framework import Command
|
||||
from .framework import Command
|
||||
return isinstance(attribute, Command)
|
||||
|
||||
def is_root(namespace):
|
||||
metaclass = namespace.get("__metaclass__", NoneType)
|
||||
metaclass = namespace.get("__metaclass__", None)
|
||||
if not metaclass:
|
||||
return False
|
||||
return issubclass(metaclass, Dispatchable)
|
||||
|
||||
def get_command(host, name):
|
||||
|
@ -83,7 +84,7 @@ def get_command(host, name):
|
|||
def list_commands(host):
|
||||
for container in CONTAINERS[host]:
|
||||
commands = COMMANDS[container]
|
||||
for name, command in commands.iteritems():
|
||||
for name, command in commands.items():
|
||||
yield name, command
|
||||
|
||||
class Dispatchable(type):
|
||||
|
|
|
@ -23,12 +23,12 @@ import re
|
|||
from types import FunctionType
|
||||
from inspect import getargspec, getdoc
|
||||
|
||||
from dispatcher import Host, Container
|
||||
from dispatcher import get_command, list_commands
|
||||
from mapping import parse_arguments, adapt_arguments
|
||||
from errors import DefinitionError, CommandError, NoCommandError
|
||||
from .dispatcher import Host, Container
|
||||
from .dispatcher import get_command, list_commands
|
||||
from .mapping import parse_arguments, adapt_arguments
|
||||
from .errors import DefinitionError, CommandError, NoCommandError
|
||||
|
||||
class CommandHost(object):
|
||||
class CommandHost(metaclass=Host):
|
||||
"""
|
||||
Command host is a hub between numerous command processors and
|
||||
command containers. Aimed to participate in a dispatching process in
|
||||
|
@ -40,7 +40,7 @@ class CommandHost(object):
|
|||
"""
|
||||
__metaclass__ = Host
|
||||
|
||||
class CommandContainer(object):
|
||||
class CommandContainer(metaclass=Container):
|
||||
"""
|
||||
Command container is an entity which holds defined commands,
|
||||
allowing them to be dispatched and proccessed correctly. Each
|
||||
|
@ -143,7 +143,7 @@ class CommandProcessor(object):
|
|||
def list_commands(self):
|
||||
commands = list_commands(self.COMMAND_HOST)
|
||||
commands = dict(commands)
|
||||
return sorted(set(commands.itervalues()))
|
||||
return sorted(list(commands.values()), key=lambda k: k.__repr__())
|
||||
|
||||
class Command(object):
|
||||
|
||||
|
@ -153,7 +153,7 @@ class Command(object):
|
|||
|
||||
# Automatically set all the properties passed to a constructor
|
||||
# by the command decorator.
|
||||
for key, value in properties.iteritems():
|
||||
for key, value in properties.items():
|
||||
setattr(self, key, value)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
|
@ -165,7 +165,7 @@ class Command(object):
|
|||
# command or name attributes set. They will be set to a
|
||||
# corresponding values right here in case if they was not set by
|
||||
# the one who raised an exception.
|
||||
except CommandError, error:
|
||||
except CommandError as error:
|
||||
if not error.command and not error.name:
|
||||
raise CommandError(error.message, self)
|
||||
raise
|
||||
|
@ -181,7 +181,11 @@ class Command(object):
|
|||
return "<Command %s>" % ', '.join(self.names)
|
||||
|
||||
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
|
||||
def first_name(self):
|
||||
|
|
|
@ -35,7 +35,7 @@ detected.
|
|||
"""
|
||||
|
||||
from ..framework import CommandContainer, command, doc
|
||||
from hosts import *
|
||||
from .hosts import *
|
||||
|
||||
class CustomCommonCommands(CommandContainer):
|
||||
"""
|
||||
|
|
|
@ -35,10 +35,10 @@ commands as a frontend.
|
|||
from subprocess import Popen, PIPE
|
||||
from os.path import expanduser
|
||||
|
||||
from glib import timeout_add
|
||||
from gi.repository import GLib
|
||||
|
||||
from ..framework import CommandContainer, command, doc
|
||||
from hosts import *
|
||||
from .hosts import *
|
||||
|
||||
class Execute(CommandContainer):
|
||||
AUTOMATIC = True
|
||||
|
@ -64,11 +64,11 @@ class Execute(CommandContainer):
|
|||
@classmethod
|
||||
def monitor(cls, processor, popen):
|
||||
poller = cls.poller(processor, popen)
|
||||
timeout_add(cls.POLL_INTERVAL, poller.next)
|
||||
GLib.timeout_add(cls.POLL_INTERVAL, next, poller)
|
||||
|
||||
@classmethod
|
||||
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)
|
||||
cls.overdue(processor, popen)
|
||||
yield False
|
||||
|
@ -101,7 +101,7 @@ class Execute(CommandContainer):
|
|||
@staticmethod
|
||||
def clean(text):
|
||||
strip = chr(10) + chr(32)
|
||||
return text.strip(strip)
|
||||
return text.decode().strip(strip)
|
||||
|
||||
class Show(Execute):
|
||||
|
||||
|
@ -115,6 +115,6 @@ class Show(Execute):
|
|||
stdout, stderr = cls.fetch(popen)
|
||||
success = popen.returncode == 0
|
||||
if success and stdout:
|
||||
processor.send(stdout.decode('utf8'))
|
||||
processor.send(stdout)
|
||||
elif not success and 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.
|
||||
"""
|
||||
|
||||
from types import StringTypes
|
||||
from traceback import print_exc
|
||||
|
||||
from pango import FontDescription
|
||||
from gi.repository import Pango
|
||||
from common import gajim
|
||||
|
||||
from ..framework import CommandProcessor
|
||||
|
@ -62,13 +61,13 @@ class ChatCommandProcessor(CommandProcessor):
|
|||
try:
|
||||
parents = super(ChatCommandProcessor, self)
|
||||
parents.execute_command(name, arguments)
|
||||
except NoCommandError, error:
|
||||
except NoCommandError as error:
|
||||
details = dict(name=error.name, message=error.message)
|
||||
message = "%(name)s: %(message)s\n" % details
|
||||
message += "Try using the //%(name)s or /say /%(name)s " % details
|
||||
message += "construct if you intended to send it as a text."
|
||||
self.echo_error(message)
|
||||
except CommandError, error:
|
||||
except CommandError as error:
|
||||
self.echo_error("%s: %s" % (error.name, error.message))
|
||||
except Exception:
|
||||
self.echo_error(_("Error during command execution!"))
|
||||
|
@ -98,7 +97,7 @@ class ChatCommandProcessor(CommandProcessor):
|
|||
def command_postprocessor(self, command, name, arguments, args, kwargs, value):
|
||||
# If command returns a string - print it to a user. A convenient
|
||||
# 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)
|
||||
|
||||
class CommandTools:
|
||||
|
@ -117,7 +116,7 @@ class CommandTools:
|
|||
|
||||
name = gconf("/desktop/gnome/interface/monospace_font_name")
|
||||
name = name if name else "Monospace"
|
||||
font = FontDescription(name)
|
||||
font = Pango.FontDescription(name)
|
||||
|
||||
command_ok_tag = buffer.create_tag("command_ok")
|
||||
command_ok_tag.set_property("font-desc", font)
|
||||
|
|
|
@ -30,8 +30,8 @@ from ..errors import CommandError
|
|||
from ..framework import CommandContainer, command, doc
|
||||
from ..mapping import generate_usage
|
||||
|
||||
from hosts import *
|
||||
import execute
|
||||
from .hosts import *
|
||||
from . import execute
|
||||
|
||||
# This holds constants fron the logger, which we'll be using in some of our
|
||||
# commands.
|
||||
|
@ -136,7 +136,7 @@ class StandardCommonCommands(CommandContainer):
|
|||
def status(self, status, message):
|
||||
if status not in ('online', 'away', 'chat', 'xa', 'dnd'):
|
||||
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,
|
||||
'sync_with_global_status'):
|
||||
continue
|
||||
|
@ -150,7 +150,7 @@ class StandardCommonCommands(CommandContainer):
|
|||
if not message:
|
||||
message = _("Away")
|
||||
|
||||
for connection in gajim.connections.itervalues():
|
||||
for connection in gajim.connections.values():
|
||||
if not gajim.config.get_per('accounts', connection.name,
|
||||
'sync_with_global_status'):
|
||||
continue
|
||||
|
@ -164,7 +164,7 @@ class StandardCommonCommands(CommandContainer):
|
|||
if not message:
|
||||
message = _("Available")
|
||||
|
||||
for connection in gajim.connections.itervalues():
|
||||
for connection in gajim.connections.values():
|
||||
if not gajim.config.get_per('accounts', connection.name,
|
||||
'sync_with_global_status'):
|
||||
continue
|
||||
|
|
|
@ -23,10 +23,9 @@ according to the command properties.
|
|||
"""
|
||||
|
||||
import re
|
||||
from types import BooleanType, UnicodeType
|
||||
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
|
||||
# arguments. Might need some tweaking along the way.
|
||||
|
@ -62,7 +61,7 @@ def parse_arguments(arguments):
|
|||
"""
|
||||
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.
|
||||
"""
|
||||
|
@ -71,7 +70,7 @@ def parse_arguments(arguments):
|
|||
return True
|
||||
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.
|
||||
"""
|
||||
|
@ -97,14 +96,14 @@ def parse_arguments(arguments):
|
|||
# conflicted sectors. Remove any arguments that intersect with
|
||||
# options.
|
||||
for arg, position in args[:]:
|
||||
if intersects_opts(position):
|
||||
if intersects_opts(*position):
|
||||
args.remove((arg, position))
|
||||
|
||||
# Primitive but sufficiently effective way of disposing of
|
||||
# conflicted sectors. Remove any options that intersect with
|
||||
# arguments.
|
||||
for key, value, position in opts[:]:
|
||||
if intersects_args(position):
|
||||
if intersects_args(*position):
|
||||
opts.remove((key, value, position))
|
||||
|
||||
return args, opts
|
||||
|
@ -207,7 +206,7 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
# corresponding optin has been given.
|
||||
if command.expand:
|
||||
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
|
||||
if letter and letter not in expanded:
|
||||
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
|
||||
# carries a value - append it to args.
|
||||
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)
|
||||
if value:
|
||||
args.append((value, position))
|
||||
|
@ -231,8 +230,8 @@ def adapt_arguments(command, arguments, args, opts):
|
|||
|
||||
# Stripping down position information supplied with arguments and
|
||||
# options as it won't be needed again.
|
||||
args = map(lambda (arg, position): arg, args)
|
||||
opts = map(lambda (key, value, position): (key, value), opts)
|
||||
args = list(map(lambda t: t[0], args))
|
||||
opts = list(map(lambda t: (t[0], t[1]), opts))
|
||||
|
||||
# If command has extra option enabled - collect all extra arguments
|
||||
# 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.
|
||||
for key, value in opts:
|
||||
initial = norm_kwargs.get(key)
|
||||
if isinstance(initial, BooleanType):
|
||||
if not isinstance(value, BooleanType):
|
||||
if isinstance(initial, bool):
|
||||
if not isinstance(value, bool):
|
||||
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
|
||||
# command has enabled the corresponding option.
|
||||
if command.source:
|
||||
|
@ -305,7 +298,7 @@ def generate_usage(command, complete=True):
|
|||
letter = key[0]
|
||||
key = key.replace('_', '-')
|
||||
|
||||
if isinstance(value, BooleanType):
|
||||
if isinstance(value, bool):
|
||||
value = str()
|
||||
else:
|
||||
value = '=%s' % value
|
||||
|
|
|
@ -25,20 +25,19 @@
|
|||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from types import *
|
||||
from glib import GError
|
||||
|
||||
def remove(sequence, target):
|
||||
if isinstance(sequence, ListType):
|
||||
if isinstance(sequence, list):
|
||||
if target in sequence:
|
||||
sequence.remove(target)
|
||||
elif isinstance(sequence, DictType):
|
||||
elif isinstance(sequence, dict):
|
||||
if target in sequence:
|
||||
del sequence[target]
|
||||
|
||||
def gconf(path):
|
||||
try:
|
||||
from gconf import client_get_default
|
||||
client = client_get_default()
|
||||
from gi.repository import GConf
|
||||
client = GConf.Client.get_default()
|
||||
return client.get_string(path)
|
||||
except ImportError, GError:
|
||||
pass
|
||||
except ImportError:
|
||||
pass
|
||||
|
|
|
@ -100,13 +100,13 @@ class OldEntry(nbxmpp.Node, object):
|
|||
|
||||
|
||||
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:
|
||||
return main_feed
|
||||
elif source_feed is not None:
|
||||
return source_feed
|
||||
else:
|
||||
return u''
|
||||
return ''
|
||||
|
||||
feed_title = property(get_feed_title, None, None,
|
||||
''' 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,
|
||||
''' 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
|
||||
|
||||
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:
|
||||
c = i['category']
|
||||
type_ = i.get('type', '')
|
||||
|
@ -140,7 +141,7 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
features.sort()
|
||||
for f in features:
|
||||
S += '%s<' % f
|
||||
dataforms.sort(cmp=sort_dataforms_func)
|
||||
dataforms.sort(key=cmp_to_key(sort_dataforms_func))
|
||||
for dataform in dataforms:
|
||||
# fields indexed by var
|
||||
fields = {}
|
||||
|
@ -157,12 +158,12 @@ def compute_caps_hash(identities, features, dataforms=[], hash_method='sha-1'):
|
|||
S += '%s<' % value
|
||||
|
||||
if hash_method == 'sha-1':
|
||||
hash_ = hashlib.sha1(S)
|
||||
hash_ = hashlib.sha1(S.encode('utf-8'))
|
||||
elif hash_method == 'md5':
|
||||
hash_ = hashlib.md5(S)
|
||||
hash_ = hashlib.md5(S.encode('utf-8'))
|
||||
else:
|
||||
return ''
|
||||
return base64.b64encode(hash_.digest())
|
||||
return base64.b64encode(hash_.digest()).decode('utf-8')
|
||||
|
||||
|
||||
################################################################################
|
||||
|
|
|
@ -173,7 +173,7 @@ try:
|
|||
return True
|
||||
return False
|
||||
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')
|
||||
|
||||
def check_certificate(cert, domain):
|
||||
|
|
|
@ -29,16 +29,16 @@ import sys
|
|||
import stat
|
||||
|
||||
from common import gajim
|
||||
import logger
|
||||
from common import logger
|
||||
from common import jingle_xtls
|
||||
|
||||
# DO NOT MOVE ABOVE OF import gajim
|
||||
import sqlite3 as sqlite
|
||||
|
||||
def create_log_db():
|
||||
print _('creating logs database')
|
||||
print(_('creating logs database'))
|
||||
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()
|
||||
# create the tables
|
||||
# kind can be
|
||||
|
@ -84,9 +84,9 @@ def create_log_db():
|
|||
con.close()
|
||||
|
||||
def create_cache_db():
|
||||
print _('creating cache database')
|
||||
print(_('creating cache database'))
|
||||
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.executescript(
|
||||
'''
|
||||
|
@ -128,16 +128,16 @@ def create_cache_db():
|
|||
con.close()
|
||||
|
||||
def split_db():
|
||||
print 'spliting database'
|
||||
print('spliting database')
|
||||
if os.name == 'nt':
|
||||
try:
|
||||
import configpaths
|
||||
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
||||
os.environ[u'appdata']), u'Gajim')
|
||||
os.environ['appdata']), 'Gajim')
|
||||
except KeyError:
|
||||
OLD_LOG_DB_FOLDER = u'.'
|
||||
OLD_LOG_DB_FOLDER = '.'
|
||||
else:
|
||||
OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
|
||||
OLD_LOG_DB_FOLDER = os.path.expanduser('~/.gajim')
|
||||
|
||||
tmp = logger.CACHE_DB_PATH
|
||||
logger.CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
|
||||
|
@ -148,7 +148,7 @@ def split_db():
|
|||
os.chdir(back)
|
||||
cur = con.cursor()
|
||||
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]
|
||||
cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
|
||||
for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
|
||||
|
@ -161,9 +161,9 @@ def split_db():
|
|||
con.commit()
|
||||
cur.executescript('DROP TABLE %s;' % table)
|
||||
con.commit()
|
||||
except sqlite.OperationalError, e:
|
||||
print >> sys.stderr, 'error moving table %s to cache.db: %s' % \
|
||||
(table, str(e))
|
||||
except sqlite.OperationalError as e:
|
||||
print('error moving table %s to cache.db: %s' % (table, str(e)),
|
||||
file=sys.stderr)
|
||||
con.close()
|
||||
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_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_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_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||
|
@ -189,22 +189,22 @@ def check_and_possibly_move_config():
|
|||
if os.name == 'nt':
|
||||
try:
|
||||
OLD_LOG_DB_FOLDER = os.path.join(configpaths.fse(
|
||||
os.environ[u'appdata']), u'Gajim')
|
||||
os.environ['appdata']), 'Gajim')
|
||||
except KeyError:
|
||||
OLD_LOG_DB_FOLDER = u'.'
|
||||
OLD_LOG_DB_FOLDER = '.'
|
||||
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):
|
||||
return
|
||||
OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'logs.db')
|
||||
OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'cache.db')
|
||||
vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'vcards')
|
||||
vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'avatars')
|
||||
vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'emoticons')
|
||||
vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'iconsets')
|
||||
vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'moods')
|
||||
OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'logs.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, 'vcards')
|
||||
vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, 'avatars')
|
||||
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, 'iconsets')
|
||||
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,
|
||||
u'activities')
|
||||
'activities')
|
||||
OLD_CONFIG_FILES = []
|
||||
OLD_DATA_FILES = []
|
||||
for f in os.listdir(OLD_LOG_DB_FOLDER):
|
||||
|
@ -249,7 +249,7 @@ def check_and_possibly_move_config():
|
|||
continue
|
||||
if not os.path.exists(src):
|
||||
continue
|
||||
print 'moving %s to %s' % (src, dst)
|
||||
print(_('moving %s to %s') % (src, dst))
|
||||
shutil.move(src, dst)
|
||||
gajim.logger.init_vars()
|
||||
gajim.logger.attach_cache_database()
|
||||
|
@ -263,7 +263,7 @@ def check_and_possibly_create_paths():
|
|||
|
||||
VCARD_PATH = gajim.VCARD_PATH
|
||||
AVATAR_PATH = gajim.AVATAR_PATH
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
MY_DATA = configpaths.gajimpaths['MY_DATA']
|
||||
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
|
||||
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
|
||||
|
@ -275,57 +275,57 @@ def check_and_possibly_create_paths():
|
|||
if not os.path.exists(MY_DATA):
|
||||
create_path(MY_DATA)
|
||||
elif os.path.isfile(MY_DATA):
|
||||
print _('%s is a file but it should be a directory') % MY_DATA
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % MY_DATA)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(MY_CONFIG):
|
||||
create_path(MY_CONFIG)
|
||||
elif os.path.isfile(MY_CONFIG):
|
||||
print _('%s is a file but it should be a directory') % MY_CONFIG
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % MY_CONFIG)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(MY_CACHE):
|
||||
create_path(MY_CACHE)
|
||||
elif os.path.isfile(MY_CACHE):
|
||||
print _('%s is a file but it should be a directory') % MY_CACHE
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % MY_CACHE)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(VCARD_PATH):
|
||||
create_path(VCARD_PATH)
|
||||
elif os.path.isfile(VCARD_PATH):
|
||||
print _('%s is a file but it should be a directory') % VCARD_PATH
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % VCARD_PATH)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(AVATAR_PATH):
|
||||
create_path(AVATAR_PATH)
|
||||
elif os.path.isfile(AVATAR_PATH):
|
||||
print _('%s is a file but it should be a directory') % AVATAR_PATH
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % AVATAR_PATH)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(LOG_DB_FOLDER):
|
||||
create_path(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 _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % LOG_DB_FOLDER)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(PLUGINS_CONFIG_PATH):
|
||||
create_path(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 _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % PLUGINS_CONFIG_PATH)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(CACHE_DB_FOLDER):
|
||||
create_path(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 _('Gajim will now exit')
|
||||
print(_('%s is a file but it should be a directory') % CACHE_DB_FOLDER)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
check_and_possibly_move_config()
|
||||
|
@ -334,18 +334,18 @@ def check_and_possibly_create_paths():
|
|||
create_log_db()
|
||||
gajim.logger.init_vars()
|
||||
elif os.path.isdir(LOG_DB_PATH):
|
||||
print _('%s is a directory but should be a file') % LOG_DB_PATH
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a directory but should be a file') % LOG_DB_PATH)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
if not os.path.exists(CACHE_DB_PATH):
|
||||
create_cache_db()
|
||||
gajim.logger.attach_cache_database()
|
||||
elif os.path.isdir(CACHE_DB_PATH):
|
||||
print _('%s is a directory but should be a file') % CACHE_DB_PATH
|
||||
print _('Gajim will now exit')
|
||||
print(_('%s is a directory but should be a file') % CACHE_DB_PATH)
|
||||
print(_('Gajim will now exit'))
|
||||
sys.exit()
|
||||
|
||||
|
||||
if not os.path.exists(XTLS_CERTS):
|
||||
create_path(XTLS_CERTS)
|
||||
if not os.path.exists(LOCAL_XTLS_CERTS):
|
||||
|
@ -363,5 +363,5 @@ def create_path(directory):
|
|||
create_path(head)
|
||||
if os.path.exists(directory):
|
||||
return
|
||||
print _('creating %s directory') % directory
|
||||
os.mkdir(directory, 0700)
|
||||
print(('creating %s directory') % directory)
|
||||
os.mkdir(directory, 0o700)
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
##
|
||||
|
||||
import nbxmpp
|
||||
import helpers
|
||||
import dataforms
|
||||
import gajim
|
||||
from common import helpers
|
||||
from common import dataforms
|
||||
from common import gajim
|
||||
from common.connection_handlers_events import MessageOutgoingEvent
|
||||
|
||||
import logging
|
||||
|
@ -105,12 +105,12 @@ class ChangeStatusCommand(AdHocCommand):
|
|||
var = 'presence-type',
|
||||
label = 'Type of presence:',
|
||||
options = [
|
||||
(u'chat', _('Free for chat')),
|
||||
(u'online', _('Online')),
|
||||
(u'away', _('Away')),
|
||||
(u'xa', _('Extended away')),
|
||||
(u'dnd', _('Do not disturb')),
|
||||
(u'offline', _('Offline - disconnect'))],
|
||||
('chat', _('Free for chat')),
|
||||
('online', _('Online')),
|
||||
('away', _('Away')),
|
||||
('xa', _('Extended away')),
|
||||
('dnd', _('Do not disturb')),
|
||||
('offline', _('Offline - disconnect'))],
|
||||
value = 'online',
|
||||
required = True),
|
||||
dataforms.Field('text-multi',
|
||||
|
@ -147,7 +147,7 @@ class ChangeStatusCommand(AdHocCommand):
|
|||
try:
|
||||
presencedesc = form['presence-desc'].value
|
||||
except Exception: # same exceptions as in last comment
|
||||
presencedesc = u''
|
||||
presencedesc = ''
|
||||
|
||||
response, cmd = self.buildResponse(request, status = 'completed')
|
||||
cmd.addChild('note', {}, _('The status has been changed.'))
|
||||
|
@ -198,7 +198,7 @@ class LeaveGroupchatsCommand(AdHocCommand):
|
|||
options = []
|
||||
account = self.connection.name
|
||||
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]}))
|
||||
if not len(options):
|
||||
response, cmd = self.buildResponse(request, status = 'completed')
|
||||
|
@ -369,11 +369,11 @@ class ConnectionCommands:
|
|||
# buildReply don't copy the node attribute. Re-add it
|
||||
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)):
|
||||
q.addChild('item', {
|
||||
# TODO: find the jid
|
||||
'jid': self.getOurBareJID() + u'/' + self.server_resource,
|
||||
'jid': self.getOurBareJID() + '/' + self.server_resource,
|
||||
'node': node,
|
||||
'name': cmd.commandname})
|
||||
|
||||
|
@ -387,7 +387,7 @@ class ConnectionCommands:
|
|||
try:
|
||||
jid = helpers.get_full_jid_from_iq(iq_obj)
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
|
||||
log.warning('Invalid JID: %s, ignoring it' % iq_obj.getFrom())
|
||||
return
|
||||
node = iq_obj.getTagAttr('query', 'node')
|
||||
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
import sys
|
||||
import re
|
||||
import copy
|
||||
import defs
|
||||
import gobject
|
||||
from common import defs
|
||||
from gi.repository import GLib
|
||||
|
||||
(
|
||||
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.")],
|
||||
'always_english_wikipedia': [opt_bool, False],
|
||||
'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],
|
||||
'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.')],
|
||||
|
@ -217,7 +217,7 @@ class Config:
|
|||
'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_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_height': [opt_int, 52],
|
||||
'roster_avatar_width': [opt_int, 32],
|
||||
|
@ -349,7 +349,6 @@ class Config:
|
|||
'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?')],
|
||||
'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', '' ],
|
||||
'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.') ],
|
||||
|
@ -573,7 +572,7 @@ class Config:
|
|||
Tree-like interface
|
||||
"""
|
||||
if node is None:
|
||||
for child, option in self.__options[1].iteritems():
|
||||
for child, option in self.__options[1].items():
|
||||
yield (child, ), option
|
||||
for grandparent in self.__options_per_key:
|
||||
yield (grandparent, ), None
|
||||
|
@ -584,7 +583,7 @@ class Config:
|
|||
elif len(node) == 2:
|
||||
grandparent, parent = node
|
||||
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
|
||||
else:
|
||||
raise ValueError('Invalid node')
|
||||
|
@ -630,11 +629,9 @@ class Config:
|
|||
|
||||
def set(self, optname, value):
|
||||
if optname not in self.__options[1]:
|
||||
# raise RuntimeError, 'option %s does not exist' % optname
|
||||
return
|
||||
value = self.is_valid(self.__options[0][optname][OPT_TYPE], value)
|
||||
if value is None:
|
||||
# raise RuntimeError, 'value of %s cannot be None' % optname
|
||||
return
|
||||
|
||||
self.__options[1][optname] = value
|
||||
|
@ -642,7 +639,7 @@ class Config:
|
|||
|
||||
def get(self, optname=None):
|
||||
if not optname:
|
||||
return self.__options[1].keys()
|
||||
return list(self.__options[1].keys())
|
||||
if optname not in self.__options[1]:
|
||||
return None
|
||||
return self.__options[1][optname]
|
||||
|
@ -671,7 +668,6 @@ class Config:
|
|||
|
||||
def add_per(self, typename, name): # per_group_of_option
|
||||
if typename not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % typename
|
||||
return
|
||||
|
||||
opt = self.__options_per_key[typename]
|
||||
|
@ -685,7 +681,6 @@ class Config:
|
|||
|
||||
def del_per(self, typename, name, subname = None): # per_group_of_option
|
||||
if typename not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % typename
|
||||
return
|
||||
|
||||
opt = self.__options_per_key[typename]
|
||||
|
@ -698,22 +693,18 @@ class Config:
|
|||
|
||||
def set_per(self, optname, key, subname, value): # per_group_of_option
|
||||
if optname not in self.__options_per_key:
|
||||
# raise RuntimeError, 'option %s does not exist' % optname
|
||||
return
|
||||
if not key:
|
||||
return
|
||||
dict_ = self.__options_per_key[optname][1]
|
||||
if key not in dict_:
|
||||
# raise RuntimeError, '%s is not a key of %s' % (key, dict_)
|
||||
self.add_per(optname, key)
|
||||
obj = dict_[key]
|
||||
if subname not in obj:
|
||||
# raise RuntimeError, '%s is not a key of %s' % (subname, obj)
|
||||
return
|
||||
typ = self.__options_per_key[optname][0][subname][OPT_TYPE]
|
||||
value = self.is_valid(typ, value)
|
||||
if value is None:
|
||||
# raise RuntimeError, '%s of %s cannot be None' % optname
|
||||
return
|
||||
obj[subname] = value
|
||||
self._timeout_save()
|
||||
|
@ -723,7 +714,7 @@ class Config:
|
|||
return None
|
||||
dict_ = self.__options_per_key[optname][1]
|
||||
if not key:
|
||||
return dict_.keys()
|
||||
return list(dict_.keys())
|
||||
if key not in dict_:
|
||||
if subname in self.__options_per_key[optname][0]:
|
||||
return self.__options_per_key[optname][0][subname][1]
|
||||
|
@ -812,7 +803,7 @@ class Config:
|
|||
def _timeout_save(self):
|
||||
if self.save_timeout_id:
|
||||
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):
|
||||
#init default values
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import defs
|
||||
from common import defs
|
||||
HAVE_XDG = True
|
||||
try:
|
||||
__import__(xdg)
|
||||
|
@ -61,7 +61,7 @@ def fse(s):
|
|||
"""
|
||||
Convert from filesystem encoding if not already Unicode
|
||||
"""
|
||||
return unicode(s, sys.getfilesystemencoding())
|
||||
return s
|
||||
|
||||
def windowsify(s):
|
||||
if os.name == 'nt':
|
||||
|
@ -82,10 +82,10 @@ class ConfigPaths:
|
|||
# variable 'appdata' is in? Assuming it to be in filesystem
|
||||
# encoding.
|
||||
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:
|
||||
# win9x, in cwd
|
||||
self.config_root = self.cache_root = self.data_root = u'.'
|
||||
self.config_root = self.cache_root = self.data_root = '.'
|
||||
else: # Unices
|
||||
# Pass in an Unicode string, and hopefully get one back.
|
||||
if HAVE_XDG:
|
||||
|
@ -93,23 +93,23 @@ class ConfigPaths:
|
|||
if not self.config_root:
|
||||
# Folder doesn't exist yet.
|
||||
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,
|
||||
u'gajim')
|
||||
'gajim')
|
||||
|
||||
self.data_root = xdg.BaseDirectory.save_data_path('gajim')
|
||||
if not self.data_root:
|
||||
self.data_root = os.path.join(xdg.BaseDirectory.\
|
||||
xdg_data_dirs[0], u'gajim')
|
||||
xdg_data_dirs[0], 'gajim')
|
||||
else:
|
||||
expand = os.path.expanduser
|
||||
base = os.getenv('XDG_CONFIG_HOME') or expand(u'~/.config')
|
||||
self.config_root = os.path.join(base, u'gajim')
|
||||
base = os.getenv('XDG_CACHE_HOME') or expand(u'~/.cache')
|
||||
self.cache_root = os.path.join(base, u'gajim')
|
||||
base = os.getenv('XDG_DATA_HOME') or expand(u'~/.local/share')
|
||||
self.data_root = os.path.join(base, u'gajim')
|
||||
base = os.getenv('XDG_CONFIG_HOME') or expand('~/.config')
|
||||
self.config_root = os.path.join(base, 'gajim')
|
||||
base = os.getenv('XDG_CACHE_HOME') or expand('~/.cache')
|
||||
self.cache_root = os.path.join(base, 'gajim')
|
||||
base = os.getenv('XDG_DATA_HOME') or expand('~/.local/share')
|
||||
self.data_root = os.path.join(base, 'gajim')
|
||||
|
||||
def add(self, name, type_, path):
|
||||
self.paths[name] = (type_, path)
|
||||
|
@ -130,40 +130,41 @@ class ConfigPaths:
|
|||
except KeyError:
|
||||
return default
|
||||
|
||||
def iteritems(self):
|
||||
for key in self.paths.iterkeys():
|
||||
def items(self):
|
||||
for key in self.paths.keys():
|
||||
yield (key, self[key])
|
||||
|
||||
def init(self, root=None):
|
||||
if root is not None:
|
||||
self.config_root = self.cache_root = self.data_root = root
|
||||
|
||||
d = {'MY_DATA': '', 'LOG_DB': u'logs.db', 'MY_CACERTS': u'cacerts.pem',
|
||||
'MY_EMOTS': u'emoticons', 'MY_ICONSETS': u'iconsets',
|
||||
'MY_MOOD_ICONSETS': u'moods', 'MY_ACTIVITY_ICONSETS': u'activities',
|
||||
'PLUGINS_USER': u'plugins', 'MY_PEER_CERTS': u'certs'}
|
||||
d = {'MY_DATA': '', 'LOG_DB': 'logs.db', 'MY_CACERTS': 'cacerts.pem',
|
||||
'MY_EMOTS': 'emoticons', 'MY_ICONSETS': 'iconsets',
|
||||
'MY_MOOD_ICONSETS': 'moods', 'MY_ACTIVITY_ICONSETS': 'activities',
|
||||
'PLUGINS_USER': 'plugins', 'MY_PEER_CERTS': 'certs',
|
||||
'RNG_SEED': 'rng_seed'}
|
||||
for name in d:
|
||||
self.add(name, TYPE_DATA, windowsify(d[name]))
|
||||
|
||||
d = {'MY_CACHE': '', 'CACHE_DB': u'cache.db', 'VCARD': u'vcards',
|
||||
'AVATAR': u'avatars'}
|
||||
d = {'MY_CACHE': '', 'CACHE_DB': 'cache.db', 'VCARD': 'vcards',
|
||||
'AVATAR': 'avatars'}
|
||||
for name in d:
|
||||
self.add(name, TYPE_CACHE, windowsify(d[name]))
|
||||
|
||||
self.add('MY_CONFIG', TYPE_CONFIG, '')
|
||||
self.add('MY_CERT', TYPE_CONFIG, '')
|
||||
|
||||
basedir = fse(os.environ.get(u'GAJIM_BASEDIR', defs.basedir))
|
||||
self.add('DATA', None, os.path.join(basedir, windowsify(u'data')))
|
||||
self.add('ICONS', None, os.path.join(basedir, windowsify(u'icons')))
|
||||
basedir = fse(os.environ.get('GAJIM_BASEDIR', defs.basedir))
|
||||
self.add('DATA', None, os.path.join(basedir, windowsify('data')))
|
||||
self.add('ICONS', None, os.path.join(basedir, windowsify('icons')))
|
||||
self.add('HOME', None, fse(os.path.expanduser('~')))
|
||||
self.add('PLUGINS_BASE', None, os.path.join(basedir,
|
||||
windowsify(u'plugins')))
|
||||
windowsify('plugins')))
|
||||
try:
|
||||
self.add('TMP', None, fse(tempfile.gettempdir()))
|
||||
except IOError, e:
|
||||
print >> sys.stderr, 'Error opening tmp folder: %s\nUsing %s' % (
|
||||
str(e), os.path.expanduser('~'))
|
||||
except IOError as e:
|
||||
print('Error opening tmp folder: %s\nUsing %s' % (str(e),
|
||||
os.path.expanduser('~')), file=sys.stderr)
|
||||
self.add('TMP', None, fse(os.path.expanduser('~')))
|
||||
|
||||
try:
|
||||
|
@ -173,17 +174,17 @@ class ConfigPaths:
|
|||
pass
|
||||
|
||||
def init_profile(self, profile=''):
|
||||
conffile = windowsify(u'config')
|
||||
pidfile = windowsify(u'gajim')
|
||||
secretsfile = windowsify(u'secrets')
|
||||
pluginsconfdir = windowsify(u'pluginsconfig')
|
||||
conffile = windowsify('config')
|
||||
pidfile = windowsify('gajim')
|
||||
secretsfile = windowsify('secrets')
|
||||
pluginsconfdir = windowsify('pluginsconfig')
|
||||
|
||||
if len(profile) > 0:
|
||||
conffile += u'.' + profile
|
||||
pidfile += u'.' + profile
|
||||
secretsfile += u'.' + profile
|
||||
pluginsconfdir += u'.' + profile
|
||||
pidfile += u'.pid'
|
||||
conffile += '.' + profile
|
||||
pidfile += '.' + profile
|
||||
secretsfile += '.' + profile
|
||||
pluginsconfdir += '.' + profile
|
||||
pidfile += '.pid'
|
||||
self.add('CONFIG_FILE', TYPE_CONFIG, conffile)
|
||||
self.add('PID_FILE', TYPE_CACHE, pidfile)
|
||||
self.add('SECRETS_FILE', TYPE_DATA, secretsfile)
|
||||
|
|
|
@ -59,7 +59,7 @@ from common import gpg
|
|||
from common import passwords
|
||||
from common import exceptions
|
||||
from common import check_X509
|
||||
from connection_handlers import *
|
||||
from common.connection_handlers import *
|
||||
|
||||
if gajim.HAVE_PYOPENSSL:
|
||||
import OpenSSL.crypto
|
||||
|
@ -312,8 +312,7 @@ class CommonConnection:
|
|||
else:
|
||||
def encrypt_thread(msg, keyID, always_trust=False):
|
||||
# encrypt message. This function returns (msgenc, error)
|
||||
return self.gpg.encrypt(msg.encode('utf-8'), [keyID],
|
||||
always_trust)
|
||||
return self.gpg.encrypt(msg, [keyID], always_trust)
|
||||
def _on_encrypted(output):
|
||||
msgenc, error = output
|
||||
if error == 'NOT_TRUSTED':
|
||||
|
@ -329,7 +328,7 @@ class CommonConnection:
|
|||
form_node, user_nick, keyID, attention,
|
||||
correction_msg, callback)
|
||||
gajim.nec.push_incoming_event(GPGTrustKeyEvent(None,
|
||||
conn=self, callback=_on_always_trust))
|
||||
conn=self, keyID=keyID, callback=_on_always_trust))
|
||||
else:
|
||||
self._message_encrypted_cb(output, type_, msg, msgtxt,
|
||||
original_message, fjid, resource, jid, xhtml,
|
||||
|
@ -519,7 +518,7 @@ class CommonConnection:
|
|||
log_msg = '<body xmlns="%s">%s</body>' % (
|
||||
nbxmpp.NS_XHTML, xhtml)
|
||||
gajim.logger.write(kind, jid, log_msg)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
self.dispatch('DB_ERROR', (_('Disk Write Error'),
|
||||
str(e)))
|
||||
except exceptions.DatabaseMalformed:
|
||||
|
@ -680,10 +679,10 @@ class CommonConnection:
|
|||
if realm == '':
|
||||
if event == nbxmpp.transports_nb.DATA_RECEIVED:
|
||||
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:
|
||||
gajim.nec.push_incoming_event(StanzaSentEvent(None, conn=self,
|
||||
stanza_str=unicode(data)))
|
||||
stanza_str=data))
|
||||
|
||||
def change_status(self, show, msg, auto=False):
|
||||
if not msg:
|
||||
|
@ -779,7 +778,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
self.private_storage_supported = True
|
||||
self.privacy_rules_requested = False
|
||||
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
|
||||
|
||||
|
@ -981,8 +980,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
self.connection.SendAndCallForResponse(iq,
|
||||
_on_register_result)
|
||||
else:
|
||||
if self.new_account_form.keys().sort() != \
|
||||
conf.keys().sort():
|
||||
if list(self.new_account_form.keys()).sort() != \
|
||||
list(conf.keys()).sort():
|
||||
# requested config has changed since first connection
|
||||
reason = _('Server %s provided a different '
|
||||
'registration form') % data[0]
|
||||
|
@ -1239,11 +1238,9 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
if not os.path.exists(cacerts):
|
||||
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')
|
||||
secure_tuple = (self._current_type, cacerts, mycerts, tls_version, cipher_list)
|
||||
secure_tuple = (self._current_type, cacerts, mycerts, cipher_list)
|
||||
|
||||
con = nbxmpp.NonBlockingClient(
|
||||
domain=self._hostname,
|
||||
|
@ -1391,41 +1388,40 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
cert = con.Connection.ssl_certificate
|
||||
if errnum > 0 and str(errnum) not in gajim.config.get_per('accounts',
|
||||
self.name, 'ignore_ssl_errors').split():
|
||||
text = _('The authenticity of the %s certificate could be invlid') \
|
||||
% hostname
|
||||
text = _('The authenticity of the %s certificate could be invalid'
|
||||
) % hostname
|
||||
if errnum in ssl_error:
|
||||
text += _('\nSSL Error: <b>%s</b>') % ssl_error[errnum]
|
||||
else:
|
||||
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,
|
||||
cert)
|
||||
cert).decode('utf-8')
|
||||
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
||||
error_text=text, error_num=errnum, cert=pem,
|
||||
fingerprint=fingerprint, certificate=cert))
|
||||
return True
|
||||
if cert:
|
||||
fingerprint = cert.digest('sha1')
|
||||
fingerprint = cert.digest('sha1').decode('utf-8')
|
||||
saved_fingerprint = gajim.config.get_per('accounts', self.name,
|
||||
'ssl_fingerprint_sha1')
|
||||
if saved_fingerprint:
|
||||
# Check sha1 fingerprint
|
||||
if fingerprint != saved_fingerprint:
|
||||
gajim.nec.push_incoming_event(FingerprintErrorEvent(None,
|
||||
conn=self, certificate=con.Connection.ssl_certificate,
|
||||
conn=self, certificate=cert,
|
||||
new_fingerprint=fingerprint))
|
||||
return True
|
||||
else:
|
||||
gajim.config.set_per('accounts', self.name,
|
||||
'ssl_fingerprint_sha1', fingerprint)
|
||||
if not check_X509.check_certificate(con.Connection.ssl_certificate,
|
||||
hostname) and '100' not in gajim.config.get_per('accounts',
|
||||
self.name, 'ignore_ssl_errors').split():
|
||||
fingerprint = cert.digest('sha1')
|
||||
if not check_X509.check_certificate(cert, hostname) and \
|
||||
'100' not in gajim.config.get_per('accounts', self.name,
|
||||
'ignore_ssl_errors').split():
|
||||
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 '
|
||||
'invalid.\nThe certificate does not cover this domain.') % \
|
||||
'invalid.\nThe certificate does not cover this domain.') %\
|
||||
hostname
|
||||
gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self,
|
||||
error_text=txt, error_num=100, cert=pem,
|
||||
|
@ -1523,7 +1519,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
self.connection.send(' ')
|
||||
|
||||
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
|
||||
self.awaiting_xmpp_ping_id = None
|
||||
|
||||
|
@ -1772,9 +1768,9 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
gajim.nec.push_incoming_event(OurShowEvent(None, conn=self,
|
||||
show=gajim.SHOW_LIST[self.connected]))
|
||||
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.') % \
|
||||
self.name)))
|
||||
self.name))
|
||||
return
|
||||
# If we are already connected, and privacy rules are supported, send
|
||||
# offline presence first as it's required by XEP-0126
|
||||
|
@ -1800,7 +1796,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
self.activate_privacy_rule('invisible')
|
||||
self.connected = gajim.SHOW_LIST.index('invisible')
|
||||
self.status = msg
|
||||
priority = unicode(gajim.get_priority(self.name, 'invisible'))
|
||||
priority = gajim.get_priority(self.name, 'invisible')
|
||||
p = nbxmpp.Presence(priority=priority)
|
||||
p = self.add_sha(p, True)
|
||||
if msg:
|
||||
|
@ -1981,7 +1977,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
p.setStatus(msg)
|
||||
else:
|
||||
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 = self.add_sha(p)
|
||||
if msg:
|
||||
|
@ -2005,7 +2001,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
|
||||
def _update_status(self, show, msg):
|
||||
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 = self.add_sha(p)
|
||||
if msg:
|
||||
|
@ -2047,6 +2043,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
return
|
||||
if isinstance(jid, list):
|
||||
for j in jid:
|
||||
if session is None:
|
||||
session = self.get_or_create_session(j, '')
|
||||
self.log_message(j, msg, forward_from, session,
|
||||
original_message, subject, type_, xhtml)
|
||||
else:
|
||||
|
@ -2562,7 +2560,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
|
||||
p = nbxmpp.Presence(to='%s/%s' % (room_jid, nick),
|
||||
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_ = 'gajim_muc_' + id_ + '_' + h
|
||||
p.setID(id_)
|
||||
|
@ -2670,7 +2668,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
xmpp_show = helpers.get_xmpp_show(show)
|
||||
p = nbxmpp.Presence(to='%s/%s' % (jid, nick), typ=ptype,
|
||||
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_ = 'gajim_muc_' + id_ + '_' + h
|
||||
p.setID(id_)
|
||||
|
@ -2847,6 +2845,19 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
"""
|
||||
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)
|
||||
c = message.addChild(name='x', namespace=nbxmpp.NS_MUC_USER)
|
||||
c = c.addChild(name='invite', attrs={'to': to})
|
||||
|
@ -2889,7 +2900,7 @@ class Connection(CommonConnection, ConnectionHandlers):
|
|||
return
|
||||
if self.awaiting_xmpp_ping_id:
|
||||
# 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()
|
||||
|
||||
def _reconnect_alarm(self):
|
||||
|
|
|
@ -33,17 +33,16 @@ import base64
|
|||
import sys
|
||||
import operator
|
||||
import hashlib
|
||||
import gobject
|
||||
import locale
|
||||
from gi.repository import GLib
|
||||
|
||||
from time import (altzone, daylight, gmtime, localtime, mktime, strftime,
|
||||
time as time_time, timezone, tzname)
|
||||
from calendar import timegm
|
||||
|
||||
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 gajim
|
||||
from common import exceptions
|
||||
|
@ -188,8 +187,8 @@ class ConnectionDisco:
|
|||
if not self.connection or self.connected < 2:
|
||||
return
|
||||
frm = helpers.get_full_jid_from_iq(iq_obj)
|
||||
to = unicode(iq_obj.getAttr('to'))
|
||||
id_ = unicode(iq_obj.getAttr('id'))
|
||||
to = iq_obj.getAttr('to')
|
||||
id_ = iq_obj.getAttr('id')
|
||||
iq = nbxmpp.Iq(to=frm, typ='result', queryNS=nbxmpp.NS_DISCO, frm=to)
|
||||
iq.setAttr('id', id_)
|
||||
query = iq.setTag('query')
|
||||
|
@ -242,7 +241,7 @@ class ConnectionDisco:
|
|||
if self.commandInfoQuery(con, iq_obj):
|
||||
raise nbxmpp.NodeProcessed
|
||||
|
||||
id_ = unicode(iq_obj.getAttr('id'))
|
||||
id_ = iq_obj.getAttr('id')
|
||||
if id_[:6] == 'Gajim_':
|
||||
# We get this request from echo.server
|
||||
raise nbxmpp.NodeProcessed
|
||||
|
@ -329,7 +328,7 @@ class ConnectionVcard:
|
|||
os.remove(path)
|
||||
# create folder if needed
|
||||
if not os.path.isdir(path):
|
||||
os.mkdir(path, 0700)
|
||||
os.mkdir(path, 0o700)
|
||||
puny_nick = helpers.sanitize_filename(nick)
|
||||
path_to_file = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
|
||||
else:
|
||||
|
@ -338,7 +337,7 @@ class ConnectionVcard:
|
|||
fil = open(path_to_file, 'w')
|
||||
fil.write(str(card))
|
||||
fil.close()
|
||||
except IOError, e:
|
||||
except IOError as e:
|
||||
gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
|
||||
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 \
|
||||
'BINVAL' in vcard['PHOTO']:
|
||||
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)
|
||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||
iq2.getTag('PHOTO').setTagData('SHA', avatar_sha)
|
||||
|
@ -565,7 +564,7 @@ class ConnectionVcard:
|
|||
self.discover_ft_proxies()
|
||||
gajim.nec.push_incoming_event(RosterReceivedEvent(None,
|
||||
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:
|
||||
if iq_obj.getType() != 'error':
|
||||
self.privacy_rules_supported = True
|
||||
|
@ -619,7 +618,7 @@ class ConnectionVcard:
|
|||
|
||||
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTIONS_ARRIVED:
|
||||
# TODO
|
||||
print 'ARCHIVING_COLLECTIONS_ARRIVED'
|
||||
print('ARCHIVING_COLLECTIONS_ARRIVED')
|
||||
|
||||
elif self.awaiting_answers[id_][0] == ARCHIVING_COLLECTION_ARRIVED:
|
||||
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,
|
||||
msg=payload[0].getData(), nick=nick)
|
||||
elif payload[0].getName() == 'message':
|
||||
print 'Not implemented'
|
||||
print('Not implemented')
|
||||
chat = iq_obj.getTag('chat')
|
||||
if chat:
|
||||
with_ = chat.getAttr('with')
|
||||
|
@ -710,7 +709,7 @@ class ConnectionVcard:
|
|||
'BINVAL' in vcard['PHOTO']:
|
||||
photo = vcard['PHOTO']['BINVAL']
|
||||
try:
|
||||
photo_decoded = base64.decodestring(photo)
|
||||
photo_decoded = base64.b64decode(photo.encode('utf-8'))
|
||||
avatar_sha = hashlib.sha1(photo_decoded).hexdigest()
|
||||
except Exception:
|
||||
avatar_sha = ''
|
||||
|
@ -732,7 +731,7 @@ class ConnectionVcard:
|
|||
puny_nick = helpers.sanitize_filename(resource)
|
||||
# create folder if needed
|
||||
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)
|
||||
frm_jid += '/' + resource
|
||||
if photo_decoded:
|
||||
|
@ -1139,7 +1138,7 @@ class ConnectionHandlersBase:
|
|||
gajim.config.should_log(self.name, obj.jid):
|
||||
try:
|
||||
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)))
|
||||
except exceptions.DatabaseMalformed:
|
||||
pritext = _('Database Error')
|
||||
|
@ -1162,8 +1161,7 @@ class ConnectionHandlersBase:
|
|||
decmsg = self.gpg.decrypt(encmsg, keyID)
|
||||
decmsg = self.connection.Dispatcher.replace_non_character(decmsg)
|
||||
# \x00 chars are not allowed in C (so in GTK)
|
||||
obj.msgtxt = decmsg.replace('\x00', '').encode(
|
||||
locale.getpreferredencoding()).decode('utf-8')
|
||||
obj.msgtxt = decmsg.replace('\x00', '')
|
||||
obj.encrypted = 'xep27'
|
||||
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)
|
||||
if obj.receipt_request_tag and gajim.config.get_per('accounts',
|
||||
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:
|
||||
receipt = nbxmpp.Message(to=obj.fjid, typ='chat')
|
||||
receipt.setID(obj.id_)
|
||||
|
@ -1264,7 +1262,7 @@ class ConnectionHandlersBase:
|
|||
try:
|
||||
gajim.logger.write('error', frm, error_msg, tim=tim,
|
||||
subject=subject)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
self.dispatch('DB_ERROR', (_('Disk Write Error'), str(e)))
|
||||
except exceptions.DatabaseMalformed:
|
||||
pritext = _('Database Error')
|
||||
|
@ -1290,7 +1288,7 @@ class ConnectionHandlersBase:
|
|||
jid = gajim.get_jid_without_resource(jid)
|
||||
|
||||
try:
|
||||
return self.sessions[jid].values()
|
||||
return list(self.sessions[jid].values())
|
||||
except KeyError:
|
||||
return []
|
||||
|
||||
|
@ -1352,7 +1350,7 @@ class ConnectionHandlersBase:
|
|||
received a thread_id yet and returns the session that we last sent a
|
||||
message to
|
||||
"""
|
||||
sessions = self.sessions[jid].values()
|
||||
sessions = list(self.sessions[jid].values())
|
||||
|
||||
# sessions that we haven't received a thread ID in
|
||||
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
|
||||
"""
|
||||
try:
|
||||
sessions = self.sessions[jid].values()
|
||||
sessions = list(self.sessions[jid].values())
|
||||
|
||||
# filter out everything except the default session type
|
||||
chat_sessions = [s for s in sessions if isinstance(s,
|
||||
|
@ -1767,9 +1765,8 @@ ConnectionJingle, ConnectionIBBytestream):
|
|||
iq_obj = obj.stanza.buildReply('result')
|
||||
qp = iq_obj.setQuery()
|
||||
qp.setTagData('utc', strftime('%Y%m%dT%H:%M:%S', gmtime()))
|
||||
qp.setTagData('tz', helpers.decode_string(tzname[daylight]))
|
||||
qp.setTagData('display', helpers.decode_string(strftime('%c',
|
||||
localtime())))
|
||||
qp.setTagData('tz', tzname[daylight])
|
||||
qp.setTagData('display', strftime('%c', localtime()))
|
||||
else:
|
||||
iq_obj = obj.stanza.buildReply('error')
|
||||
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.file_props import FilesProp
|
||||
|
||||
import gtkgui_helpers
|
||||
if gajim.HAVE_PYOPENSSL:
|
||||
import OpenSSL.crypto
|
||||
|
||||
import logging
|
||||
log = logging.getLogger('gajim.c.connection_handlers_events')
|
||||
|
@ -221,11 +222,11 @@ class TimeResultReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
|
||||
try:
|
||||
t = datetime.datetime.strptime(utc_time, '%Y-%m-%dT%H:%M:%SZ')
|
||||
except ValueError, e:
|
||||
except ValueError:
|
||||
try:
|
||||
t = datetime.datetime.strptime(utc_time,
|
||||
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||
except ValueError, e:
|
||||
except ValueError as e:
|
||||
log.info('Wrong time format: %s' % str(e))
|
||||
return
|
||||
|
||||
|
@ -309,7 +310,7 @@ class RosterItemExchangeEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
try:
|
||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||
continue
|
||||
name = item.getAttr('name')
|
||||
contact = gajim.contacts.get_contact(self.conn.name, jid)
|
||||
|
@ -367,10 +368,10 @@ class RosterReceivedEvent(nec.NetworkIncomingEvent):
|
|||
try:
|
||||
j = helpers.parse_jid(jid)
|
||||
except Exception:
|
||||
print >> sys.stderr, _('JID %s is not RFC compliant. It '
|
||||
'will not be added to your roster. Use roster '
|
||||
'management tools such as '
|
||||
'http://jru.jabberstudio.org/ to remove it') % jid
|
||||
print(_('JID %s is not RFC compliant. It will not be added '
|
||||
'to your roster. Use roster management tools such as '
|
||||
'http://jru.jabberstudio.org/ to remove it') % jid,
|
||||
file=sys.stderr)
|
||||
else:
|
||||
infos = raw_roster[jid]
|
||||
if jid != our_jid and (not infos['subscription'] or \
|
||||
|
@ -402,7 +403,7 @@ class RosterSetReceivedEvent(nec.NetworkIncomingEvent):
|
|||
try:
|
||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('jid'))
|
||||
continue
|
||||
name = item.getAttr('name')
|
||||
sub = item.getAttr('subscription')
|
||||
|
@ -450,7 +451,7 @@ class MucAdminReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
try:
|
||||
jid = helpers.parse_jid(item.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % \
|
||||
log.warning('Invalid JID: %s, ignoring it' % \
|
||||
item.getAttr('jid'))
|
||||
continue
|
||||
affiliation = item.getAttr('affiliation')
|
||||
|
@ -492,7 +493,7 @@ class BookmarksHelper:
|
|||
try:
|
||||
jid = helpers.parse_jid(conf.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
|
||||
log.warning('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
|
||||
continue
|
||||
bm = {'name': conf.getAttr('name'),
|
||||
'jid': jid,
|
||||
|
@ -544,7 +545,7 @@ class PrivateStorageRosternotesReceivedEvent(nec.NetworkIncomingEvent):
|
|||
try:
|
||||
jid = helpers.parse_jid(note.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
|
||||
log.warning('Invalid JID: %s, ignoring it' % note.getAttr('jid'))
|
||||
continue
|
||||
annotation = note.getData()
|
||||
self.annotations[jid] = annotation
|
||||
|
@ -758,7 +759,7 @@ PresenceHelperEvent):
|
|||
try:
|
||||
self.get_jid_resource()
|
||||
except Exception:
|
||||
log.warn('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
|
||||
log.warning('Invalid JID: %s, ignoring it' % self.stanza.getFrom())
|
||||
return
|
||||
jid_list = gajim.contacts.get_jid_list(self.conn.name)
|
||||
self.timestamp = None
|
||||
|
@ -798,7 +799,8 @@ PresenceHelperEvent):
|
|||
and self.ptype == 'error':
|
||||
# Error presences may not include sent stanza, so we don't detect
|
||||
# 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:
|
||||
self.is_gc = True
|
||||
self.status = self.stanza.getStatus() or ''
|
||||
|
@ -906,7 +908,7 @@ class GcPresenceReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
try:
|
||||
gajim.logger.write('gcstatus', self.fjid, st,
|
||||
self.show)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
self.conn.dispatch('DB_ERROR', (_('Disk Write Error'),
|
||||
str(e)))
|
||||
except exceptions.DatabaseMalformed:
|
||||
|
@ -1038,7 +1040,7 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
try:
|
||||
self.fjid = helpers.parse_jid(address.getAttr('jid'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % address.getAttr(
|
||||
log.warning('Invalid JID: %s, ignoring it' % address.getAttr(
|
||||
'jid'))
|
||||
return
|
||||
self.jid = gajim.get_jid_without_resource(self.fjid)
|
||||
|
@ -1078,10 +1080,15 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
self.invite_tag = None
|
||||
self.decline_tag = None
|
||||
if not self.enc_tag:
|
||||
# Direct invitation?
|
||||
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
|
||||
namespace=nbxmpp.NS_CONFERENCE)
|
||||
# Mediated invitation?
|
||||
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',
|
||||
namespace=nbxmpp.NS_MUC_USER)
|
||||
|
@ -1182,7 +1189,6 @@ class ZeroconfMessageReceivedEvent(MessageReceivedEvent):
|
|||
self.fjid = key
|
||||
break
|
||||
|
||||
self.fjid = unicode(self.fjid)
|
||||
self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
|
||||
|
||||
def generate(self):
|
||||
|
@ -1195,25 +1201,47 @@ class GcInvitationReceivedEvent(nec.NetworkIncomingEvent):
|
|||
base_network_events = []
|
||||
|
||||
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')
|
||||
try:
|
||||
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
||||
self.reason = item.getTagData('reason')
|
||||
self.password = invite_tag.getTagData('password')
|
||||
|
||||
self.is_continued = False
|
||||
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
|
||||
jid = gajim.get_jid_without_resource(self.jid_from)
|
||||
if gajim.config.get_per('accounts', self.conn.name,
|
||||
'ignore_unknown_contacts') and not gajim.contacts.get_contacts(
|
||||
self.conn.name, jid):
|
||||
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
|
||||
|
||||
|
@ -1228,7 +1256,7 @@ class GcDeclineReceivedEvent(nec.NetworkIncomingEvent):
|
|||
try:
|
||||
self.jid_from = helpers.parse_jid(item.getAttr('from'))
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
||||
log.warning('Invalid JID: %s, ignoring it' % item.getAttr('from'))
|
||||
return
|
||||
jid = gajim.get_jid_without_resource(self.jid_from)
|
||||
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.errnum)
|
||||
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 = ''
|
||||
if self.conn.connection.Connection.ssl_certificate:
|
||||
self.ssl_fingerprint = \
|
||||
self.conn.connection.Connection.ssl_certificate.digest('sha1')
|
||||
cert = self.conn.connection.Connection.ssl_certificate
|
||||
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
|
||||
|
||||
class NewAccountNotConnectedEvent(nec.NetworkIncomingEvent):
|
||||
|
@ -1852,6 +1880,8 @@ class MetacontactsReceivedEvent(nec.NetworkIncomingEvent):
|
|||
# Metacontact tags
|
||||
# http://www.xmpp.org/extensions/xep-0209.html
|
||||
self.meta_list = {}
|
||||
# FIXME: disable metacontacts until they work correctly
|
||||
return True
|
||||
query = self.stanza.getTag('query')
|
||||
storage = query.getTag('storage')
|
||||
metas = storage.getTags('meta')
|
||||
|
@ -1965,7 +1995,7 @@ class AgentInfoReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
if self.id_ in self.conn.disco_info_ids:
|
||||
self.conn.disco_info_ids.remove(self.id_)
|
||||
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)
|
||||
return
|
||||
# According to XEP-0030:
|
||||
|
@ -2025,15 +2055,18 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
self.fjid = self.conn._ft_get_from(self.stanza)
|
||||
self.jid = gajim.get_jid_without_resource(self.fjid)
|
||||
if self.jingle_content:
|
||||
self.FT_content.use_security = bool(self.jingle_content.getTag(
|
||||
'security'))
|
||||
secu = self.jingle_content.getTag('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:
|
||||
self.FT_content.transport = JingleTransportSocks5()
|
||||
self.FT_content.transport.set_our_jid(
|
||||
self.FT_content.session.ourjid)
|
||||
self.FT_content.transport.set_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.transport_sid = self.FT_content.transport.sid
|
||||
self.FT_content.file_props = self.file_props
|
||||
|
@ -2071,7 +2104,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
if name == 'name':
|
||||
self.file_props.name = val
|
||||
if name == 'size':
|
||||
self.file_props.size = val
|
||||
self.file_props.size = int(val)
|
||||
if name == 'hash':
|
||||
self.file_props.algo = child.getAttr('algo')
|
||||
self.file_props.hash_ = val
|
||||
|
@ -2080,8 +2113,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
else:
|
||||
si = self.stanza.getTag('si')
|
||||
self.file_props = FilesProp.getNewFileProp(self.conn.name,
|
||||
unicode(si.getAttr('id'))
|
||||
)
|
||||
si.getAttr('id'))
|
||||
profile = si.getAttr('profile')
|
||||
if profile != nbxmpp.NS_FILE:
|
||||
self.conn.send_file_rejection(self.file_props, code='400',
|
||||
|
@ -2112,7 +2144,7 @@ class FileRequestReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
|||
if name == 'name':
|
||||
self.file_props.name = val
|
||||
if name == 'size':
|
||||
self.file_props.size = val
|
||||
self.file_props.size = int(val)
|
||||
mime_type = si.getAttr('mime-type')
|
||||
if mime_type is not None:
|
||||
self.file_props.mime_type = mime_type
|
||||
|
@ -2230,8 +2262,6 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
self.popup_title = _('New Message from %(nickname)s') % \
|
||||
{'nickname': nick}
|
||||
|
||||
self.popup_image = gtkgui_helpers.get_icon_path(self.popup_image, 48)
|
||||
|
||||
if not gajim.config.get('notify_on_new_message') or \
|
||||
not self.first_unread:
|
||||
self.do_popup = False
|
||||
|
@ -2286,6 +2316,28 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
|
||||
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):
|
||||
if gajim.jid_is_transport(pres_obj.jid):
|
||||
return True
|
||||
|
@ -2364,8 +2416,8 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
iconset = gajim.config.get('iconset')
|
||||
img_path = os.path.join(helpers.get_iconset_path(iconset),
|
||||
'48x48', show_image)
|
||||
self.popup_image = gtkgui_helpers.get_path_to_generic_or_avatar(
|
||||
img_path, jid=self.jid, suffix=suffix)
|
||||
self.popup_image_path = self.get_path_to_generic_or_avatar(img_path,
|
||||
jid=self.jid, suffix=suffix)
|
||||
|
||||
self.popup_timeout = gajim.config.get('notification_timeout')
|
||||
|
||||
|
@ -2411,6 +2463,7 @@ class NotificationEvent(nec.NetworkIncomingEvent):
|
|||
self.popup_event_type = ''
|
||||
self.popup_msg_type = ''
|
||||
self.popup_image = ''
|
||||
self.popup_image_path = ''
|
||||
self.popup_timeout = -1
|
||||
|
||||
self.do_command = False
|
||||
|
@ -2447,7 +2500,7 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent):
|
|||
self.session = None
|
||||
self.forward_from = None
|
||||
self.form_node = None
|
||||
self.original_message = ''
|
||||
self.original_message = None
|
||||
self.delayed = None
|
||||
self.callback = None
|
||||
self.callback_args = []
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
from functools import cmp_to_key
|
||||
|
||||
try:
|
||||
from common import caps_cache
|
||||
from common.account import Account
|
||||
import common.gajim
|
||||
except ImportError, e:
|
||||
except ImportError as e:
|
||||
if __name__ != "__main__":
|
||||
raise ImportError(e)
|
||||
raise ImportError(str(e))
|
||||
|
||||
class XMPPEntity(object):
|
||||
"""
|
||||
|
@ -94,6 +96,8 @@ class Contact(CommonContact):
|
|||
sub='', ask='', resource='', priority=0, keyID='', client_caps=None,
|
||||
our_chatstate=None, chatstate=None, last_status_time=None, msg_id=None,
|
||||
last_activity_time=None):
|
||||
if not isinstance(jid, str):
|
||||
print('no str')
|
||||
|
||||
CommonContact.__init__(self, jid, account, resource, show, status, name,
|
||||
our_chatstate, chatstate, client_caps=client_caps)
|
||||
|
@ -484,17 +488,18 @@ class Contacts():
|
|||
for c in self._contacts[jid]:
|
||||
if c.resource == resource:
|
||||
return c
|
||||
return self._contacts[jid][0]
|
||||
|
||||
def iter_contacts(self):
|
||||
for jid in self._contacts.keys():
|
||||
for jid in list(self._contacts.keys()):
|
||||
for contact in self._contacts[jid][:]:
|
||||
yield contact
|
||||
|
||||
def get_jid_list(self):
|
||||
return self._contacts.keys()
|
||||
return list(self._contacts.keys())
|
||||
|
||||
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()]
|
||||
|
||||
def get_contact_from_full_jid(self, fjid):
|
||||
|
@ -562,7 +567,7 @@ class GC_Contacts():
|
|||
gc_list = self.get_gc_list()
|
||||
if not room_jid in gc_list:
|
||||
return []
|
||||
return self._rooms[room_jid].keys()
|
||||
return list(self._rooms[room_jid].keys())
|
||||
|
||||
def get_gc_contact(self, room_jid, nick):
|
||||
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
|
||||
?
|
||||
"""
|
||||
family.sort(cmp=self._compare_metacontacts)
|
||||
family.sort(key=cmp_to_key(self._compare_metacontacts))
|
||||
return family[-1]
|
||||
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
import sys
|
||||
import os
|
||||
import math
|
||||
|
||||
|
@ -75,8 +76,54 @@ def base28(n):
|
|||
else:
|
||||
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_):
|
||||
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():
|
||||
return random_bytes(8)
|
||||
|
|
|
@ -27,7 +27,7 @@ information how to use them, read documentation
|
|||
"""
|
||||
|
||||
import nbxmpp
|
||||
import helpers
|
||||
from common import helpers
|
||||
|
||||
# exceptions used in this module
|
||||
# base class
|
||||
|
@ -195,7 +195,7 @@ class DataField(ExtendedNode):
|
|||
Human-readable description of field meaning
|
||||
"""
|
||||
def fget(self):
|
||||
return self.getTagData('desc') or u''
|
||||
return self.getTagData('desc') or ''
|
||||
|
||||
def fset(self, value):
|
||||
assert isinstance(value, basestring)
|
||||
|
@ -345,10 +345,10 @@ class StringField(DataField):
|
|||
@nested_property
|
||||
def value():
|
||||
"""
|
||||
Value of field. May be any unicode string
|
||||
Value of field. May be any string
|
||||
"""
|
||||
def fget(self):
|
||||
return self.getTagData('value') or u''
|
||||
return self.getTagData('value') or ''
|
||||
|
||||
def fset(self, value):
|
||||
assert isinstance(value, basestring)
|
||||
|
@ -494,7 +494,7 @@ class TextMultiField(DataField):
|
|||
Value held in field
|
||||
"""
|
||||
def fget(self):
|
||||
value = u''
|
||||
value = ''
|
||||
for element in self.iterTags('value'):
|
||||
value += '\n' + element.getData()
|
||||
return value[1:]
|
||||
|
@ -643,7 +643,7 @@ class DataForm(ExtendedNode):
|
|||
"""
|
||||
# TODO: the same code is in TextMultiField. join them
|
||||
def fget(self):
|
||||
value = u''
|
||||
value = ''
|
||||
for valuenode in self.getTags('instructions'):
|
||||
value += '\n' + valuenode.getData()
|
||||
return value[1:]
|
||||
|
|
|
@ -38,8 +38,8 @@ try:
|
|||
except ImportError:
|
||||
supported = False
|
||||
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 capabilities of Gajim cannot be used')
|
||||
print(_('D-Bus python bindings are missing in this computer'))
|
||||
print(_('D-Bus capabilities of Gajim cannot be used'))
|
||||
else:
|
||||
try:
|
||||
# test if dbus-x11 is installed
|
||||
|
@ -49,14 +49,14 @@ else:
|
|||
except dbus.DBusException:
|
||||
supported = False
|
||||
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 capabilities of Gajim cannot be used')
|
||||
print(_('D-Bus does not run correctly on this machine'))
|
||||
print(_('D-Bus capabilities of Gajim cannot be used'))
|
||||
except exceptions.SystemBusNotPresent:
|
||||
print _('D-Bus does not run correctly on this machine: system bus not '
|
||||
'present')
|
||||
print(_('D-Bus does not run correctly on this machine: system bus not '
|
||||
'present'))
|
||||
except exceptions.SessionBusNotPresent:
|
||||
print _('D-Bus does not run correctly on this machine: session bus not '
|
||||
'present')
|
||||
print(_('D-Bus does not run correctly on this machine: session bus not '
|
||||
'present'))
|
||||
|
||||
class SystemBus:
|
||||
"""
|
||||
|
@ -154,7 +154,7 @@ def get_interface(interface, path, start_service=True):
|
|||
return None
|
||||
obj = bus.get_object(interface, path)
|
||||
return dbus.Interface(obj, interface)
|
||||
except Exception, e:
|
||||
except Exception as e:
|
||||
gajim.log.debug(str(e))
|
||||
return None
|
||||
|
||||
|
|
|
@ -27,13 +27,13 @@ docdir = '../'
|
|||
basedir = '../'
|
||||
localedir = '../po'
|
||||
|
||||
version = '0.16'
|
||||
version = '0.16.10.0'
|
||||
import subprocess
|
||||
try:
|
||||
node = subprocess.Popen('hg tip --template "{node|short}"', shell=True,
|
||||
stdout=subprocess.PIPE).communicate()[0]
|
||||
if node:
|
||||
version += '-' + node
|
||||
version += '-' + node.decode('utf-8')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
|
|
@ -143,3 +143,15 @@ class PluginsystemError(Exception):
|
|||
|
||||
def __str__(self):
|
||||
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
|
||||
def getAllFileProp(cls):
|
||||
return cls._files_props.values()
|
||||
return list(cls._files_props.values())
|
||||
|
||||
@classmethod
|
||||
def setFileProp(cls, fp, account, sid):
|
||||
|
|
|
@ -31,10 +31,10 @@ import sys
|
|||
import logging
|
||||
import locale
|
||||
|
||||
import config
|
||||
from common import config
|
||||
import nbxmpp
|
||||
import defs
|
||||
import common.ged
|
||||
from common import defs
|
||||
from common import ged as ged_module
|
||||
|
||||
interface = None # The actual interface (the gtk one for the moment)
|
||||
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'
|
||||
ipython_window = None
|
||||
|
||||
ged = common.ged.GlobalEventsDispatcher() # Global Events Dispatcher
|
||||
ged = ged_module.GlobalEventsDispatcher() # Global Events Dispatcher
|
||||
nec = None # Network Events Controller
|
||||
plugin_manager = None # Plugins Manager
|
||||
|
||||
log = logging.getLogger('gajim')
|
||||
|
||||
import logger
|
||||
logger = logger.Logger() # init the logger
|
||||
logger = None
|
||||
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
gajimpaths = configpaths.gajimpaths
|
||||
|
||||
VCARD_PATH = gajimpaths['VCARD']
|
||||
|
@ -84,8 +83,8 @@ else:
|
|||
|
||||
os_info = None # used to cache os information
|
||||
|
||||
from contacts import LegacyContactsAPI
|
||||
from events import Events
|
||||
from common.contacts import LegacyContactsAPI
|
||||
from common.events import Events
|
||||
|
||||
gmail_domains = ['gmail.com', 'googlemail.com']
|
||||
|
||||
|
@ -159,7 +158,7 @@ except ImportError:
|
|||
|
||||
HAVE_GPG = True
|
||||
try:
|
||||
__import__('gnupg', globals(), locals(), [], -1)
|
||||
__import__('gnupg', globals(), locals(), [], 0)
|
||||
except ImportError:
|
||||
HAVE_GPG = False
|
||||
else:
|
||||
|
@ -185,6 +184,7 @@ except Exception:
|
|||
|
||||
HAVE_FARSTREAM = True
|
||||
try:
|
||||
raise ImportError
|
||||
farstream = __import__('farstream')
|
||||
import gst
|
||||
import glib
|
||||
|
@ -201,8 +201,8 @@ except ImportError:
|
|||
|
||||
HAVE_UPNP_IGD = True
|
||||
try:
|
||||
import gupnp.igd
|
||||
gupnp_igd = gupnp.igd.Simple()
|
||||
from gi.repository import GUPnPIgd
|
||||
gupnp_igd = GUPnPIgd.SimpleIgd()
|
||||
except ImportError:
|
||||
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_ROSTERX, nbxmpp.NS_SECLABEL, nbxmpp.NS_HASHES,
|
||||
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
|
||||
gajim_optional_features = {}
|
||||
|
@ -231,9 +231,6 @@ gajim_optional_features = {}
|
|||
# Capabilities hash per account
|
||||
caps_hash = {}
|
||||
|
||||
import caps_cache
|
||||
caps_cache.initialize(logger)
|
||||
|
||||
global_id = 0
|
||||
def get_an_id():
|
||||
global global_id
|
||||
|
@ -290,13 +287,8 @@ def get_jid_without_resource(jid):
|
|||
return jid.split('/')[0]
|
||||
|
||||
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
|
||||
# gaim@conference.jabber.org/nick
|
||||
if isinstance(nick, str):
|
||||
nick = unicode(nick, 'utf-8')
|
||||
return room_jid + '/' + nick
|
||||
|
||||
def get_resource_from_jid(jid):
|
||||
|
|
|
@ -79,8 +79,8 @@ class GlobalEventsDispatcher(object):
|
|||
if event_name in self.handlers:
|
||||
try:
|
||||
self.handlers[event_name].remove((priority, handler))
|
||||
except ValueError, error:
|
||||
log.warn('''Function (%s) with priority "%s" never registered
|
||||
except ValueError:
|
||||
log.warning('''Function (%s) with priority "%s" never registered
|
||||
as handler of event "%s". Couldn\'t remove. Error: %s'''
|
||||
%(handler, priority, event_name, error))
|
||||
|
||||
|
@ -94,7 +94,7 @@ class GlobalEventsDispatcher(object):
|
|||
return True
|
||||
except NodeProcessed:
|
||||
node_processed = True
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
log.error('Error while running an even handler: %s' % \
|
||||
handler)
|
||||
traceback.print_exc()
|
||||
|
|
|
@ -175,7 +175,7 @@ class Verify(object):
|
|||
"PLAINTEXT_LENGTH", "POLICY_URL", "DECRYPTION_INFO",
|
||||
"DECRYPTION_OKAY", "INV_SGNR", "FILE_START", "FILE_ERROR",
|
||||
"FILE_DONE", "PKA_TRUST_GOOD", "PKA_TRUST_BAD", "BADMDC",
|
||||
"GOODMDC", "NO_SGNR"):
|
||||
"GOODMDC", "NO_SGNR", "NOTATION_NAME", "NOTATION_DATA"):
|
||||
pass
|
||||
elif key == "BADSIG":
|
||||
self.valid = False
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
from gajim import HAVE_GPG
|
||||
from common.gajim import HAVE_GPG
|
||||
import os
|
||||
|
||||
if HAVE_GPG:
|
||||
import gnupg
|
||||
from common import gnupg
|
||||
|
||||
class GnuPG(gnupg.GPG):
|
||||
def __init__(self, use_agent=False):
|
||||
|
@ -34,7 +34,7 @@ if HAVE_GPG:
|
|||
self.decode_errors = 'replace'
|
||||
self.passphrase = None
|
||||
self.use_agent = use_agent
|
||||
self.always_trust = False
|
||||
self.always_trust = [] # list of keyID to always trust
|
||||
|
||||
def _setup_my_options(self):
|
||||
self.options.armor = 1
|
||||
|
@ -47,8 +47,14 @@ if HAVE_GPG:
|
|||
self.options.extra_args.append('--use-agent')
|
||||
|
||||
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,
|
||||
always_trust=always_trust, passphrase=self.passphrase)
|
||||
always_trust=trust, passphrase=self.passphrase)
|
||||
|
||||
if result.status == 'invalid recipient':
|
||||
return '', 'NOT_TRUSTED'
|
||||
|
@ -80,14 +86,21 @@ if HAVE_GPG:
|
|||
def verify(self, str_, sign):
|
||||
if str_ is None:
|
||||
return ''
|
||||
data = '-----BEGIN PGP SIGNED MESSAGE-----' + os.linesep
|
||||
data = data + 'Hash: SHA1' + os.linesep + os.linesep
|
||||
data = data + str_ + os.linesep
|
||||
data = data + self._addHeaderFooter(sign, 'SIGNATURE')
|
||||
result = super(GnuPG, self).verify(data)
|
||||
# Hash algorithm is not transfered in the signed presence stanza so try
|
||||
# all algorithms. Text name for hash algorithms from RFC 4880 - section 9.4
|
||||
hash_algorithms = ['SHA512', 'SHA384', 'SHA256', 'SHA224', 'SHA1', 'RIPEMD160']
|
||||
for algo in hash_algorithms:
|
||||
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 ''
|
||||
|
||||
def get_keys(self, secret=False):
|
||||
|
|
|
@ -35,22 +35,23 @@ import locale
|
|||
import os
|
||||
import subprocess
|
||||
import urllib
|
||||
import urllib2
|
||||
import urllib
|
||||
import webbrowser
|
||||
import errno
|
||||
import select
|
||||
import base64
|
||||
import hashlib
|
||||
import shlex
|
||||
import caps_cache
|
||||
from common import caps_cache
|
||||
import socket
|
||||
import time
|
||||
|
||||
from gi.repository import GObject
|
||||
from encodings.punycode import punycode_encode
|
||||
from string import Template
|
||||
|
||||
from i18n import Q_
|
||||
from i18n import ngettext
|
||||
from common.i18n import Q_
|
||||
from common.i18n import ngettext
|
||||
|
||||
try:
|
||||
import winsound # windows-only built-in module for playing wav
|
||||
|
@ -121,7 +122,7 @@ def idn_to_ascii(host):
|
|||
labels = idna.dots.split(host)
|
||||
converted_labels = []
|
||||
for label in labels:
|
||||
converted_labels.append(idna.ToASCII(label))
|
||||
converted_labels.append(idna.ToASCII(label).decode('utf-8'))
|
||||
return ".".join(converted_labels)
|
||||
|
||||
def ascii_to_idn(host):
|
||||
|
@ -143,9 +144,9 @@ def parse_resource(resource):
|
|||
if resource:
|
||||
try:
|
||||
from nbxmpp.stringprepare import resourceprep
|
||||
return resourceprep.prepare(unicode(resource))
|
||||
return resourceprep.prepare(resource)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, 'Invalid character in resource.'
|
||||
raise InvalidFormat('Invalid character in 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
|
||||
if user is not None:
|
||||
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:
|
||||
from nbxmpp.stringprepare import nodeprep
|
||||
user = nodeprep.prepare(unicode(user))
|
||||
user = nodeprep.prepare(user)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in username.')
|
||||
raise InvalidFormat(_('Invalid character in username.'))
|
||||
else:
|
||||
user = None
|
||||
|
||||
if server is not None:
|
||||
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:
|
||||
from nbxmpp.stringprepare import nameprep
|
||||
server = nameprep.prepare(unicode(server))
|
||||
server = nameprep.prepare(server)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in hostname.')
|
||||
raise InvalidFormat(_('Invalid character in hostname.'))
|
||||
else:
|
||||
raise InvalidFormat, _('Server address required.')
|
||||
raise InvalidFormat(_('Server address required.'))
|
||||
|
||||
if resource is not None:
|
||||
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:
|
||||
from nbxmpp.stringprepare import resourceprep
|
||||
resource = resourceprep.prepare(unicode(resource))
|
||||
resource = resourceprep.prepare(resource)
|
||||
except UnicodeError:
|
||||
raise InvalidFormat, _('Invalid character in resource.')
|
||||
raise InvalidFormat(_('Invalid character in resource.'))
|
||||
else:
|
||||
resource = None
|
||||
|
||||
|
@ -206,7 +207,7 @@ def temp_failure_retry(func, *args, **kwargs):
|
|||
while True:
|
||||
try:
|
||||
return func(*args, **kwargs)
|
||||
except (os.error, IOError, select.error), ex:
|
||||
except (os.error, IOError, select.error) as ex:
|
||||
if ex.errno == errno.EINTR:
|
||||
continue
|
||||
else:
|
||||
|
@ -263,7 +264,7 @@ def get_uf_show(show, use_mnemonic = False):
|
|||
uf_show = Q_('?contact has status:Unknown')
|
||||
else:
|
||||
uf_show = Q_('?contact has status:Has errors')
|
||||
return unicode(uf_show)
|
||||
return uf_show
|
||||
|
||||
def get_uf_sub(sub):
|
||||
if sub == 'none':
|
||||
|
@ -277,7 +278,7 @@ def get_uf_sub(sub):
|
|||
else:
|
||||
uf_sub = sub
|
||||
|
||||
return unicode(uf_sub)
|
||||
return uf_sub
|
||||
|
||||
def get_uf_ask(ask):
|
||||
if ask is None:
|
||||
|
@ -287,7 +288,7 @@ def get_uf_ask(ask):
|
|||
else:
|
||||
uf_ask = ask
|
||||
|
||||
return unicode(uf_ask)
|
||||
return uf_ask
|
||||
|
||||
def get_uf_role(role, plural = False):
|
||||
''' plural determines if you get Moderators or Moderator'''
|
||||
|
@ -397,7 +398,7 @@ def exec_command(command, use_shell=False):
|
|||
if use_shell:
|
||||
subprocess.Popen('%s &' % command, shell=True).wait()
|
||||
else:
|
||||
args = shlex.split(command.encode('utf-8'))
|
||||
args = shlex.split(command)
|
||||
p = subprocess.Popen(args)
|
||||
gajim.thread_interface(p.wait)
|
||||
|
||||
|
@ -409,7 +410,7 @@ def build_command(executable, parameter):
|
|||
return command
|
||||
|
||||
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
|
||||
# get the path to file
|
||||
if re.match('^file:///[a-zA-Z]:/', path): # windows
|
||||
|
@ -447,33 +448,6 @@ def get_output_of_command(command):
|
|||
|
||||
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=''):
|
||||
"""
|
||||
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)
|
||||
'Desktop' = %USERPROFILE%\Desktop
|
||||
'Favorites' = %USERPROFILE%\Favorites
|
||||
'NetHood' = %USERPROFILE%\NetHood
|
||||
'NetHood' = %USERPROFILE%\ NetHood
|
||||
'Personal' = D:\My Documents (PATH TO MY DOCUMENTS)
|
||||
'PrintHood' = %USERPROFILE%\PrintHood
|
||||
'Programs' = %USERPROFILE%\Start Menu\Programs
|
||||
|
@ -540,10 +514,11 @@ def sanitize_filename(filename):
|
|||
"""
|
||||
# 48 is the limit
|
||||
if len(filename) > 48:
|
||||
hash = hashlib.md5(filename)
|
||||
filename = base64.b64encode(hash.digest())
|
||||
hash = hashlib.md5(filename.encode('utf-8'))
|
||||
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('/', '_')
|
||||
if os.name == 'nt':
|
||||
filename = filename.replace('?', '_').replace(':', '_')\
|
||||
|
@ -565,9 +540,6 @@ def reduce_chars_newlines(text, max_chars = 0, max_lines = 0):
|
|||
string = string[:max_chars - 3] + '...'
|
||||
return string
|
||||
|
||||
if isinstance(text, str):
|
||||
text = text.decode('utf-8')
|
||||
|
||||
if max_lines == 0:
|
||||
lines = text.split('\n')
|
||||
else:
|
||||
|
@ -623,12 +595,10 @@ def datetime_tuple(timestamp):
|
|||
from time import strptime
|
||||
return strptime(timestamp, '%Y%m%dT%H:%M:%S')
|
||||
|
||||
# import gajim only when needed (after decode_string is defined) see #4764
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
if gajim.HAVE_PYCURL:
|
||||
import pycurl
|
||||
from cStringIO import StringIO
|
||||
from io import StringIO
|
||||
|
||||
def convert_bytes(string):
|
||||
suffix = ''
|
||||
|
@ -636,13 +606,13 @@ def convert_bytes(string):
|
|||
# but do we use the standard?
|
||||
use_kib_mib = gajim.config.get('use_kib_mib')
|
||||
align = 1024.
|
||||
bytes = float(string)
|
||||
if bytes >= align:
|
||||
bytes = round(bytes/align, 1)
|
||||
if bytes >= align:
|
||||
bytes = round(bytes/align, 1)
|
||||
if bytes >= align:
|
||||
bytes = round(bytes/align, 1)
|
||||
bytes_ = float(string)
|
||||
if bytes_ >= align:
|
||||
bytes_ = round(bytes_/align, 1)
|
||||
if bytes_ >= align:
|
||||
bytes_ = round(bytes_/align, 1)
|
||||
if bytes_ >= align:
|
||||
bytes_ = round(bytes_/align, 1)
|
||||
if use_kib_mib:
|
||||
#GiB means gibibyte
|
||||
suffix = _('%s GiB')
|
||||
|
@ -666,7 +636,7 @@ def convert_bytes(string):
|
|||
else:
|
||||
#B means bytes
|
||||
suffix = _('%s B')
|
||||
return suffix % unicode(bytes)
|
||||
return suffix % str(bytes_)
|
||||
|
||||
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):
|
||||
"""
|
||||
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()))
|
||||
|
||||
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)
|
||||
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 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):
|
||||
if string:
|
||||
|
@ -943,7 +914,7 @@ def get_random_string_16():
|
|||
"""
|
||||
Create random string of length 16
|
||||
"""
|
||||
rng = range(65, 90)
|
||||
rng = list(range(65, 90))
|
||||
rng.extend(range(48, 57))
|
||||
char_sequence = [chr(e) for e in rng]
|
||||
from random import sample
|
||||
|
@ -984,8 +955,10 @@ def get_os_info():
|
|||
p.wait()
|
||||
output = temp_failure_retry(p.stdout.readline).strip()
|
||||
# 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
|
||||
p.stdout.close()
|
||||
p.stdin.close()
|
||||
return output
|
||||
|
||||
# lsb_release executable not available, so parse files
|
||||
|
@ -1419,7 +1392,7 @@ def get_proxy_info(account):
|
|||
login = ['', '']
|
||||
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:
|
||||
proxy['port'] = addr[1]
|
||||
|
@ -1430,7 +1403,7 @@ def get_proxy_info(account):
|
|||
proxy['pass'] = login[1]
|
||||
proxy['useauth'] = True
|
||||
else:
|
||||
proxy['pass'] = u''
|
||||
proxy['pass'] = ''
|
||||
return proxy
|
||||
|
||||
except Exception:
|
||||
|
@ -1449,14 +1422,15 @@ def _get_img_direct(attrs):
|
|||
"""
|
||||
Download an image. This function should be launched in a separated thread.
|
||||
"""
|
||||
mem, alt = '', ''
|
||||
mem = b''
|
||||
alt = ''
|
||||
# Wait maximum 5s for connection
|
||||
socket.setdefaulttimeout(5)
|
||||
try:
|
||||
req = urllib2.Request(attrs['src'])
|
||||
req = urllib.request.Request(attrs['src'])
|
||||
req.add_header('User-Agent', 'Gajim ' + gajim.version)
|
||||
f = urllib2.urlopen(req)
|
||||
except Exception, ex:
|
||||
f = urllib.request.urlopen(req)
|
||||
except Exception as ex:
|
||||
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
||||
pixbuf = None
|
||||
alt = attrs.get('alt', 'Broken image')
|
||||
|
@ -1479,7 +1453,7 @@ def _get_img_direct(attrs):
|
|||
break
|
||||
try:
|
||||
temp = f.read(100)
|
||||
except socket.timeout, ex:
|
||||
except socket.timeout as ex:
|
||||
log.debug('Timeout loading image %s ' % attrs['src'] + str(ex))
|
||||
alt = attrs.get('alt', '')
|
||||
if alt:
|
||||
|
@ -1496,6 +1470,7 @@ def _get_img_direct(attrs):
|
|||
alt += '\n'
|
||||
alt += _('Image is too big')
|
||||
break
|
||||
f.close()
|
||||
return (mem, alt)
|
||||
|
||||
def _get_img_proxy(attrs, proxy):
|
||||
|
@ -1531,17 +1506,17 @@ def _get_img_proxy(attrs, proxy):
|
|||
c.close()
|
||||
t = b.getvalue()
|
||||
return (t, attrs.get('alt', ''))
|
||||
except pycurl.error, ex:
|
||||
except pycurl.error as ex:
|
||||
alt = attrs.get('alt', '')
|
||||
if alt:
|
||||
alt += '\n'
|
||||
if ex[0] == pycurl.E_FILESIZE_EXCEEDED:
|
||||
if ex.errno == pycurl.E_FILESIZE_EXCEEDED:
|
||||
alt += _('Image is too big')
|
||||
elif ex[0] == pycurl.E_OPERATION_TIMEOUTED:
|
||||
elif ex.errno == pycurl.E_OPERATION_TIMEOUTED:
|
||||
alt += _('Timeout loading image')
|
||||
else:
|
||||
alt += _('Error loading image')
|
||||
except Exception, ex:
|
||||
except Exception as ex:
|
||||
log.debug('Error loading image %s ' % attrs['src'] + str(ex))
|
||||
pixbuf = None
|
||||
alt = attrs.get('alt', 'Broken image')
|
||||
|
|
|
@ -24,11 +24,11 @@
|
|||
import locale
|
||||
import gettext
|
||||
import os
|
||||
import defs
|
||||
from common import defs
|
||||
import unicodedata
|
||||
|
||||
# May be changed after GTK is imported
|
||||
direction_mark = u'\u200E'
|
||||
direction_mark = '\u200E'
|
||||
|
||||
def paragraph_direction_mark(text):
|
||||
"""
|
||||
|
@ -40,11 +40,11 @@ def paragraph_direction_mark(text):
|
|||
for char in text:
|
||||
bidi = unicodedata.bidirectional(char)
|
||||
if bidi == 'L':
|
||||
return u'\u200E'
|
||||
return '\u200E'
|
||||
elif bidi == 'AL' or bidi == 'R':
|
||||
return u'\u200F'
|
||||
return '\u200F'
|
||||
|
||||
return u'\u200E'
|
||||
return '\u200E'
|
||||
|
||||
APP = 'gajim'
|
||||
DIR = defs.localedir
|
||||
|
@ -64,9 +64,9 @@ if os.name == 'nt':
|
|||
if lang:
|
||||
os.environ['LANG'] = lang
|
||||
|
||||
gettext.install(APP, DIR, unicode = True)
|
||||
gettext.install(APP, DIR)
|
||||
if gettext._translations:
|
||||
_translation = gettext._translations.values()[0]
|
||||
_translation = list(gettext._translations.values())[0]
|
||||
else:
|
||||
_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..
|
||||
"""
|
||||
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:
|
||||
text = text % replace_sing
|
||||
elif n > 1 and replace_plural is not None:
|
||||
|
|
|
@ -68,7 +68,7 @@ try:
|
|||
|
||||
rootwindow = libX11.XDefaultRootWindow(dpy_p)
|
||||
xss_available = True
|
||||
except OSError, e:
|
||||
except OSError:
|
||||
# Logging?
|
||||
xss_available = False
|
||||
|
||||
|
@ -94,6 +94,6 @@ def close():
|
|||
if __name__ == '__main__':
|
||||
import time
|
||||
time.sleep(2.1)
|
||||
print getIdleSec()
|
||||
print(getIdleSec())
|
||||
close()
|
||||
print getIdleSec()
|
||||
print(getIdleSec())
|
||||
|
|
|
@ -29,14 +29,14 @@ Handles the jingle signalling protocol
|
|||
# - codecs
|
||||
|
||||
import nbxmpp
|
||||
import helpers
|
||||
import gajim
|
||||
from common import helpers
|
||||
from common import gajim
|
||||
|
||||
from jingle_session import JingleSession, JingleStates
|
||||
from common.jingle_session import JingleSession, JingleStates
|
||||
if gajim.HAVE_FARSTREAM:
|
||||
from jingle_rtp import JingleAudio, JingleVideo
|
||||
from jingle_ft import JingleFileTransfer
|
||||
from jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
||||
from common.jingle_rtp import JingleAudio, JingleVideo
|
||||
from common.jingle_ft import JingleFileTransfer
|
||||
from common.jingle_transport import JingleTransportSocks5, JingleTransportIBB
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger('gajim.c.jingle')
|
||||
|
@ -80,7 +80,7 @@ class ConnectionJingle(object):
|
|||
try:
|
||||
jid = helpers.get_full_jid_from_iq(stanza)
|
||||
except helpers.InvalidFormat:
|
||||
log.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
|
||||
logger.warn('Invalid JID: %s, ignoring it' % stanza.getFrom())
|
||||
return
|
||||
id_ = stanza.getID()
|
||||
if (jid, id_) in self.__iq_responses.keys():
|
||||
|
@ -170,14 +170,14 @@ class ConnectionJingle(object):
|
|||
|
||||
def __hash_support(self, contact):
|
||||
if contact.supports(nbxmpp.NS_HASHES):
|
||||
if contact.supports(nbxmpp.NS_HASHES_MD5):
|
||||
return 'md5'
|
||||
elif contact.supports(nbxmpp.NS_HASHES_SHA1):
|
||||
return 'sha-1'
|
||||
if contact.supports(nbxmpp.NS_HASHES_SHA512):
|
||||
return 'sha-512'
|
||||
elif contact.supports(nbxmpp.NS_HASHES_SHA256):
|
||||
return 'sha-256'
|
||||
elif contact.supports(nbxmpp.NS_HASHES_SHA512):
|
||||
return 'sha-512'
|
||||
elif contact.supports(nbxmpp.NS_HASHES_SHA1):
|
||||
return 'sha-1'
|
||||
elif contact.supports(nbxmpp.NS_HASHES_MD5):
|
||||
return 'md5'
|
||||
return 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):
|
||||
return session
|
||||
return None
|
||||
|
||||
|
|
|
@ -17,9 +17,12 @@
|
|||
Handles Jingle contents (XEP 0166)
|
||||
"""
|
||||
|
||||
import gajim
|
||||
import os
|
||||
from common import gajim
|
||||
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 = {}
|
||||
|
||||
|
@ -193,7 +196,7 @@ class JingleContent(object):
|
|||
else:
|
||||
# if the file is less than 10 mb, then it is small
|
||||
# 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_:
|
||||
h = self._calcHash()
|
||||
file_tag.addChild(node=h)
|
||||
|
@ -213,12 +216,18 @@ class JingleContent(object):
|
|||
if self.use_security:
|
||||
security = nbxmpp.simplexml.Node(
|
||||
tag=nbxmpp.NS_JINGLE_XTLS + ' security')
|
||||
# TODO: add fingerprint element
|
||||
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)
|
||||
certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE)\
|
||||
+ '.cert'
|
||||
cert = load_cert_file(certpath)
|
||||
if cert:
|
||||
digest_algo = cert.get_signature_algorithm().split('With')[0]
|
||||
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)
|
||||
|
||||
def destroy(self):
|
||||
|
|
|
@ -20,16 +20,17 @@ Handles Jingle File Transfer (XEP 0234)
|
|||
"""
|
||||
|
||||
import hashlib
|
||||
import gajim
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_content import contents, JingleContent
|
||||
from jingle_transport import *
|
||||
from . import jingle_xtls
|
||||
from common.jingle_content import contents, JingleContent
|
||||
from common.jingle_transport import *
|
||||
from common import helpers
|
||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||
from common.connection_handlers_events import FileRequestReceivedEvent
|
||||
import threading
|
||||
import logging
|
||||
from jingle_ftstates import *
|
||||
from common.jingle_ftstates import *
|
||||
log = logging.getLogger('gajim.c.jingle_ft')
|
||||
|
||||
STATE_NOT_STARTED = 0
|
||||
|
@ -68,6 +69,7 @@ class JingleFileTransfer(JingleContent):
|
|||
self.callbacks['transport-info'] += [self.__on_transport_info]
|
||||
self.callbacks['iq-result'] += [self.__on_iq_result]
|
||||
self.use_security = use_security
|
||||
self.x509_fingerprint = None
|
||||
self.file_props = file_props
|
||||
self.weinitiate = self.session.weinitiate
|
||||
self.werequest = self.session.werequest
|
||||
|
@ -95,8 +97,8 @@ class JingleFileTransfer(JingleContent):
|
|||
if gajim.contacts.is_gc_contact(session.connection.name,
|
||||
session.peerjid):
|
||||
roomjid = session.peerjid.split('/')[0]
|
||||
dstaddr = hashlib.sha1('%s%s%s' % (self.file_props.sid,
|
||||
session.ourjid, roomjid)).hexdigest()
|
||||
dstaddr = hashlib.sha1(('%s%s%s' % (self.file_props.sid,
|
||||
session.ourjid, roomjid)).encode('utf-8')).hexdigest()
|
||||
self.file_props.dstaddr = dstaddr
|
||||
self.state = STATE_NOT_STARTED
|
||||
self.states = {STATE_INITIALIZED : StateInitialized(self),
|
||||
|
@ -149,12 +151,13 @@ class JingleFileTransfer(JingleContent):
|
|||
if self.file_props.algo == None:
|
||||
return
|
||||
try:
|
||||
file_ = open(self.file_props.file_name, 'r')
|
||||
file_ = open(self.file_props.file_name, 'rb')
|
||||
except:
|
||||
# can't open file
|
||||
return
|
||||
h = nbxmpp.Hashes()
|
||||
hash_ = h.calculateHash(self.file_props.algo, file_)
|
||||
file_.close()
|
||||
# DEBUG
|
||||
#hash_ = '1294809248109223'
|
||||
if not hash_:
|
||||
|
@ -164,17 +167,37 @@ class JingleFileTransfer(JingleContent):
|
|||
h.addHash(hash_, self.file_props.algo)
|
||||
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):
|
||||
log.info("__on_session_accept")
|
||||
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')
|
||||
if not security: # responder can not verify our fingerprint
|
||||
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:
|
||||
# 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 self.session.werequest:
|
||||
raise nbxmpp.NodeProcessed
|
||||
|
@ -185,16 +208,13 @@ class JingleFileTransfer(JingleContent):
|
|||
# Calculate file hash in a new thread
|
||||
# if we haven't sent the hash already.
|
||||
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.start()
|
||||
for host in self.file_props.streamhosts:
|
||||
host['initiator'] = self.session.initiator
|
||||
host['target'] = self.session.responder
|
||||
host['sid'] = self.file_props.sid
|
||||
response = stanza.buildReply('result')
|
||||
response.delChild(response.getQuery())
|
||||
con.connection.send(response)
|
||||
fingerprint = None
|
||||
if self.use_security:
|
||||
fingerprint = 'client'
|
||||
|
@ -203,7 +223,7 @@ class JingleFileTransfer(JingleContent):
|
|||
self.file_props.sid, self.on_connect,
|
||||
self._on_connect_error, fingerprint=fingerprint,
|
||||
receiving=False)
|
||||
return
|
||||
raise nbxmpp.NodeProcessed
|
||||
self.__state_changed(STATE_TRANSFERING)
|
||||
raise nbxmpp.NodeProcessed
|
||||
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
## You should have received a copy of the GNU General Public License
|
||||
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_transport import *
|
||||
from common.jingle_transport import *
|
||||
from common.socks5 import Socks5ReceiverClient, Socks5SenderClient
|
||||
|
||||
|
||||
|
|
|
@ -19,19 +19,19 @@ Handles Jingle RTP sessions (XEP 0167)
|
|||
|
||||
from collections import deque
|
||||
|
||||
import gobject
|
||||
from gi.repository import GLib
|
||||
import socket
|
||||
|
||||
import nbxmpp
|
||||
import farstream, gst
|
||||
import gst.interfaces
|
||||
import farstream
|
||||
import gst
|
||||
from glib import GError
|
||||
|
||||
import gajim
|
||||
from common import gajim
|
||||
|
||||
from jingle_transport import JingleTransportICEUDP
|
||||
from jingle_content import contents, JingleContent, JingleContentSetupException
|
||||
from connection_handlers_events import InformationEvent
|
||||
from common.jingle_transport import JingleTransportICEUDP
|
||||
from common.jingle_content import contents, JingleContent, JingleContentSetupException
|
||||
from common.connection_handlers_events import InformationEvent
|
||||
|
||||
|
||||
import logging
|
||||
|
@ -66,7 +66,6 @@ class JingleRTPContent(JingleContent):
|
|||
# pipeline and bus
|
||||
self.pipeline = gst.Pipeline()
|
||||
bus = self.pipeline.get_bus()
|
||||
bus.enable_sync_message_emission()
|
||||
bus.add_signal_watch()
|
||||
bus.connect('message', self._on_gst_message)
|
||||
|
||||
|
@ -90,8 +89,8 @@ class JingleRTPContent(JingleContent):
|
|||
try:
|
||||
ip = socket.getaddrinfo(stun_server, 0, socket.AF_UNSPEC,
|
||||
socket.SOCK_STREAM)[0][4][0]
|
||||
except socket.gaierror, (errnum, errstr):
|
||||
log.warn('Lookup of stun ip failed: %s' % errstr)
|
||||
except socket.gaierror as e:
|
||||
log.warning('Lookup of stun ip failed: %s' % str(e))
|
||||
else:
|
||||
params['stun-ip'] = ip
|
||||
|
||||
|
@ -108,13 +107,13 @@ class JingleRTPContent(JingleContent):
|
|||
try:
|
||||
bin = gst.parse_bin_from_description(pipeline, True)
|
||||
return bin
|
||||
except GError, error_str:
|
||||
except GError as e:
|
||||
gajim.nec.push_incoming_event(InformationEvent(None,
|
||||
conn=self.session.connection, level='error',
|
||||
pri_txt=_('%s configuration error') % text.capitalize(),
|
||||
sec_txt=_("Couldn't setup %s. Check your configuration.\n\n"
|
||||
"Pipeline was:\n%s\n\nError was:\n%s") % (text, pipeline,
|
||||
error_str)))
|
||||
str(e))))
|
||||
raise JingleContentSetupException
|
||||
|
||||
def add_remote_candidates(self, candidates):
|
||||
|
@ -133,13 +132,13 @@ class JingleRTPContent(JingleContent):
|
|||
events = deque(events)
|
||||
self._dtmf_running = True
|
||||
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):
|
||||
self._stop_dtmf()
|
||||
if events:
|
||||
self._start_dtmf(events.popleft())
|
||||
gobject.timeout_add(500, self._next_dtmf, events)
|
||||
GLib.timeout_add(500, self._next_dtmf, events)
|
||||
else:
|
||||
self._dtmf_running = False
|
||||
|
||||
|
@ -370,11 +369,8 @@ class JingleAudio(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)
|
||||
self.in_xid = in_xid
|
||||
self.out_xid = out_xid
|
||||
self.out_xid_set = False
|
||||
self.setup_stream()
|
||||
|
||||
def setup_stream(self):
|
||||
|
@ -382,8 +378,6 @@ class JingleVideo(JingleRTPContent):
|
|||
# sometimes, one window won't show up,
|
||||
# sometimes it'll freeze...
|
||||
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
|
||||
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)
|
||||
else:
|
||||
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',
|
||||
'%%s %s! %svideoscale ! %sffmpegcolorspace' % (tee, framerate,
|
||||
video_size), _("video input"))
|
||||
|
||||
'%%s ! %svideoscale ! %sffmpegcolorspace' % (framerate, video_size),
|
||||
_("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.set_state(gst.STATE_PLAYING)
|
||||
#src_bin.link(caps)
|
||||
|
||||
self.sink = self.make_bin_from_config('video_output_device',
|
||||
'videoscale ! ffmpegcolorspace ! %s',
|
||||
'videoscale ! ffmpegcolorspace ! %s force-aspect-ratio=True',
|
||||
_("video output"))
|
||||
self.pipeline.add(self.sink)
|
||||
|
||||
|
@ -427,27 +413,11 @@ class JingleVideo(JingleRTPContent):
|
|||
# The following is needed for farstream to process ICE requests:
|
||||
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):
|
||||
# TODO: Use avatar?
|
||||
pipeline = 'videotestsrc is-live=true ! video/x-raw-yuv,framerate=10/1 ! ffmpegcolorspace'
|
||||
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):
|
||||
if desc['media'] == 'audio':
|
||||
return JingleAudio
|
||||
|
|
|
@ -28,12 +28,12 @@ Handles Jingle sessions (XEP 0166)
|
|||
# - Tie-breaking
|
||||
# * timeout
|
||||
|
||||
import gajim #Get rid of that?
|
||||
from common import gajim
|
||||
import nbxmpp
|
||||
from jingle_transport import get_jingle_transport, JingleTransportIBB
|
||||
from jingle_content import get_jingle_content, JingleContentSetupException
|
||||
from jingle_content import JingleContent
|
||||
from jingle_ft import STATE_TRANSPORT_REPLACE
|
||||
from common.jingle_transport import get_jingle_transport, JingleTransportIBB
|
||||
from common.jingle_content import get_jingle_content, JingleContentSetupException
|
||||
from common.jingle_content import JingleContent
|
||||
from common.jingle_ft import STATE_TRANSPORT_REPLACE
|
||||
from common.connection_handlers_events import *
|
||||
import logging
|
||||
log = logging.getLogger("gajim.c.jingle_session")
|
||||
|
@ -75,7 +75,6 @@ class JingleSession(object):
|
|||
self.contents = {} # negotiated contents
|
||||
self.connection = con # connection to use
|
||||
# our full jid
|
||||
#FIXME: Get rid of gajim here?
|
||||
self.ourjid = gajim.get_jid_from_account(self.connection.name)
|
||||
if 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 (any((content.is_ready() for content in self.contents.itervalues()))
|
||||
and self.accepted)
|
||||
return (any((content.is_ready() for content in self.contents.values()))
|
||||
and self.accepted)
|
||||
|
||||
def accept_session(self):
|
||||
"""
|
||||
|
@ -592,7 +591,7 @@ class JingleSession(object):
|
|||
"""
|
||||
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)
|
||||
|
||||
def __parse_contents(self, jingle):
|
||||
|
|
|
@ -156,7 +156,8 @@ class JingleTransportSocks5(JingleTransport):
|
|||
candidates.append(cand)
|
||||
|
||||
# we need this when we construct file_props on session-initiation
|
||||
self.remote_candidates = candidates
|
||||
if candidates:
|
||||
self.remote_candidates = candidates
|
||||
return candidates
|
||||
|
||||
|
||||
|
@ -177,30 +178,39 @@ class JingleTransportSocks5(JingleTransport):
|
|||
return
|
||||
if not self.connection:
|
||||
return
|
||||
local_ip_cand = []
|
||||
port = int(gajim.config.get('file_transfers_port'))
|
||||
#type preference of connection type. XEP-0260 section 2.2
|
||||
type_preference = 126
|
||||
c = {'host': self.connection.peerhost[0]}
|
||||
c['candidate_id'] = self.connection.connection.getAnID()
|
||||
c['port'] = port
|
||||
c['type'] = 'direct'
|
||||
c['jid'] = self.ourjid
|
||||
c['priority'] = (2**16) * type_preference
|
||||
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)
|
||||
|
||||
for addr in socket.getaddrinfo(socket.gethostname(), None):
|
||||
if not addr[4][0] in local_ip_cand and not addr[4][0].startswith('127'):
|
||||
c = {'host': addr[4][0]}
|
||||
c['candidate_id'] = self.connection.connection.getAnID()
|
||||
c['port'] = port
|
||||
c['type'] = 'direct'
|
||||
c['jid'] = self.ourjid
|
||||
c['priority'] = (2**16) * type_preference
|
||||
c['initiator'] = self.file_props.sender
|
||||
c['target'] = self.file_props.receiver
|
||||
local_ip_cand.append(c)
|
||||
try:
|
||||
for addrinfo in socket.getaddrinfo(socket.gethostname(), None):
|
||||
addr = addrinfo[4][0]
|
||||
if not addr in hosts and not addr.startswith('127'):
|
||||
c = {'host': addr,
|
||||
'candidate_id': self.connection.connection.getAnID(),
|
||||
'port': port,
|
||||
'type': 'direct',
|
||||
'jid': self.ourjid,
|
||||
'priority': priority,
|
||||
'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)
|
||||
|
||||
|
@ -208,6 +218,7 @@ class JingleTransportSocks5(JingleTransport):
|
|||
if not self.connection:
|
||||
return
|
||||
type_preference = 126
|
||||
priority = (2**16) * type_preference
|
||||
additional_ip_cand = []
|
||||
port = int(gajim.config.get('file_transfers_port'))
|
||||
ft_add_hosts = gajim.config.get('ft_add_hosts_to_send')
|
||||
|
@ -215,14 +226,14 @@ class JingleTransportSocks5(JingleTransport):
|
|||
if ft_add_hosts:
|
||||
hosts = [e.strip() for e in ft_add_hosts.split(',')]
|
||||
for h in hosts:
|
||||
c = {'host': h}
|
||||
c['candidate_id'] = self.connection.connection.getAnID()
|
||||
c['port'] = port
|
||||
c['type'] = 'direct'
|
||||
c['jid'] = self.ourjid
|
||||
c['priority'] = (2**16) * type_preference
|
||||
c['initiator'] = self.file_props.sender
|
||||
c['target'] = self.file_props.receiver
|
||||
c = {'host': h,
|
||||
'candidate_id': self.connection.connection.getAnID(),
|
||||
'port': port,
|
||||
'type': 'direct',
|
||||
'jid': self.ourjid,
|
||||
'priority': priority,
|
||||
'initiator': self.file_props.sender,
|
||||
'target': self.file_props.receiver}
|
||||
additional_ip_cand.append(c)
|
||||
|
||||
self._add_candidates(additional_ip_cand)
|
||||
|
@ -231,6 +242,7 @@ class JingleTransportSocks5(JingleTransport):
|
|||
if not self.connection:
|
||||
return
|
||||
type_preference = 10
|
||||
priority = (2**16) * type_preference
|
||||
proxy_cand = []
|
||||
socks5conn = self.connection
|
||||
proxyhosts = socks5conn._get_file_transfer_proxies_from_config(self.file_props)
|
||||
|
@ -239,14 +251,14 @@ class JingleTransportSocks5(JingleTransport):
|
|||
self.file_props.proxyhosts = proxyhosts
|
||||
|
||||
for proxyhost in proxyhosts:
|
||||
c = {'host': proxyhost['host']}
|
||||
c['candidate_id'] = self.connection.connection.getAnID()
|
||||
c['port'] = int(proxyhost['port'])
|
||||
c['type'] = 'proxy'
|
||||
c['jid'] = proxyhost['jid']
|
||||
c['priority'] = (2**16) * type_preference
|
||||
c['initiator'] = self.file_props.sender
|
||||
c['target'] = self.file_props.receiver
|
||||
c = {'host': proxyhost['host'],
|
||||
'candidate_id': self.connection.connection.getAnID(),
|
||||
'port': int(proxyhost['port']),
|
||||
'type': 'proxy',
|
||||
'jid': proxyhost['jid'],
|
||||
'priority': priority,
|
||||
'initiator': self.file_props.sender,
|
||||
'target': self.file_props.receiver}
|
||||
proxy_cand.append(c)
|
||||
|
||||
self._add_candidates(proxy_cand)
|
||||
|
@ -298,7 +310,7 @@ class JingleTransportSocks5(JingleTransport):
|
|||
cid = host['candidate_id']
|
||||
break
|
||||
if cid is None:
|
||||
raise Exception, 'cid is missing'
|
||||
raise Exception('cid is missing')
|
||||
activated.setAttr('cid', cid)
|
||||
transport.addChild(node=activated)
|
||||
content.addChild(node=transport)
|
||||
|
@ -331,6 +343,7 @@ class JingleTransportIBB(JingleTransport):
|
|||
return transport
|
||||
|
||||
try:
|
||||
raise ImportError
|
||||
import farstream
|
||||
except Exception:
|
||||
pass
|
||||
|
@ -402,7 +415,7 @@ class JingleTransportICEUDP(JingleTransport):
|
|||
if 'type' in candidate and candidate['type'] in types:
|
||||
cand.type = types[candidate['type']]
|
||||
else:
|
||||
print 'Unknown type %s', candidate['type']
|
||||
print('Unknown type %s' % candidate['type'])
|
||||
candidates.append(cand)
|
||||
self.remote_candidates.extend(candidates)
|
||||
return candidates
|
||||
|
|
|
@ -20,21 +20,22 @@ import os
|
|||
import nbxmpp
|
||||
|
||||
import logging
|
||||
import common
|
||||
from common import gajim
|
||||
log = logging.getLogger('gajim.c.jingle_xtls')
|
||||
|
||||
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):
|
||||
pending_contents[id_] = content
|
||||
def key_exchange_pend(id_, cb, args):
|
||||
# args is a list
|
||||
pending_contents[id_] = [cb, args]
|
||||
|
||||
def approve_pending_content(id_):
|
||||
content = pending_contents[id_]
|
||||
content.session.approve_session()
|
||||
content.session.approve_content('file', name=content.name)
|
||||
cb = pending_contents[id_][0]
|
||||
args = pending_contents[id_][1]
|
||||
cb(*args)
|
||||
|
||||
try:
|
||||
import OpenSSL.SSL
|
||||
|
@ -50,23 +51,25 @@ if PYOPENSSL_PRESENT:
|
|||
TYPE_DSA = crypto.TYPE_DSA
|
||||
|
||||
SELF_SIGNED_CERTIFICATE = 'localcert'
|
||||
DH_PARAMS = 'dh_params.pem'
|
||||
DEFAULT_DH_PARAMS = 'dh4096.pem'
|
||||
|
||||
def default_callback(connection, certificate, error_num, depth, return_code):
|
||||
log.info("certificate: %s" % certificate)
|
||||
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
|
||||
"""
|
||||
if not os.path.isfile(cert_path):
|
||||
return
|
||||
return None
|
||||
try:
|
||||
f = open(cert_path)
|
||||
except IOError, e:
|
||||
except IOError as e:
|
||||
log.warning('Unable to open certificate file %s: %s' % (cert_path,
|
||||
str(e)))
|
||||
return
|
||||
return None
|
||||
lines = f.readlines()
|
||||
i = 0
|
||||
begin = -1
|
||||
|
@ -78,8 +81,10 @@ def load_cert_file(cert_path, cert_store):
|
|||
try:
|
||||
x509cert = OpenSSL.crypto.load_certificate(
|
||||
OpenSSL.crypto.FILETYPE_PEM, cert)
|
||||
cert_store.add_cert(x509cert)
|
||||
except OpenSSL.crypto.Error, exception_obj:
|
||||
if cert_store:
|
||||
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' %\
|
||||
(cert_path, exception_obj.args[0][0][2]))
|
||||
except:
|
||||
|
@ -87,13 +92,15 @@ def load_cert_file(cert_path, cert_store):
|
|||
'%s' % cert_path)
|
||||
begin = -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
|
||||
"""
|
||||
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_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)
|
||||
ctx.use_privatekey_file (cert_name + '.pkey')
|
||||
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)):
|
||||
load_cert_file(os.path.join(os.path.expanduser(
|
||||
gajim.MY_PEER_CERTS_PATH), f), store)
|
||||
log.debug('certificate file ' + f + ' loaded fingerprint ' + \
|
||||
fingerprint)
|
||||
|
||||
# Try to load Diffie-Hellman parameters.
|
||||
# First try user DH parameters, if this fails load the default DH parameters
|
||||
dh_params_name = os.path.join(gajim.MY_CERT_DIR, DH_PARAMS)
|
||||
try:
|
||||
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
|
||||
|
||||
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):
|
||||
certpath = os.path.join(gajim.MY_CERT_DIR, SELF_SIGNED_CERTIFICATE) + \
|
||||
'.cert'
|
||||
certfile = open(certpath, 'r')
|
||||
certificate = ''
|
||||
for line in certfile.readlines():
|
||||
if not line.startswith('-'):
|
||||
certificate += line
|
||||
certificate = read_cert(certpath)
|
||||
iq = nbxmpp.Iq('result', to=jid_from);
|
||||
iq.setAttr('id', sid)
|
||||
|
||||
|
@ -151,9 +182,21 @@ def handle_new_cert(con, obj, jid_from):
|
|||
f.write('-----BEGIN CERTIFICATE-----\n')
|
||||
f.write(cert)
|
||||
f.write('-----END CERTIFICATE-----\n')
|
||||
f.close()
|
||||
|
||||
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):
|
||||
iq = nbxmpp.Iq('get', to=to_jid)
|
||||
id_ = con.connection.getAnID()
|
||||
|
@ -161,7 +204,7 @@ def send_cert_request(con, to_jid):
|
|||
pubkey = iq.setTag('pubkeys')
|
||||
pubkey.setNamespace(nbxmpp.NS_PUBKEY_PUBKEY)
|
||||
con.connection.send(iq)
|
||||
return unicode(id_)
|
||||
return str(id_)
|
||||
|
||||
# the following code is partly due to pyopenssl examples
|
||||
|
||||
|
@ -177,12 +220,12 @@ def createKeyPair(type, bits):
|
|||
pkey.generate_key(type, bits)
|
||||
return pkey
|
||||
|
||||
def createCertRequest(pkey, digest="sha1", **name):
|
||||
def createCertRequest(pkey, digest="sha256", **name):
|
||||
"""
|
||||
Create a certificate 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
|
||||
arguments are:
|
||||
C - Country name
|
||||
|
@ -204,7 +247,7 @@ def createCertRequest(pkey, digest="sha1", **name):
|
|||
req.sign(pkey, digest)
|
||||
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.
|
||||
|
||||
|
@ -216,7 +259,7 @@ def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter
|
|||
starts being valid
|
||||
notAfter - Timestamp (relative to now) when the certificate
|
||||
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
|
||||
"""
|
||||
cert = crypto.X509()
|
||||
|
@ -238,13 +281,13 @@ def make_certs(filepath, CN):
|
|||
"""
|
||||
key = createKeyPair(TYPE_RSA, 4096)
|
||||
req = createCertRequest(key, CN=CN)
|
||||
cert = createCertificate(req, (req, key), 0, (0, 60*60*24*365*5)) # five years
|
||||
private_key_file = open(filepath + '.pkey', 'w')
|
||||
os.chmod(filepath + '.pkey', 0600)
|
||||
private_key_file.write(crypto.dump_privatekey(
|
||||
crypto.FILETYPE_PEM, key))
|
||||
open(filepath + '.cert', 'w').write(crypto.dump_certificate(
|
||||
crypto.FILETYPE_PEM, cert))
|
||||
cert = createCertificate(req, req, key, 0, 0, 60*60*24*365*5) # five years
|
||||
with open(filepath + '.pkey', 'wb') as f:
|
||||
os.chmod(filepath + '.pkey', 0o600)
|
||||
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
|
||||
with open(filepath + '.cert', 'wb') as f:
|
||||
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode(
|
||||
'utf-8'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -46,14 +46,14 @@ def kwallet_get(folder, entry):
|
|||
• folder: The top-level category to use (normally the programme name)
|
||||
• 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.
|
||||
"""
|
||||
p = subprocess.Popen(["kwalletcli", "-q", "-f", folder.encode('utf-8'),
|
||||
"-e", entry.encode('utf-8')], stdout=subprocess.PIPE)
|
||||
pw = p.communicate()[0]
|
||||
if p.returncode == 0:
|
||||
return unicode(pw.decode('utf-8'))
|
||||
return pw
|
||||
if p.returncode == 1 or p.returncode == 4:
|
||||
# ENOENT
|
||||
return False
|
||||
|
|
|
@ -33,16 +33,16 @@ import sys
|
|||
import time
|
||||
import datetime
|
||||
from gzip import GzipFile
|
||||
from cStringIO import StringIO
|
||||
import gobject
|
||||
from io import BytesIO
|
||||
from gi.repository import GLib
|
||||
|
||||
import exceptions
|
||||
import gajim
|
||||
import ged
|
||||
from common import exceptions
|
||||
from common import gajim
|
||||
from common import ged
|
||||
|
||||
import sqlite3 as sqlite
|
||||
|
||||
import configpaths
|
||||
from common import configpaths
|
||||
LOG_DB_PATH = configpaths.gajimpaths['LOG_DB']
|
||||
LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
|
||||
CACHE_DB_PATH = configpaths.gajimpaths['CACHE_DB']
|
||||
|
@ -151,7 +151,7 @@ class Logger:
|
|||
try:
|
||||
self.cur.execute("ATTACH DATABASE '%s' AS cache" % \
|
||||
CACHE_DB_PATH.replace("'", "''"))
|
||||
except sqlite.Error, e:
|
||||
except sqlite.Error as e:
|
||||
log.debug("Failed to attach cache database: %s" % str(e))
|
||||
|
||||
def set_synchronous(self, sync):
|
||||
|
@ -160,7 +160,7 @@ class Logger:
|
|||
self.cur.execute("PRAGMA synchronous = NORMAL")
|
||||
else:
|
||||
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)))
|
||||
|
||||
def init_vars(self):
|
||||
|
@ -170,15 +170,15 @@ class Logger:
|
|||
def _really_commit(self):
|
||||
try:
|
||||
self.con.commit()
|
||||
except sqlite.OperationalError, e:
|
||||
print >> sys.stderr, str(e)
|
||||
except sqlite.OperationalError as e:
|
||||
print(str(e), file=sys.stderr)
|
||||
self.commit_timout_id = None
|
||||
return False
|
||||
|
||||
def _timeout_commit(self):
|
||||
if self.commit_timout_id:
|
||||
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):
|
||||
"""
|
||||
|
@ -190,7 +190,7 @@ class Logger:
|
|||
def get_jids_already_in_db(self):
|
||||
try:
|
||||
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()
|
||||
except sqlite.DatabaseError:
|
||||
raise exceptions.DatabaseMalformed
|
||||
|
@ -258,11 +258,11 @@ class Logger:
|
|||
self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)', (jid,
|
||||
typ))
|
||||
self.con.commit()
|
||||
except sqlite.IntegrityError, e:
|
||||
except sqlite.IntegrityError:
|
||||
# Jid already in DB, maybe added by another instance. re-read DB
|
||||
self.get_jids_already_in_db()
|
||||
return self.get_jid_id(jid, typestr)
|
||||
except sqlite.OperationalError, e:
|
||||
except sqlite.OperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
jid_id = self.cur.lastrowid
|
||||
self.jids_already_in.append(jid)
|
||||
|
@ -413,15 +413,15 @@ class Logger:
|
|||
self.cur.execute(sql, values)
|
||||
except sqlite.DatabaseError:
|
||||
raise exceptions.DatabaseMalformed
|
||||
except sqlite.OperationalError, e:
|
||||
except sqlite.OperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
message_id = None
|
||||
if write_unread:
|
||||
try:
|
||||
self.con.commit()
|
||||
message_id = self.cur.lastrowid
|
||||
except sqlite.OperationalError, e:
|
||||
print >> sys.stderr, str(e)
|
||||
except sqlite.OperationalError as e:
|
||||
print(str(e), file=sys.stderr)
|
||||
else:
|
||||
self._timeout_commit()
|
||||
if message_id:
|
||||
|
@ -528,7 +528,7 @@ class Logger:
|
|||
# status for roster items
|
||||
try:
|
||||
jid_id = self.get_jid_id(jid)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
if show is None: # show is None (xmpp), but we say that 'online'
|
||||
show_col = constants.SHOW_ONLINE
|
||||
|
@ -541,7 +541,7 @@ class Logger:
|
|||
try:
|
||||
# re-get jid_id for the new jid
|
||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
contact_name_col = nick
|
||||
|
||||
|
@ -555,13 +555,13 @@ class Logger:
|
|||
try:
|
||||
# re-get jid_id for the new jid
|
||||
jid_id = self.get_jid_id(jid, 'ROOM')
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
contact_name_col = nick
|
||||
else:
|
||||
try:
|
||||
jid_id = self.get_jid_id(jid)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
if kind == 'chat_msg_recv':
|
||||
if not self.jid_is_from_pm(jid):
|
||||
|
@ -586,7 +586,7 @@ class Logger:
|
|||
"""
|
||||
try:
|
||||
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
|
||||
return []
|
||||
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
||||
|
@ -630,7 +630,7 @@ class Logger:
|
|||
"""
|
||||
try:
|
||||
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
|
||||
return []
|
||||
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
||||
|
@ -659,14 +659,14 @@ class Logger:
|
|||
"""
|
||||
try:
|
||||
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
|
||||
return []
|
||||
|
||||
if False: # query.startswith('SELECT '): # it's SQL query (FIXME)
|
||||
try:
|
||||
self.cur.execute(query)
|
||||
except sqlite.OperationalError, e:
|
||||
except sqlite.OperationalError as e:
|
||||
results = [('', '', '', '', str(e))]
|
||||
return results
|
||||
|
||||
|
@ -700,7 +700,7 @@ class Logger:
|
|||
"""
|
||||
try:
|
||||
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
|
||||
return []
|
||||
days_with_logs = []
|
||||
|
@ -742,7 +742,7 @@ class Logger:
|
|||
else:
|
||||
try:
|
||||
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
|
||||
return None
|
||||
where_sql = 'jid_id = ?'
|
||||
|
@ -768,7 +768,7 @@ class Logger:
|
|||
"""
|
||||
try:
|
||||
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
|
||||
return None
|
||||
where_sql = 'jid_id = %s' % jid_id
|
||||
|
@ -808,7 +808,7 @@ class Logger:
|
|||
for user in family:
|
||||
try:
|
||||
jid_id = self.get_jid_id(user['jid'])
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError:
|
||||
continue
|
||||
where_sql += 'jid_id = ?'
|
||||
jid_tuple += (jid_id,)
|
||||
|
@ -890,8 +890,7 @@ class Logger:
|
|||
# ..., 'FEAT', feature1, feature2, ...).join(' '))
|
||||
# NOTE: if there's a need to do more gzip, put that to a function
|
||||
try:
|
||||
data = GzipFile(fileobj=StringIO(str(data))).read().decode(
|
||||
'utf-8').split('\0')
|
||||
data = GzipFile(fileobj=BytesIO(data)).read().decode('utf-8').split('\0')
|
||||
except IOError:
|
||||
# This data is corrupted. It probably contains non-ascii chars
|
||||
to_be_removed.append((hash_method, hash_))
|
||||
|
@ -931,16 +930,15 @@ class Logger:
|
|||
data.extend(features)
|
||||
data = '\0'.join(data)
|
||||
# if there's a need to do more gzip, put that to a function
|
||||
string = StringIO()
|
||||
string = BytesIO()
|
||||
gzip = GzipFile(fileobj=string, mode='w')
|
||||
data = data.encode('utf-8') # the gzip module can't handle unicode objects
|
||||
gzip.write(data)
|
||||
gzip.write(data.encode('utf-8'))
|
||||
gzip.close()
|
||||
data = string.getvalue()
|
||||
self.cur.execute('''
|
||||
INSERT INTO caps_cache ( hash_method, hash, data, last_seen )
|
||||
VALUES (?, ?, ?, ?);
|
||||
''', (hash_method, hash_, buffer(data), int(time.time())))
|
||||
''', (hash_method, hash_, memoryview(data), int(time.time())))
|
||||
# (1) -- note above
|
||||
self._timeout_commit()
|
||||
|
||||
|
@ -996,7 +994,7 @@ class Logger:
|
|||
try:
|
||||
account_jid_id = self.get_jid_id(account_jid)
|
||||
jid_id = self.get_jid_id(jid)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
self.cur.execute(
|
||||
'DELETE FROM roster_group WHERE account_jid_id=? AND jid_id=?',
|
||||
|
@ -1018,7 +1016,7 @@ class Logger:
|
|||
try:
|
||||
account_jid_id = self.get_jid_id(account_jid)
|
||||
jid_id = self.get_jid_id(jid)
|
||||
except exceptions.PysqliteOperationalError, e:
|
||||
except exceptions.PysqliteOperationalError as e:
|
||||
raise exceptions.PysqliteOperationalError(str(e))
|
||||
|
||||
# Update groups information
|
||||
|
@ -1054,6 +1052,8 @@ class Logger:
|
|||
FROM roster_entry re, jids j
|
||||
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:
|
||||
jid = jid
|
||||
name = name
|
||||
data[jid] = {}
|
||||
if name:
|
||||
data[jid]['name'] = name
|
||||
|
@ -1077,6 +1077,7 @@ class Logger:
|
|||
WHERE account_jid_id=? AND jid_id=?''',
|
||||
(account_jid_id, data[jid]['id']))
|
||||
for (group_name,) in self.cur:
|
||||
group_name = group_name
|
||||
data[jid]['groups'].append(group_name)
|
||||
del data[jid]['id']
|
||||
|
||||
|
@ -1155,7 +1156,7 @@ class Logger:
|
|||
# when we quit this muc
|
||||
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)))
|
||||
except exceptions.DatabaseMalformed:
|
||||
pritext = _('Database Error')
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
##
|
||||
|
||||
import logging
|
||||
import i18n
|
||||
from common import i18n
|
||||
|
||||
def parseLogLevel(arg):
|
||||
"""
|
||||
|
@ -30,7 +30,7 @@ def parseLogLevel(arg):
|
|||
elif arg.isupper() and hasattr(logging, arg):
|
||||
return getattr(logging, arg)
|
||||
else:
|
||||
print _('%s is not a valid loglevel') % repr(arg)
|
||||
print(_('%s is not a valid loglevel') % repr(arg))
|
||||
return 0
|
||||
|
||||
def parseLogTarget(arg):
|
||||
|
@ -72,7 +72,7 @@ def parseAndSetLogLevels(arg):
|
|||
target = parseLogTarget(target.strip())
|
||||
if target:
|
||||
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:
|
||||
|
@ -141,7 +141,7 @@ def init(use_color=False):
|
|||
consoleloghandler.setFormatter(
|
||||
FancyFormatter(
|
||||
'%(asctime)s %(levelname)s %(name)s %(message)s',
|
||||
'%H:%M:%S',
|
||||
'%x %H:%M:%S',
|
||||
use_color
|
||||
)
|
||||
)
|
||||
|
@ -179,13 +179,13 @@ if __name__ == '__main__':
|
|||
log = logging.getLogger('gajim')
|
||||
log.debug('debug')
|
||||
log.info('info')
|
||||
log.warn('warn')
|
||||
log.warning('warn')
|
||||
log.error('error')
|
||||
log.critical('critical')
|
||||
|
||||
log = logging.getLogger('gajim.c.x.dispatcher')
|
||||
log.debug('debug')
|
||||
log.info('info')
|
||||
log.warn('warn')
|
||||
log.warning('warn')
|
||||
log.error('error')
|
||||
log.critical('critical')
|
||||
|
|
|
@ -96,7 +96,7 @@ class ConnectionArchive:
|
|||
|
||||
def get_item_pref(self, jid):
|
||||
jid = nbxmpp.JID(jid)
|
||||
if unicode(jid) in self.items:
|
||||
if str(jid) in self.items:
|
||||
return self.items[jid]
|
||||
|
||||
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