Author: asterix Date: 2007-10-09 19:48:22 +0200 (Tue, 09 Oct 2007) New Revision: 8897
Modified: trunk/README.html trunk/data/glade/message_window.glade trunk/src/chat_control.py trunk/src/common/gajim.py trunk/src/features_window.py trunk/src/groupchat_control.py Log: use python-sexy if available to have clickable links in chat window banner. fixes #2962
Modified: trunk/README.html =================================================================== --- trunk/README.html 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/README.html 2007-10-09 17:48:22 UTC (rev 8897) @@ -38,6 +38,7 @@ <li>notification-daemon or notify-python (and D-Bus) to get cooler popups</li> <li>D-Bus running to have gajim-remote working</li> <li>python-dbus bindings</li> +<li>python-sexy to have clickable URLs in chat windows</li> </ul>
<p>
Modified: trunk/data/glade/message_window.glade =================================================================== --- trunk/data/glade/message_window.glade 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/data/glade/message_window.glade 2007-10-09 17:48:22 UTC (rev 8897) @@ -1,1216 +1,796 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> +<!--*- mode: xml -*--> <glade-interface> - -<widget class="GtkWindow" id="message_window"> - <property name="title" translatable="yes"></property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="default_width">480</property> - <property name="default_height">440</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - - <child> - <widget class="GtkAlignment" id="msg_window_alignment"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">2</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkNotebook" id="notebook"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="show_tabs">True</property> - <property name="show_border">True</property> - <property name="tab_pos">GTK_POS_TOP</property> - <property name="scrollable">True</property> - <property name="enable_popup">False</property> - - <child> - <widget class="GtkVBox" id="chat_child_vbox"> - <property name="border_width">3</property> - <property name="can_focus">True</property> - <property name="homogeneous">False</property> - <property name="spacing">1</property> - - <child> - <widget class="GtkAlignment" id="alignment"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">3</property> - <property name="right_padding">3</property> - - <child> - <widget class="GtkEventBox" id="banner_eventbox"> - <property name="visible">True</property> - <property name="visible_window">True</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkHBox" id="hbox3004"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkImage" id="banner_status_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">5</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkImage" id="banner_typing_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="banner_name_label"> - <property name="visible">True</property> - <property name="label"><span weight="heavy" size="large">Contact name</span> -Status message</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.0500000007451</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">5</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkEventBox" id="avatar_eventbox"> - <property name="visible">True</property> - <property name="visible_window">False</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkImage" id="avatar_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox106"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkScrolledWindow" id="conversation_scrolledwindow"> - <property name="border_width">3</property> - <property name="height_request">60</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="message_scrolledwindow"> - <property name="border_width">3</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="actions_hbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox3006"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">1</property> - - <child> - <widget class="GtkEventBox" id="gpg_eventbox"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">OpenPGP Encryption</property> - <property name="visible_window">True</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkToggleButton" id="gpg_togglebutton"> - <property name="visible">True</property> - <property name="relief">GTK_RELIEF_NONE</property> - <property name="focus_on_click">False</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - - <child> - <widget class="GtkImage" id="image1333"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-authentication</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVSeparator" id="vseparator4"> - <property name="visible">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox3007"> - <property name="border_width">3</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkButton" id="emoticons_button"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Click to insert an emoticon (Alt+M)</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkHBox" id="hbox3008"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkImage" id="emoticons_button_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">2</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkArrow" id="arrow3"> - <property name="visible">True</property> - <property name="arrow_type">GTK_ARROW_DOWN</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="message_window_actions_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkAlignment" id="alignment101"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox3009"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1338"> - <property name="visible">True</property> - <property name="stock">gtk-execute</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label372"> - <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)">_Actions</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkArrow" id="arrow4"> - <property name="visible">True</property> - <property name="arrow_type">GTK_ARROW_DOWN</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVSeparator" id="vseparator5"> - <property name="visible">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="send_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkAlignment" id="alignment102"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox3010"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1339"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label373"> - <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> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkEventBox" id="chat_tab_ebox"> - <property name="visible">True</property> - <property name="visible_window">False</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkHBox" id="tab_hbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">4</property> - - <child> - <widget class="GtkImage" id="tab_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="tab_label"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="tab_close_button"> - <property name="width_request">20</property> - <property name="height_request">20</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NONE</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkImage" id="image1329"> - <property name="visible">True</property> - <property name="stock">gtk-close</property> - <property name="icon_size">1</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">6</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - <packing> - <property name="type">tab</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="muc_child_vbox"> - <property name="border_width">3</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkAlignment" id="alignment103"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">1</property> - <property name="left_padding">3</property> - <property name="right_padding">3</property> - - <child> - <widget class="GtkEventBox" id="banner_eventbox"> - <property name="visible">True</property> - <property name="visible_window">True</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkHBox" id="hbox3024"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkImage" id="gc_banner_status_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="banner_name_label"> - <property name="visible">True</property> - <property name="label"><span weight="heavy" size="large">room jid</span> + <widget class="GtkWindow" id="message_window"> + <property name="default_width">480</property> + <property name="default_height">440</property> + <child> + <widget class="GtkAlignment" id="msg_window_alignment"> + <property name="visible">True</property> + <property name="top_padding">2</property> + <child> + <widget class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="scrollable">True</property> + <child> + <widget class="GtkVBox" id="chat_child_vbox"> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <property name="spacing">1</property> + <child> + <widget class="GtkAlignment" id="alignment"> + <property name="visible">True</property> + <property name="left_padding">3</property> + <property name="right_padding">3</property> + <child> + <widget class="GtkEventBox" id="banner_eventbox"> + <property name="visible">True</property> + <child> + <widget class="GtkHBox" id="hbox3004"> + <property name="visible">True</property> + <child> + <widget class="GtkImage" id="banner_status_image"> + <property name="visible">True</property> + <property name="ypad">5</property> + <property name="stock">gtk-missing-image</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + </packing> + </child> + <child> + <widget class="GtkImage" id="banner_typing_image"> + <property name="visible">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="banner_vbox"> + <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="border_width">5</property> + <child> + <widget class="GtkLabel" id="banner_name_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label"><span weight="heavy" size="large">Contact name</span></property> + <property name="use_markup">True</property> + </widget> + </child> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkEventBox" id="avatar_eventbox"> + <property name="visible">True</property> + <property name="visible_window">False</property> + <child> + <widget class="GtkImage" id="avatar_image"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox106"> + <property name="visible">True</property> + <child> + <widget class="GtkScrolledWindow" id="conversation_scrolledwindow"> + <property name="height_request">60</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <child> + <placeholder/> + </child> + </widget> + </child> + <child> + <widget class="GtkScrolledWindow" id="message_scrolledwindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="actions_hbox"> + <property name="visible">True</property> + <child> + <widget class="GtkHBox" id="hbox3006"> + <property name="visible">True</property> + <property name="spacing">1</property> + <child> + <widget class="GtkEventBox" id="gpg_eventbox"> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">OpenPGP Encryption</property> + <child> + <widget class="GtkToggleButton" id="gpg_togglebutton"> + <property name="visible">True</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="focus_on_click">False</property> + <property name="response_id">0</property> + <child> + <widget class="GtkImage" id="image1333"> + <property name="visible">True</property> + <property name="stock">gtk-dialog-authentication</property> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <widget class="GtkVSeparator" id="vseparator4"> + <property name="visible">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + <child> + <widget class="GtkHBox" id="hbox3007"> + <property name="visible">True</property> + <property name="border_width">3</property> + <property name="spacing">6</property> + <child> + <widget class="GtkButton" id="emoticons_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">Click to insert an emoticon (Alt+M)</property> + <property name="response_id">0</property> + <child> + <widget class="GtkHBox" id="hbox3008"> + <property name="visible">True</property> + <child> + <widget class="GtkImage" id="emoticons_button_image"> + <property name="visible">True</property> + <property name="xpad">2</property> + <property name="stock">gtk-missing-image</property> + </widget> + </child> + <child> + <widget class="GtkArrow" id="arrow3"> + <property name="visible">True</property> + <property name="arrow_type">GTK_ARROW_DOWN</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="message_window_actions_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment101"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="hbox3009"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image1338"> + <property name="visible">True</property> + <property name="stock">gtk-execute</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label372"> + <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)">_Actions</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkArrow" id="arrow4"> + <property name="visible">True</property> + <property name="arrow_type">GTK_ARROW_DOWN</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkVSeparator" id="vseparator5"> + <property name="visible">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="send_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment102"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="hbox3010"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image1339"> + <property name="visible">True</property> + <property name="stock">gtk-jump-to</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label373"> + <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> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + <child> + <widget class="GtkEventBox" id="chat_tab_ebox"> + <property name="visible">True</property> + <property name="visible_window">False</property> + <child> + <widget class="GtkHBox" id="tab_hbox"> + <property name="visible">True</property> + <property name="spacing">4</property> + <child> + <widget class="GtkImage" id="tab_image"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="tab_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="tab_close_button"> + <property name="width_request">20</property> + <property name="height_request">20</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="response_id">0</property> + <child> + <widget class="GtkImage" id="image1329"> + <property name="visible">True</property> + <property name="ypad">6</property> + <property name="stock">gtk-close</property> + <property name="icon_size">1</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="type">tab</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="muc_child_vbox"> + <property name="border_width">3</property> + <child> + <widget class="GtkAlignment" id="alignment103"> + <property name="visible">True</property> + <property name="bottom_padding">1</property> + <property name="left_padding">3</property> + <property name="right_padding">3</property> + <child> + <widget class="GtkEventBox" id="banner_eventbox"> + <property name="visible">True</property> + <child> + <widget class="GtkHBox" id="hbox3024"> + <property name="visible">True</property> + <child> + <widget class="GtkImage" id="gc_banner_status_image"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="banner_vbox"> + <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> + <widget class="GtkLabel" id="banner_name_label"> + <property name="visible">True</property> + <property name="xalign">0.05000000074505806</property> + <property name="xpad">6</property> + <property name="ypad">6</property> + <property name="label"><span weight="heavy" size="large">room jid</span> topic</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.0500000007451</property> - <property name="yalign">0.5</property> - <property name="xpad">6</property> - <property name="ypad">6</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHPaned" id="hpaned"> - <property name="border_width">3</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="position">495</property> - - <child> - <widget class="GtkVBox" id="vbox108"> - <property name="width_request">150</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkVBox" id="vbox109"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkScrolledWindow" id="conversation_scrolledwindow"> - <property name="width_request">200</property> - <property name="height_request">60</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="message_scrolledwindow"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">False</property> - <property name="resize">False</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="list_scrolledwindow"> - <property name="width_request">100</property> - <property name="visible">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="list_treeview"> - <property name="border_width">1</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </widget> - </child> - </widget> - <packing> - <property name="shrink">False</property> - <property name="resize">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="actions_hbox"> - <property name="border_width">3</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox3023"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox3013"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkButton" id="emoticons_button"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Click to insert an emoticon (Alt+M)</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkHBox" id="hbox3014"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkImage" id="emoticons_button_image"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">2</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkArrow" id="arrow5"> - <property name="visible">True</property> - <property name="arrow_type">GTK_ARROW_DOWN</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="muc_window_actions_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkAlignment" id="alignment104"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="gc_actions_hbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1344"> - <property name="visible">True</property> - <property name="stock">gtk-execute</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label376"> - <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)">_Actions</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkArrow" id="arrow6"> - <property name="visible">True</property> - <property name="arrow_type">GTK_ARROW_DOWN</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVSeparator" id="vseparator6"> - <property name="visible">True</property> - </widget> - <packing> - <property name="padding">2</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="send_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkAlignment" id="alignment105"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox3016"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image1345"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget 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> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkEventBox" id="muc_tab_ebox"> - <property name="visible">True</property> - <property name="visible_window">False</property> - <property name="above_child">False</property> - - <child> - <widget class="GtkHBox" id="hbox3017"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">4</property> - - <child> - <widget class="GtkImage" id="image1346"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label378"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="button34"> - <property name="width_request">20</property> - <property name="height_request">20</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NONE</property> - <property name="focus_on_click">True</property> - - <child> - <widget class="GtkImage" id="image1347"> - <property name="visible">True</property> - <property name="stock">gtk-close</property> - <property name="icon_size">1</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">6</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - <packing> - <property name="type">tab</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> -</widget> - + <property name="use_markup">True</property> + </widget> + </child> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkHPaned" id="hpaned"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">3</property> + <property name="position">495</property> + <child> + <widget class="GtkVBox" id="vbox108"> + <property name="width_request">150</property> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <widget class="GtkVBox" id="vbox109"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <widget class="GtkScrolledWindow" id="conversation_scrolledwindow"> + <property name="width_request">200</property> + <property name="height_request">60</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <child> + <placeholder/> + </child> + </widget> + </child> + <child> + <widget class="GtkScrolledWindow" id="message_scrolledwindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <child> + <placeholder/> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="resize">False</property> + <property name="shrink">False</property> + </packing> + </child> + <child> + <widget class="GtkScrolledWindow" id="list_scrolledwindow"> + <property name="width_request">100</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_IN</property> + <child> + <widget class="GtkTreeView" id="list_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">1</property> + <property name="headers_visible">False</property> + </widget> + </child> + </widget> + <packing> + <property name="resize">False</property> + <property name="shrink">False</property> + </packing> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="actions_hbox"> + <property name="visible">True</property> + <property name="border_width">3</property> + <child> + <widget class="GtkHBox" id="hbox3023"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </widget> + </child> + <child> + <widget class="GtkHBox" id="hbox3013"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <widget class="GtkButton" id="emoticons_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">Click to insert an emoticon (Alt+M)</property> + <property name="response_id">0</property> + <child> + <widget class="GtkHBox" id="hbox3014"> + <property name="visible">True</property> + <child> + <widget class="GtkImage" id="emoticons_button_image"> + <property name="visible">True</property> + <property name="xpad">2</property> + <property name="stock">gtk-missing-image</property> + </widget> + </child> + <child> + <widget class="GtkArrow" id="arrow5"> + <property name="visible">True</property> + <property name="arrow_type">GTK_ARROW_DOWN</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="muc_window_actions_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment104"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="gc_actions_hbox"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image1344"> + <property name="visible">True</property> + <property name="stock">gtk-execute</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label376"> + <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)">_Actions</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkArrow" id="arrow6"> + <property name="visible">True</property> + <property name="arrow_type">GTK_ARROW_DOWN</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkVSeparator" id="vseparator6"> + <property name="visible">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">2</property> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="send_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment105"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="hbox3016"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image1345"> + <property name="visible">True</property> + <property name="stock">gtk-jump-to</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget 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> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkEventBox" id="muc_tab_ebox"> + <property name="visible">True</property> + <property name="visible_window">False</property> + <child> + <widget class="GtkHBox" id="hbox3017"> + <property name="visible">True</property> + <property name="spacing">4</property> + <child> + <widget class="GtkImage" id="image1346"> + <property name="visible">True</property> + <property name="stock">gtk-missing-image</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label378"> + <property name="visible">True</property> + <property name="use_markup">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="button34"> + <property name="width_request">20</property> + <property name="height_request">20</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="response_id">0</property> + <child> + <widget class="GtkImage" id="image1347"> + <property name="visible">True</property> + <property name="ypad">6</property> + <property name="stock">gtk-close</property> + <property name="icon_size">1</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="type">tab</property> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> </glade-interface>
Modified: trunk/src/chat_control.py =================================================================== --- trunk/src/chat_control.py 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/src/chat_control.py 2007-10-09 17:48:22 UTC (rev 8897) @@ -28,6 +28,7 @@ import dialogs import history_window import notify +import re
from common import gajim from common import helpers @@ -46,7 +47,6 @@ except: HAS_GTK_SPELL = False
- # the next script, executed in the "po" directory, # generates the following list. ##!/bin/sh @@ -54,11 +54,15 @@ #echo "{_('en'):'en'",$LANG"}" langs = {_('English'): 'en', _('Belarusian'): 'be', _('Bulgarian'): 'bg', _('Breton'): 'br', _('Czech'): 'cs', _('German'): 'de', _('Greek'): 'el', _('British'): 'en_GB', _('Esperanto'): 'eo', _('Spanish'): 'es', _('Basque'): 'eu', _('French'): 'fr', _('Croatian'): 'hr', _('Italian'): 'it', _('Norwegian (b)'): 'nb', _('Dutch'): 'nl', _('Norwegian'): 'no', _('Polish'): 'pl', _('Portuguese'): 'pt', _('Brazilian Portuguese'): 'pt_BR', _('Russian'): 'ru', _('Serbian'): 'sr', _('Slovak'): 'sk', _('Swedish'): 'sv', _('Chinese (Ch)'): 'zh_CN'}
- ################################################################################ class ChatControlBase(MessageControl): '''A base class containing a banner, ConversationTextview, MessageTextView ''' + def make_href(self, match): + url_color = gajim.config.get('urlmsgcolor') + return '<a href="%s"><span color="%s">%s</span></a>' % (match.group(), + url_color, match.group()) + def get_font_attrs(self): ''' get pango font attributes for banner from theme settings ''' theme = gajim.config.get('roster_theme') @@ -120,6 +124,9 @@ event_keymod): pass # Derived should implement this rather than connecting to the event itself.
+ def status_url_clicked(self, widget, url): + helpers.launch_browser_mailer('url', url) + def __init__(self, type_id, parent_win, widget_name, contact, acct, resource = None): MessageControl.__init__(self, type_id, parent_win, widget_name, @@ -138,6 +145,22 @@ id = widget.connect('button-press-event', self._on_banner_eventbox_button_press_event) self.handlers[id] = widget + + self.urlfinder = re.compile("(https?://|www|ftp)[^ ]+") + + if gajim.HAVE_PYSEXY: + import sexy + self.banner_status_label = sexy.UrlLabel() + self.banner_status_label.connect('url_activated', self.status_url_clicked) + else: + self.banner_status_label = gtk.Label() + self.banner_status_label.set_selectable(True) + self.banner_status_label.set_alignment(0,0.5) + + banner_vbox = self.xml.get_widget('banner_vbox') + banner_vbox.pack_start(self.banner_status_label) + self.banner_status_label.show() + # Init DND self.TARGET_TYPE_URI_LIST = 80 self.dnd_list = [ ( 'text/uri-list', 0, self.TARGET_TYPE_URI_LIST ), @@ -247,7 +270,6 @@ spell.set_language(lang) except (gobject.GError, RuntimeError), msg: dialogs.AspellDictError(lang) - self.style_event_id = 0 self.conv_textview.tv.show() self._paint_banner()
@@ -324,6 +346,7 @@ banner_eventbox = self.xml.get_widget('banner_eventbox') banner_name_label = self.xml.get_widget('banner_name_label') self.disconnect_style_event(banner_name_label) + self.disconnect_style_event(self.banner_status_label) if bgcolor: banner_eventbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(bgcolor)) @@ -333,25 +356,33 @@ if textcolor: banner_name_label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(textcolor)) + self.banner_status_label.modify_fg(gtk.STATE_NORMAL, + gtk.gdk.color_parse(textcolor)) default_fg = False else: default_fg = True if default_bg or default_fg: self._on_style_set_event(banner_name_label, None, default_fg, default_bg) - + self._on_style_set_event(self.banner_status_label, None, default_fg, + default_bg) + def disconnect_style_event(self, widget): - if self.style_event_id: - widget.disconnect(self.style_event_id) - del self.handlers[self.style_event_id] - self.style_event_id = 0 + # Try to find the event_id + found = False + for id in self.handlers: + if self.handlers[id] == widget: + found = True + break + if found: + widget.disconnect(id) + del self.handlers[id] def connect_style_event(self, widget, set_fg = False, set_bg = False): self.disconnect_style_event(widget) - self.style_event_id = widget.connect('style-set', - self._on_style_set_event, set_fg, set_bg) - self.handlers[self.style_event_id] = widget - + id = widget.connect('style-set', self._on_style_set_event, set_fg, set_bg) + self.handlers[id] = widget + def _on_style_set_event(self, widget, style, *opts): '''set style of widget from style class *.Frame.Eventbox opts[0] == True -> set fg color @@ -365,7 +396,7 @@ fg_color = widget.style.fg[gtk.STATE_SELECTED] widget.modify_fg(gtk.STATE_NORMAL, fg_color) self.connect_style_event(widget, opts[0], opts[1]) - + def _on_keypress_event(self, widget, event): if event.state & gtk.gdk.CONTROL_MASK: # CTRL + l|L: clear conv_textview @@ -1162,6 +1193,7 @@ self.status_tooltip.set_tip(banner_eventbox, status) self.status_tooltip.enable() banner_name_label.set_ellipsize(pango.ELLIPSIZE_END) + self.banner_status_label.set_ellipsize(pango.ELLIPSIZE_END) status = helpers.reduce_chars_newlines(status, max_lines = 1) status_escaped = gobject.markup_escape_text(status)
@@ -1192,9 +1224,15 @@ # weight="heavy" size="x-large" label_text = '<span %s>%s</span><span %s>%s</span>' % \ (font_attrs, name, font_attrs_small, acct_info) + if status_escaped: - label_text += '\n<span %s>%s</span>' %\ - (font_attrs_small, status_escaped) + if gajim.HAVE_PYSEXY: + status_text = self.urlfinder.sub(self.make_href, status_escaped) + status_text = '<span %s>%s</span>' % (font_attrs_small, status_text) + else: + status_text = '<span %s>%s</span>' % (font_attrs_small, status_escaped) + + self.banner_status_label.set_markup(status_text) else: self.status_tooltip.disable() # setup the label that holds name and jid
Modified: trunk/src/common/gajim.py =================================================================== --- trunk/src/common/gajim.py 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/src/common/gajim.py 2007-10-09 17:48:22 UTC (rev 8897) @@ -142,6 +142,12 @@ except ImportError: HAVE_PYCRYPTO = False
+HAVE_PYSEXY = True +try: + import sexy +except ImportError: + HAVE_PYSEXY = False + def get_nick_from_jid(jid): pos = jid.find('@') return jid[:pos]
Modified: trunk/src/features_window.py =================================================================== --- trunk/src/features_window.py 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/src/features_window.py 2007-10-09 17:48:22 UTC (rev 8897) @@ -98,6 +98,10 @@ _('Generate XHTML output from RST code (see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html).'), _('Requires python-docutils.'), _('Requires python-docutils.')), + _('libsexy'): (self.pysexy_available, + _('Ability to have clickable URLs in chat window.'), + _('Requires python-sexy.'), + _('Requires python-sexy.')), }
# name, supported @@ -294,3 +298,7 @@ except: return False return True + + def pysexy_available(self): + from common import gajim + return gajim.HAVE_PYSEXY
Modified: trunk/src/groupchat_control.py =================================================================== --- trunk/src/groupchat_control.py 2007-10-09 03:46:51 UTC (rev 8896) +++ trunk/src/groupchat_control.py 2007-10-09 17:48:22 UTC (rev 8897) @@ -481,6 +481,7 @@ houses the room jid, subject. ''' self.name_label.set_ellipsize(pango.ELLIPSIZE_END) + self.banner_status_label.set_ellipsize(pango.ELLIPSIZE_END) font_attrs, font_attrs_small = self.get_font_attrs() if self.is_continued: nicks = [] @@ -495,16 +496,22 @@ text = '<span %s>%s</span>' % (font_attrs, title) else: text = '<span %s>%s</span>' % (font_attrs, self.room_jid) + self.name_label.set_markup(text) + if self.subject: subject = helpers.reduce_chars_newlines(self.subject, max_lines = 2) subject = gobject.markup_escape_text(subject) - text += '\n<span %s>%s</span>' % (font_attrs_small, subject) + if gajim.HAVE_PYSEXY: + subject_text = self.urlfinder.sub(self.make_href, subject) + subject_text = '<span %s>%s</span>' % (font_attrs_small, + subject_text) + else: + subject_text = '<span %s>%s</span>' % (font_attrs_small, subject) + self.banner_status_label.set_markup(subject_text)
# tooltip must always hold ALL the subject self.subject_tooltip.set_tip(self.event_box, self.subject)
- self.name_label.set_markup(text) - def prepare_context_menu(self): '''sets sensitivity state for configure_room''' ag = gtk.accel_groups_from_object(self.parent_win.window)[0]