From a4cd6f37b9b655a0f31684982d3f27ad0f4d27a4 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Wed, 2 Mar 2005 22:34:16 +0000 Subject: [PATCH] merge tabbed_chat_window and chat_window no need to restart gajim to take into account the use_tabbed_window option (already opened windows are not concerned for the moment) --- plugins/gtkgui/gtkgui.glade | 1191 +++++++++++++++++------------------ plugins/gtkgui/gtkgui.py | 567 +++++------------ 2 files changed, 747 insertions(+), 1011 deletions(-) diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade index 4feab57798..b035dcd173 100644 --- a/plugins/gtkgui/gtkgui.glade +++ b/plugins/gtkgui/gtkgui.glade @@ -313,14 +313,13 @@ </child> </widget> -<widget class="GtkWindow" id="chat_window"> +<widget class="GtkWindow" id="configure_accounts_window"> <property name="visible">True</property> - <property name="title" translatable="yes">Chat</property> + <property name="title" translatable="yes">Accounts</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">400</property> - <property name="default_height">300</property> + <property name="default_height">200</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> @@ -328,337 +327,188 @@ <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> - <signal name="destroy" handler="gtk_widget_destroy" last_modification_time="Sun, 12 Oct 2003 18:17:05 GMT"/> - <signal name="focus_in_event" handler="on_focus" last_modification_time="Fri, 11 Jun 2004 03:14:21 GMT"/> - <signal name="key_press_event" handler="on_chat_key_press_event" last_modification_time="Thu, 06 Jan 2005 12:53:45 GMT"/> + <signal name="destroy" handler="on_configure_accounts_window_destroy" last_modification_time="Wed, 02 Mar 2005 12:06:09 GMT"/> <child> - <widget class="GtkVBox" id="vbox2"> - <property name="border_width">5</property> + <widget class="GtkVBox" id="vbox5"> + <property name="border_width">7</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> - <widget class="GtkHBox" id="hbox1"> - <property name="border_width">5</property> + <widget class="GtkScrolledWindow" id="scrolledwindow5"> <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">5</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_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> <child> - <widget class="GtkButton" id="history_button"> + <widget class="GtkTreeView" id="accounts_treeview"> <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> - <signal name="clicked" handler="on_history_clicked" last_modification_time="Sun, 04 Apr 2004 05:30:58 GMT"/> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">True</property> + <signal name="cursor_changed" handler="on_accounts_treeview_cursor_changed" last_modification_time="Tue, 01 Mar 2005 18:21:26 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> - <child> - <widget class="GtkAlignment" id="alignment4"> - <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="GtkHSeparator" id="hseparator1"> + <property name="visible">True</property> + </widget> + <packing> + <property name="padding">10</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> - <child> - <widget class="GtkHBox" id="hbox8"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> + <child> + <widget class="GtkAlignment" id="alignment1"> + <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">1</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="GtkImage" id="image14"> - <property name="visible">True</property> - <property name="stock">gtk-justify-fill</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="GtkHButtonBox" id="hbuttonbox15"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + <property name="spacing">7</property> - <child> - <widget class="GtkLabel" id="label14"> - <property name="visible">True</property> - <property name="label" translatable="yes">History</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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> + <child> + <widget class="GtkButton" id="new_button"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-new</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_new_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:36 GMT"/> </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="clear_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> - <signal name="clicked" handler="on_clear_clicked" last_modification_time="Thu, 18 Mar 2004 19:12:00 GMT"/> <child> - <widget class="GtkAlignment" id="alignment5"> + <widget class="GtkButton" id="modify_button"> <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> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_modify_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:53 GMT"/> <child> - <widget class="GtkHBox" id="hbox9"> + <widget class="GtkAlignment" id="alignment44"> <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</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="GtkImage" id="image15"> + <widget class="GtkHBox" id="hbox2919"> <property name="visible">True</property> - <property name="stock">gtk-clear</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> + <property name="homogeneous">False</property> + <property name="spacing">2</property> - <child> - <widget class="GtkLabel" id="label15"> - <property name="visible">True</property> - <property name="label" translatable="yes">Clear</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> + <child> + <widget class="GtkImage" id="image334"> + <property name="visible">True</property> + <property name="stock">gtk-preferences</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="label201"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Modify</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> + </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">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="GtkImage" id="status_image"> - <property name="visible">True</property> - <property name="stock">gtk-no</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="GtkToggleButton" id="gpg_toggle_button"> - <property name="visible">True</property> - <property name="can_focus">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="image169"> + <widget class="GtkButton" id="delete_button"> <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> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed1"> - <property name="width_request">20</property> - <property name="visible">True</property> - - <child> - <widget class="GtkButton" id="contact_button"> - <property name="width_request">0</property> - <property name="height_request">0</property> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Click to see contact's information</property> + <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Anonymous <id@server/res></property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NONE</property> + <property name="label">gtk-delete</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_contact_clicked" last_modification_time="Sun, 15 Feb 2004 14:26:53 GMT"/> - </widget> - <packing> - <property name="x">0</property> - <property name="y">0</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="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVPaned" id="vpaned1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="position">170</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow3"> - <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> - <widget class="GtkTextView" id="conversation_textview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">False</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> + <signal name="clicked" handler="on_delete_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:46 GMT"/> </widget> </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow4"> - <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> - <widget class="GtkTextView" id="message_textview"> + <widget class="GtkButton" id="close_button"> <property name="visible">True</property> + <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_WORD</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> - <signal name="key_press_event" handler="on_msg_key_press_event" last_modification_time="Mon, 13 Oct 2003 17:48:48 GMT"/> + <property name="label">gtk-close</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_close_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:21:00 GMT"/> </widget> </child> </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> </child> </widget> <packing> <property name="padding">0</property> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> </packing> </child> @@ -666,13 +516,12 @@ </child> </widget> -<widget class="GtkWindow" id="configure_accounts_window"> +<widget class="GtkWindow" id="about_window"> <property name="visible">True</property> - <property name="title" translatable="yes">Accounts</property> + <property name="title" translatable="yes">About</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_height">200</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> @@ -680,34 +529,62 @@ <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> - <signal name="destroy" handler="on_configure_accounts_window_destroy" last_modification_time="Wed, 02 Mar 2005 12:06:09 GMT"/> + <signal name="destroy" handler="gtk_widget_destroy" last_modification_time="Wed, 17 Mar 2004 19:51:57 GMT"/> <child> - <widget class="GtkVBox" id="vbox5"> - <property name="border_width">7</property> + <widget class="GtkVBox" id="vbox6"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> - <widget class="GtkScrolledWindow" id="scrolledwindow5"> + <widget class="GtkHBox" id="hbox4"> <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_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> <child> - <widget class="GtkTreeView" id="accounts_treeview"> + <widget class="GtkImage" id="logo_image"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <signal name="cursor_changed" handler="on_accounts_treeview_cursor_changed" last_modification_time="Tue, 01 Mar 2005 18:21:26 GMT"/> + <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">10</property> + <property name="expand">False</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Gajim</b> (http://www.gajim.org) +Version 0.5.1 + +Copyright © 2003-2005 Gajim Team + +<b>Gajim Team</b> +Vincent Hanquez (tab@snarc.org) +Yann Le Boulanger (asterix@lagaule.org) +Nikos Kouremenos (nkour@jabber.org)</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> </widget> + <packing> + <property name="padding">10</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> </child> </widget> <packing> @@ -718,7 +595,7 @@ </child> <child> - <widget class="GtkHSeparator" id="hseparator1"> + <widget class="GtkHSeparator" id="hseparator2"> <property name="visible">True</property> </widget> <packing> @@ -729,11 +606,12 @@ </child> <child> - <widget class="GtkAlignment" id="alignment1"> + <widget class="GtkAlignment" id="alignment2"> + <property name="border_width">10</property> <property name="visible">True</property> <property name="xalign">0.5</property> <property name="yalign">0.5</property> - <property name="xscale">0</property> + <property name="xscale">0.20000000298</property> <property name="yscale">1</property> <property name="top_padding">0</property> <property name="bottom_padding">0</property> @@ -741,278 +619,47 @@ <property name="right_padding">0</property> <child> - <widget class="GtkHButtonBox" id="hbuttonbox15"> - <property name="border_width">5</property> + <widget class="GtkButton" id="close_button"> <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <property name="spacing">7</property> + <property name="can_focus">True</property> + <property name="label">gtk-close</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_close_clicked" last_modification_time="Sun, 26 Oct 2003 20:45:42 GMT"/> + </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 class="GtkButton" id="new_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-new</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_new_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:36 GMT"/> - </widget> - </child> +<widget class="GtkWindow" id="account_window"> + <property name="visible">True</property> + <property name="title" translatable="yes">Account Modification</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</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> + <signal name="destroy" handler="on_account_window_destroy" last_modification_time="Mon, 28 Feb 2005 20:30:37 GMT"/> - <child> - <widget class="GtkButton" id="modify_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_modify_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:53 GMT"/> - - <child> - <widget class="GtkAlignment" id="alignment44"> - <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="hbox2919"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image334"> - <property name="visible">True</property> - <property name="stock">gtk-preferences</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="label201"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Modify</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> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkButton" id="delete_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-delete</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_delete_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:20:46 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="close_button"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-close</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_close_button_clicked" last_modification_time="Tue, 01 Mar 2005 18:21:00 GMT"/> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkWindow" id="about_window"> - <property name="visible">True</property> - <property name="title" translatable="yes">About</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</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> - <signal name="destroy" handler="gtk_widget_destroy" last_modification_time="Wed, 17 Mar 2004 19:51:57 GMT"/> - - <child> - <widget class="GtkVBox" id="vbox6"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox4"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkImage" id="logo_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">10</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Gajim</b> (http://www.gajim.org) -Version 0.5.1 - -Copyright © 2003-2005 Gajim Team - -<b>Gajim Team</b> -Vincent Hanquez (tab@snarc.org) -Yann Le Boulanger (asterix@lagaule.org) -Nikos Kouremenos (nkour@jabber.org)</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> - </widget> - <packing> - <property name="padding">10</property> - <property name="expand">True</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="GtkHSeparator" id="hseparator2"> - <property name="visible">True</property> - </widget> - <packing> - <property name="padding">10</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkAlignment" id="alignment2"> - <property name="border_width">10</property> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0.20000000298</property> - <property name="yscale">1</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="GtkButton" id="close_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-close</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_close_clicked" last_modification_time="Sun, 26 Oct 2003 20:45:42 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkWindow" id="account_window"> - <property name="visible">True</property> - <property name="title" translatable="yes">Account Modification</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</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> - <signal name="destroy" handler="on_account_window_destroy" last_modification_time="Mon, 28 Feb 2005 20:30:37 GMT"/> - - <child> - <widget class="GtkVBox" id="vbox7"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> + <child> + <widget class="GtkVBox" id="vbox7"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> <child> <widget class="GtkHBox" id="hbox23"> @@ -8155,7 +7802,7 @@ Custom</property> </child> </widget> -<widget class="GtkWindow" id="tabbed_chat"> +<widget class="GtkWindow" id="tabbed_chat_window"> <property name="visible">True</property> <property name="title" translatable="yes">Chat</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> @@ -8164,50 +7811,394 @@ Custom</property> <property name="default_width">400</property> <property name="default_height">320</property> <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> + <property name="destroy_with_parent">True</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> - <signal name="destroy" handler="gtk_widget_destroy" last_modification_time="Thu, 27 Jan 2005 08:30:06 GMT"/> - <signal name="focus_in_event" handler="on_focus" last_modification_time="Thu, 27 Jan 2005 08:30:54 GMT"/> - <signal name="key_press_event" handler="on_chat_key_press_event" last_modification_time="Thu, 27 Jan 2005 08:31:21 GMT"/> + <signal name="destroy" handler="on_tabbed_chat_window_destroy" last_modification_time="Wed, 02 Mar 2005 17:56:08 GMT"/> + <signal name="focus_in_event" handler="on_tabbed_chat_window_focus_in_event" last_modification_time="Wed, 02 Mar 2005 17:57:33 GMT"/> + <signal name="key_press_event" handler="on_tabbed_chat_window_key_press_event" last_modification_time="Wed, 02 Mar 2005 17:59:50 GMT"/> <child> - <widget class="GtkNotebook" id="notebook"> + <widget class="GtkNotebook" id="chat_notebook"> <property name="visible">True</property> <property name="show_tabs">False</property> <property name="show_border">True</property> <property name="tab_pos">GTK_POS_TOP</property> <property name="scrollable">False</property> <property name="enable_popup">False</property> - <signal name="switch_page" handler="on_notebook_switch_page" last_modification_time="Thu, 27 Jan 2005 23:16:57 GMT"/> + <signal name="switch_page" handler="on_chat_notebook_switch_page" last_modification_time="Wed, 02 Mar 2005 18:00:21 GMT"/> <child> - <widget class="GtkLabel" id="label191"> + <widget class="GtkVBox" id="chat_vbox"> + <property name="border_width">5</property> <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> + <property name="homogeneous">False</property> + <property name="spacing">0</property> - <child> + <child> + <widget class="GtkHBox" id="hbox2921"> + <property name="border_width">5</property> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">5</property> + + <child> + <widget class="GtkButton" id="history_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> + <signal name="clicked" handler="on_history_button_clicked" last_modification_time="Wed, 02 Mar 2005 17:03:17 GMT"/> + + <child> + <widget class="GtkAlignment" id="alignment45"> + <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="hbox2922"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image406"> + <property name="visible">True</property> + <property name="stock">gtk-justify-fill</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="label203"> + <property name="visible">True</property> + <property name="label" translatable="yes">History</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> + </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="GtkButton" id="clear_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> + <signal name="clicked" handler="on_clear_button_clicked" last_modification_time="Wed, 02 Mar 2005 17:03:09 GMT"/> + + <child> + <widget class="GtkAlignment" id="alignment46"> + <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="hbox2923"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image407"> + <property name="visible">True</property> + <property name="stock">gtk-clear</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="label204"> + <property name="visible">True</property> + <property name="label" translatable="yes">Clear</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> + </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="GtkImage" id="status_image"> + <property name="visible">True</property> + <property name="stock">gtk-no</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="GtkToggleButton" id="gpg_togglebutton"> + <property name="visible">True</property> + <property name="can_focus">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="image409"> + <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> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkFixed" id="fixed2"> + <property name="width_request">20</property> + <property name="visible">True</property> + + <child> + <widget class="GtkButton" id="contact_button"> + <property name="width_request">0</property> + <property name="height_request">0</property> + <property name="visible">True</property> + <property name="tooltip" translatable="yes">Click to see contact's information</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Anonymous <id@server/res></property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_contact_button_clicked" last_modification_time="Wed, 02 Mar 2005 21:04:43 GMT"/> + </widget> + <packing> + <property name="x">0</property> + <property name="y">0</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="GtkButton" id="close_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> + <signal name="clicked" handler="on_close_button_clicked" last_modification_time="Wed, 02 Mar 2005 21:05:12 GMT"/> + + <child> + <widget class="GtkImage" id="image410"> + <property name="visible">True</property> + <property name="stock">gtk-close</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> + <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> + + <child> + <widget class="GtkVPaned" id="vpaned3"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="position">170</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow30"> + <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> + <widget class="GtkTextView" id="conversation_textview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="overwrite">False</property> + <property name="accepts_tab">True</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_WORD</property> + <property name="cursor_visible">False</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">0</property> + <property name="right_margin">0</property> + <property name="indent">0</property> + <property name="text" translatable="yes"></property> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">True</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow31"> + <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> + <widget class="GtkTextView" id="message_textview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="overwrite">False</property> + <property name="accepts_tab">True</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_WORD</property> + <property name="cursor_visible">True</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">0</property> + <property name="right_margin">0</property> + <property name="indent">0</property> + <property name="text" translatable="yes"></property> + <signal name="key_press_event" handler="on_message_textview_key_press_event" last_modification_time="Wed, 02 Mar 2005 21:05:35 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="shrink">True</property> + <property name="resize">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="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + + <child> <widget class="GtkLabel" id="label184"> <property name="visible">True</property> - <property name="label" translatable="yes">jid</property> + <property name="label" translatable="yes"></property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py index 0de948a13f..9a50ed7363 100644 --- a/plugins/gtkgui/gtkgui.py +++ b/plugins/gtkgui/gtkgui.py @@ -75,8 +75,6 @@ from config import * GTKGUI_GLADE='plugins/gtkgui/gtkgui.glade' -USE_TABBED_CHAT = 0 - class ImageCellRenderer(gtk.GenericCellRenderer): __gproperties__ = { @@ -98,7 +96,8 @@ class ImageCellRenderer(gtk.GenericCellRenderer): if model.get_value(iter, 0) == image: self.redraw = 1 cell_area = tree.get_cell_area(path, tree.get_column(0)) - 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: @@ -107,14 +106,16 @@ class ImageCellRenderer(gtk.GenericCellRenderer): model = tree.get_model() model.foreach(self.func, (image, tree)) if self.redraw: - gobject.timeout_add(image.get_data('iter').get_delay_time(), self.animation_timeout, tree, image) + gobject.timeout_add(image.get_data('iter').get_delay_time(), \ + self.animation_timeout, tree, image) else: image.set_data('iter', None) def on_render(self, window, widget, background_area,cell_area, \ expose_area, flags): 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, 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 @@ -128,7 +129,8 @@ class ImageCellRenderer(gtk.GenericCellRenderer): if not self.image.get_data('iter'): animation = self.image.get_animation() self.image.set_data('iter', animation.get_iter()) - gobject.timeout_add(self.image.get_data('iter').get_delay_time(), self.animation_timeout, widget, self.image) + gobject.timeout_add(self.image.get_data('iter').get_delay_time(), \ + self.animation_timeout, widget, self.image) pix = self.image.get_data('iter').get_pixbuf() elif self.image.get_storage_type() == gtk.IMAGE_PIXBUF: @@ -155,8 +157,10 @@ class ImageCellRenderer(gtk.GenericCellRenderer): x_offset = 0 y_offset = 0 if cell_area and pixbuf_width > 0 and pixbuf_height > 0: - x_offset = self.get_property("xalign") * (cell_area.width - calc_width - self.get_property("xpad")) - y_offset = self.get_property("yalign") * (cell_area.height - calc_height - self.get_property("ypad")) + x_offset = self.get_property("xalign") * (cell_area.width - \ + calc_width - self.get_property("xpad")) + y_offset = self.get_property("yalign") * (cell_area.height - \ + calc_height - self.get_property("ypad")) return x_offset, y_offset, calc_width, calc_height gobject.type_register(ImageCellRenderer) @@ -192,25 +196,31 @@ class User: class tabbed_chat_window: """Class for tabbed chat window""" def __init__(self, user, plugin, account): - self.xml = gtk.glade.XML(GTKGUI_GLADE, 'tabbed_chat', APP) - self.xml.get_widget('notebook').remove_page(0) + self.xml = gtk.glade.XML(GTKGUI_GLADE, 'tabbed_chat_window', APP) + self.chat_notebook = self.xml.get_widget('chat_notebook') + self.chat_notebook.remove_page(0) self.plugin = plugin self.account = account - self.widgets = {} + self.xmls = {} self.tagIn = {} self.tagOut = {} self.tagStatus = {} - self.users = {user.jid: user} - self.nb_unread = {user.jid: 0} - self.window = self.xml.get_widget('tabbed_chat') + self.users = {} + self.nb_unread = {} + self.window = self.xml.get_widget('tabbed_chat_window') self.new_user(user) self.show_title() - self.xml.signal_connect('gtk_widget_destroy', self.delete_event) - self.xml.signal_connect('on_focus', self.on_focus) - self.xml.signal_connect('on_chat_key_press_event', \ - self.on_chat_key_press_event) - self.xml.signal_connect('on_notebook_switch_page', \ - self.on_notebook_switch_page) + self.xml.signal_connect('on_tabbed_chat_window_destroy', \ + self.on_tabbed_chat_window_destroy) + self.xml.signal_connect('on_tabbed_chat_window_focus_in_event', \ + self.on_tabbed_chat_window_focus_in_event) + self.xml.signal_connect('on_tabbed_chat_window_key_press_event', \ + self.on_tabbed_chat_window_key_press_event) + self.xml.signal_connect('on_chat_notebook_switch_page', \ + self.on_chat_notebook_switch_page) + #TODO +# if use_tab: +# plugin.windows[account]['chats']['tabbed'] = self def update_tags(self): for jid in self.tagIn: @@ -222,6 +232,7 @@ class tabbed_chat_window: self.plugin.config['statusmsgcolor']) def show_title(self): + """redraw the window's title""" unread = 0 for jid in self.nb_unread: unread += self.nb_unread[jid] @@ -233,68 +244,73 @@ class tabbed_chat_window: self.window.set_title(start + "Chat (" + self.account + ")") def draw_widgets(self, user): - widget_img = self.widgets[user.jid]['image_status'] + """draw the widgets in a tab (status_image, contact_button ...) + according to the the information in the user variable""" + jid = user.jid + status_image = self.xmls[jid].get_widget('status_image') image = self.plugin.roster.pixbufs[user.show] if image.get_storage_type() == gtk.IMAGE_ANIMATION: - widget_img.set_from_animation(image.get_animation()) + status_image.set_from_animation(image.get_animation()) elif image.get_storage_type() == gtk.IMAGE_PIXBUF: - widget_img.set_from_pixbuf(image.get_pixbuf()) - self.widgets[user.jid]['button_contact'].set_label(\ - user.name + ' <' + user.jid + '>') + status_image.set_from_pixbuf(image.get_pixbuf()) + contact_button = self.xmls[jid].get_widget('contact_button') + contact_button.set_label(user.name + ' <' + jid + '>') if not user.keyID: - self.widgets[user.jid]['toggle_gpg'].set_sensitive(False) + self.xmls[jid].get_widget('gpg_togglebutton').set_sensitive(False) def redraw_tab(self, jid): + """redraw the label of the tab""" start = '' if self.nb_unread[jid] > 1: start = "[" + str(self.nb_unread[jid]) + "] " elif self.nb_unread[jid] == 1: start = "* " - nb = self.xml.get_widget("notebook") - child = self.widgets[jid]['vbox_tab'] - nb.set_tab_label_text(child, start + self.users[jid].name) + child = self.xmls[jid].get_widget('chat_vbox') + self.chat_notebook.set_tab_label_text(child, start + self.users[jid].name) def set_image(self, image, jid): if image.get_storage_type() == gtk.IMAGE_ANIMATION: - self.widgets[jid]['image_status'].\ + self.xmls[jid].get_widget('status_image').\ set_from_animation(image.get_animation()) elif image.get_storage_type() == gtk.IMAGE_PIXBUF: - self.widgets[jid]['image_status'].\ + self.xmls[jid].get_widget('status_image').\ set_from_pixbuf(image.get_pixbuf()) - def delete_event(self, widget): + def on_tabbed_chat_window_destroy(self, widget): """close window""" #clean self.plugin.windows[self.account]['chats'] for jid in self.users: del self.plugin.windows[self.account]['chats'][jid] - del self.plugin.windows[self.account]['chats']['tabbed'] + if self.plugin.windows[self.account]['chats'].has_key('tabbed'): + del self.plugin.windows[self.account]['chats']['tabbed'] def get_active_jid(self): - nb = self.xml.get_widget("notebook") - child = nb.get_nth_page(nb.get_current_page()) - jid = '' - for j in self.widgets: - c = self.widgets[j]['vbox_tab'] - if c == child: - jid = j + active_child = self.chat_notebook.get_nth_page(\ + self.chat_notebook.get_current_page()) + active_jid = '' + for jid in self.xmls: + child = self.xmls[jid].get_widget('chat_vbox') + if child == active_child: + active_jid = jid break - return jid + return active_jid - def on_clear(self, widget): + def on_clear_button_clicked(self, widget): """When clear button is pressed : clear the conversation""" jid = self.get_active_jid() - buffer = self.widgets[jid]['conversation'].get_buffer() - deb, end = buffer.get_bounds() - buffer.delete(deb, end) + conversation_buffer = self.xmls[jid].get_widget('conversation_textview').\ + get_buffer() + deb, end = conversation_buffer.get_bounds() + conversation_buffer.delete(deb, end) - def on_close_clicked(self, button): + def on_close_button_clicked(self, button): """When close button is pressed : close a tab""" jid = self.get_active_jid() self.remove_tab(jid) - def on_focus(self, widget, event): + def on_tabbed_chat_window_focus_in_event(self, widget, event): """When window get focus""" jid = self.get_active_jid() if self.nb_unread[jid] > 0: @@ -303,140 +319,74 @@ class tabbed_chat_window: self.show_title() self.plugin.systray.remove_jid(jid, self.account) - def on_history(self, widget): - """When history button is pressed : call log window""" + def on_history_button_clicked(self, widget): + """When history button is pressed : call history window""" jid = self.get_active_jid() if not self.plugin.windows['logs'].has_key(jid): self.plugin.windows['logs'][jid] = history_window(self.plugin, jid) - def on_notebook_switch_page(self, nb, page, page_num): - child = nb.get_nth_page(page_num) - jid = '' - for j in self.widgets: - c = self.widgets[j]['vbox_tab'] - if c == child: - jid = j + def on_chat_notebook_switch_page(self, notebook, page, page_num): + new_child = notebook.get_nth_page(page_num) + new_jid = '' + for jid in self.xmls: + child = self.xmls[jid].get_widget('chat_vbox') + if child == new_child: + new_jid = jid break - if self.nb_unread[jid] > 0: - self.nb_unread[jid] = 0 - self.redraw_tab(jid) + if self.nb_unread[new_jid] > 0: + self.nb_unread[new_jid] = 0 + self.redraw_tab(new_jid) self.show_title() - self.plugin.systray.remove_jid(jid, self.account) + self.plugin.systray.remove_jid(new_jid, self.account) def active_tab(self, jid): - child = self.widgets[jid]['vbox_tab'] - nb = self.xml.get_widget("notebook") - nb.set_current_page(nb.page_num(child)) - self.widgets[jid]['message'].grab_focus() + child = self.xmls[jid].get_widget('chat_vbox') + self.chat_notebook.set_current_page(\ + self.chat_notebook.page_num(child)) + self.xmls[jid].get_widget('message_textview').grab_focus() def remove_tab(self, jid): - if len(self.widgets) == 1: + if len(self.xmls) == 1: self.window.destroy() else: - nb = self.xml.get_widget('notebook') - nb.remove_page(nb.get_current_page()) + self.chat_notebook.remove_page(\ + self.chat_notebook.get_current_page()) del self.plugin.windows[self.account]['chats'][jid] del self.users[jid] del self.nb_unread[jid] - del self.widgets[jid] + del self.xmls[jid] del self.tagIn[jid] del self.tagOut[jid] del self.tagStatus[jid] - if len(self.widgets) == 1: - nb.set_show_tabs(False) + if len(self.xmls) == 1: + self.chat_notebook.set_show_tabs(False) def new_user(self, user): self.nb_unread[user.jid] = 0 self.users[user.jid] = user - - self.widgets[user.jid] = {} - vb = gtk.VBox() - vb.set_border_width(5) - self.widgets[user.jid]['vbox_tab'] = vb - hb = gtk.HBox(spacing=5) - hb.set_border_width(5) - vb.pack_start(hb, expand=False) + self.xmls[user.jid] = gtk.glade.XML(GTKGUI_GLADE, 'chat_vbox', APP) - button = gtk.Button(stock=gtk.STOCK_JUSTIFY_FILL) - button.get_children()[0].get_children()[0].get_children()[1].set_text("History") - button.connect("clicked", self.on_history) - hb.pack_start(button, expand=False, fill=False) - - button = gtk.Button(stock=gtk.STOCK_CLEAR) - button.connect("clicked", self.on_clear) - hb.pack_start(button, expand=False, fill=False) - - img = gtk.Image() - hb.pack_start(img, expand=False, fill=False) - self.widgets[user.jid]['image_status'] = img - - img = gtk.Image() - img.set_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_BUTTON) - button = gtk.ToggleButton() - button.add(img) - button.set_relief(gtk.RELIEF_NONE) - hb.pack_start(button, expand=False, fill=False) - self.widgets[user.jid]['toggle_gpg'] = button - - fixed = gtk.Fixed() - fixed.set_size_request(20, -1) - hb.pack_start(fixed) - button = gtk.Button("Anonymous") - button.set_relief(gtk.RELIEF_NONE) - button.connect("clicked", self.on_button_contact_clicked) - button.set_use_underline(False) - fixed.put(button, 0, 0) - self.widgets[user.jid]['button_contact'] = button - - img = gtk.Image() - img.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON) - button = gtk.Button() - button.add(img) - button.connect("clicked", self.on_close_clicked) - hb.pack_start(button, expand=False, fill=False) - - vp = gtk.VPaned() - vb.pack_start(vp) - vp.set_position(170) - - sw = gtk.ScrolledWindow() - sw.set_shadow_type(gtk.SHADOW_IN) - vp.add1(sw) - sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - tv = gtk.TextView() - tv.set_wrap_mode(gtk.WRAP_WORD) - tv.set_editable(False) - tv.set_cursor_visible(False) - sw.add(tv) - self.widgets[user.jid]['conversation'] = tv - buffer = tv.get_buffer() - end_iter = buffer.get_end_iter() - buffer.create_mark('end', end_iter, 0) - self.tagIn[user.jid] = buffer.create_tag("incoming") + conversation_textview = \ + self.xmls[user.jid].get_widget('conversation_textview') + conversation_buffer = conversation_textview.get_buffer() + end_iter = conversation_buffer.get_end_iter() + conversation_buffer.create_mark('end', end_iter, 0) + self.tagIn[user.jid] = conversation_buffer.create_tag('incoming') color = self.plugin.config['inmsgcolor'] - self.tagIn[user.jid].set_property("foreground", color) - self.tagOut[user.jid] = buffer.create_tag("outgoing") + self.tagIn[user.jid].set_property('foreground', color) + self.tagOut[user.jid] = conversation_buffer.create_tag('outgoing') color = self.plugin.config['outmsgcolor'] - self.tagOut[user.jid].set_property("foreground", color) - self.tagStatus[user.jid] = buffer.create_tag("status") + self.tagOut[user.jid].set_property('foreground', color) + self.tagStatus[user.jid] = conversation_buffer.create_tag('status') color = self.plugin.config['statusmsgcolor'] - self.tagStatus[user.jid].set_property("foreground", color) - - sw = gtk.ScrolledWindow() - sw.set_shadow_type(gtk.SHADOW_IN) - vp.add2(sw) - sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - tv = gtk.TextView() - tv.set_wrap_mode(gtk.WRAP_WORD) - sw.add(tv) - self.widgets[user.jid]['message'] = tv - tv.connect('key_press_event', self.on_msg_key_press_event) - - vb.show_all() - nb = self.xml.get_widget("notebook") - nb.append_page(vb) - if len(self.widgets) > 1: - nb.set_show_tabs(True) + self.tagStatus[user.jid].set_property('foreground', color) + + self.xmls[user.jid].signal_autoconnect(self) + + self.chat_notebook.append_page(self.xmls[user.jid].\ + get_widget('chat_vbox')) + if len(self.xmls) > 1: + self.chat_notebook.set_show_tabs(True) self.redraw_tab(user.jid) self.draw_widgets(user) @@ -448,53 +398,53 @@ class tabbed_chat_window: self.print_conversation(_("%s is now %s (%s)") % (user.name, \ user.show, user.status), user.jid, 'status') - def on_msg_key_press_event(self, widget, event): + def on_message_textview_key_press_event(self, widget, event): """When a key is pressed : if enter is pressed without the shit key, message (if not empty) is sent and printed in the conversation""" if event.keyval == gtk.keysyms.Return: if (event.state & gtk.gdk.SHIFT_MASK): return 0 - txt_buffer = widget.get_buffer() - start_iter = txt_buffer.get_start_iter() - end_iter = txt_buffer.get_end_iter() - txt = txt_buffer.get_text(start_iter, end_iter, 0) - if txt != '': + message_buffer = widget.get_buffer() + start_iter = message_buffer.get_start_iter() + end_iter = message_buffer.get_end_iter() + message = message_buffer.get_text(start_iter, end_iter, 0) + if message != '': keyID = '' jid = self.get_active_jid() - if self.widgets[jid]['toggle_gpg'].get_active(): + if self.xmls[jid].get_widget('gpg_togglebutton').get_active(): keyID = self.users[jid].keyID - self.plugin.send('MSG', self.account, (jid, txt, keyID)) - txt_buffer.set_text('', -1) - self.print_conversation(txt, jid, jid) + self.plugin.send('MSG', self.account, (jid, message, keyID)) + message_buffer.set_text('', -1) + self.print_conversation(message, jid, jid) return 1 return 0 - def on_chat_key_press_event(self, widget, event): - nb = self.xml.get_widget("notebook") + def on_tabbed_chat_window_key_press_event(self, widget, event): st = "1234567890" if event.keyval == gtk.keysyms.Escape: jid = self.get_active_jid() self.remove_tab(jid) elif event.string and event.string in st \ and (event.state & gtk.gdk.MOD1_MASK): - nb.set_current_page(st.index(event.string)) + self.chat_notebook.set_current_page(st.index(event.string)) elif event.keyval == gtk.keysyms.Page_Down and \ (event.state & gtk.gdk.CONTROL_MASK): - current = nb.get_current_page() + current = self.chat_notebook.get_current_page() if current > 0: - nb.set_current_page(current-1) + self.chat_notebook.set_current_page(current-1) else: - nb.set_current_page(nb.get_n_pages()-1) + self.chat_notebook.set_current_page(\ + self.chat_notebook.get_n_pages()-1) elif event.keyval == gtk.keysyms.Page_Up and \ (event.state & gtk.gdk.CONTROL_MASK): - current = nb.get_current_page() - if current < (nb.get_n_pages()-1): - nb.set_current_page(current+1) + current = self.chat_notebook.get_current_page() + if current < (self.chat_notebook.get_n_pages()-1): + self.chat_notebook.set_current_page(current+1) else: - nb.set_current_page(0) + self.chat_notebook.set_current_page(0) - def on_button_contact_clicked(self, widget): + def on_contact_button_clicked(self, widget): """When button contact is clicked""" jid = self.get_active_jid() user = self.users[jid] @@ -505,8 +455,8 @@ class tabbed_chat_window: jid = self.get_active_jid() user = self.users[jid] while not q.empty(): - evt = q.get() - self.print_conversation(evt[0], jid, tim = evt[1]) + event = q.get() + self.print_conversation(event[0], jid, tim = event[1]) self.plugin.roster.nb_unread -= 1 self.plugin.roster.show_title() del self.plugin.queues[self.account][jid] @@ -518,27 +468,27 @@ class tabbed_chat_window: if len(self.plugin.roster.contacts[self.account][jid]) == 1: self.plugin.roster.remove_user(user, self.account) - def print_conversation(self, txt, jid, contact = None, tim = None): + def print_conversation(self, text, jid, contact = None, tim = None): """Print a line in the conversation : if contact is set to status : it's a status message if contact is set to another value : it's an outgoing message if contact is not set : it's an incomming message""" user = self.users[jid] - conversation = self.widgets[jid]['conversation'] - buffer = conversation.get_buffer() - if not txt: - txt = "" - end_iter = buffer.get_end_iter() + conversation_textview = self.xmls[jid].get_widget('conversation_textview') + conversation_buffer = conversation_textview.get_buffer() + if not text: + text = "" + end_iter = conversation_buffer.get_end_iter() if not tim: tim = time.localtime() tims = time.strftime("[%H:%M:%S]", tim) - buffer.insert(end_iter, tims + ' ') + conversation_buffer.insert(end_iter, tims + ' ') - otxt = '' - ttxt = '' + otext = '' + ttext = '' if contact == 'status': tag = 'status' - ttxt = txt + '\n' + ttext = text + '\n' else: if contact: tag = 'outgoing' @@ -547,241 +497,39 @@ class tabbed_chat_window: tag = 'incoming' name = user.name - if string.find(txt, '/me ') == 0: - ttxt = name + ' ' + txt[4:] + '\n' + if string.find(text, '/me ') == 0: + ttext = name + ' ' + text[4:] + '\n' else: - ttxt = '<' + name + '> ' - otxt = txt + '\n' + ttext = '<' + name + '> ' + otext = text + '\n' - buffer.insert_with_tags_by_name(end_iter, ttxt, tag) - if len(otxt) > 0: + conversation_buffer.insert_with_tags_by_name(end_iter, ttext, tag) + if len(otext) > 0: beg = 0 if self.plugin.config['useemoticons']: index = 0 - while index < len(otxt): - if otxt[index] in self.plugin.roster.begin_emot: + while index < len(otext): + if otext[index] in self.plugin.roster.begin_emot: for s in self.plugin.roster.emoticons: l = len(s) - if s == otxt[index:index+l]: - buffer.insert(end_iter, otxt[beg:index]) - buffer.insert_pixbuf(end_iter, \ + if s == otext[index:index+l]: + conversation_buffer.insert(end_iter, otext[beg:index]) + conversation_buffer.insert_pixbuf(end_iter, \ self.plugin.roster.emoticons[s]) index+=l beg = index index+=1 - buffer.insert(end_iter, otxt[beg:]) + conversation_buffer.insert(end_iter, otext[beg:]) #scroll to the end of the textview - conversation.scroll_to_mark(buffer.get_mark('end'), 0.1, 0, 0, 0) + conversation_textview.scroll_to_mark(conversation_buffer.get_mark('end'),\ + 0.1, 0, 0, 0) if (jid != self.get_active_jid() or not self.window.is_active()) and \ contact != 'status': self.nb_unread[jid] += 1 self.redraw_tab(jid) self.show_title() - -class chat_window: - """Class for chat window""" - def delete_event(self, widget): - """close window""" - del self.plugin.windows[self.account]['chats'][self.user.jid] - - def print_conversation(self, txt, jid, contact = None, tim = None): - """Print a line in the conversation : - if contact is set to status : it's a status message - if contact is set to another value : it's an outgoing message - if contact is not set : it's an incomming message""" - conversation_textview = self.xml.get_widget('conversation_textview') - conversation_buffer = conversation_textview.get_buffer() - if not txt: - txt = "" - end_iter = conversation_buffer.get_end_iter() - if not tim: - tim = time.localtime() - tims = time.strftime("[%H:%M:%S]", tim) - conversation_buffer.insert(end_iter, tims + ' ') - - otxt = '' - ttxt = '' - if contact and contact == 'status': - tag = 'status' - ttxt = txt + '\n' - else: - if contact: - tag = 'outgoing' - name = self.plugin.nicks[self.account] - else: - tag = 'incoming' - name = self.user.name - - if string.find(txt, '/me ') == 0: - ttxt = name + ' ' + txt[4:] + '\n' - else: - ttxt = '<' + name + '> ' - otxt = txt + '\n' - - conversation_buffer.insert_with_tags_by_name(end_iter, ttxt, tag) - if len(otxt) > 0: - beg = 0 - if self.plugin.config['useemoticons']: - index = 0 - while index < len(otxt): - if otxt[index] in self.plugin.roster.begin_emot: - for s in self.plugin.roster.emoticons: - l = len(s) - if s == otxt[index:index+l]: - conversation_buffer.insert(end_iter, otxt[beg:index]) - conversation_buffer.insert_pixbuf(end_iter, self.plugin.roster.emoticons[s]) - index+=l - beg = index - index+=1 - conversation_buffer.insert(end_iter, otxt[beg:]) - - #scroll to the end of the textview - conversation_textview.scroll_to_mark(conversation_buffer.get_mark('end'),\ - 0.1, 0, 0, 0) - if not self.window.is_active() and contact != 'status': - self.nb_unread += 1 - self.show_title() - - def show_title(self): - start = "" - if self.nb_unread > 1: - start = "[" + str(self.nb_unread) + "] " - elif self.nb_unread == 1: - start = "* " - self.window.set_title(start + self.user.name + " (" + self.account + ")") - - def update_tags(self): - self.tagIn.set_property("foreground", self.plugin.config['inmsgcolor']) - self.tagOut.set_property("foreground", self.plugin.config['outmsgcolor']) - self.tagStatus.set_property("foreground", \ - self.plugin.config['statusmsgcolor']) - - def set_image(self, image, jid): - if image.get_storage_type() == gtk.IMAGE_ANIMATION: - self.status_image.set_from_animation(image.get_animation()) - elif image.get_storage_type() == gtk.IMAGE_PIXBUF: - self.status_image.set_from_pixbuf(image.get_pixbuf()) - - def read_queue(self, q): - """read queue and print messages containted in it""" - while not q.empty(): - evt = q.get() - self.print_conversation(evt[0], self.user.jid, tim = evt[1]) - self.plugin.roster.nb_unread -= 1 - self.plugin.roster.show_title() - del self.plugin.queues[self.account][self.user.jid] - self.plugin.roster.redraw_jid(self.user.jid, self.account) - self.plugin.systray.remove_jid(self.user.jid, self.account) - showOffline = self.plugin.config['showoffline'] - if (self.user.show == 'offline' or self.user.show == 'error') and \ - not showOffline: - if len(self.plugin.roster.contacts[self.account][self.user.jid]) == 1: - self.plugin.roster.remove_user(self.user, self.account) - - def on_chat_key_press_event(self, widget, event): - if event.keyval == gtk.keysyms.Escape: - widget.get_toplevel().destroy() - - def on_msg_key_press_event(self, widget, event): - """When a key is pressed : - if enter is pressed without the shit key, message (if not empty) is sent - and printed in the conversation""" - if event.keyval == gtk.keysyms.Return: - if (event.state & gtk.gdk.SHIFT_MASK): - return 0 - message_buffer = widget.get_buffer() - start_iter = message_buffer.get_start_iter() - end_iter = message_buffer.get_end_iter() - txt = message_buffer.get_text(start_iter, end_iter, 0) - if txt != '': - keyID = '' - if self.xml.get_widget('gpg_toggle_button').get_active(): - keyID = self.keyID - self.plugin.send('MSG', self.account, (self.user.jid, txt, keyID)) - message_buffer.set_text('', -1) - self.print_conversation(txt, self.user.jid, self.user.jid) - widget.grab_focus() - return 1 - return 0 - - def on_clear(self, widget): - """When clear button is pressed : - clear the conversation""" - conversation_buffer = self.xml.get_widget('conversation_textview').\ - get_buffer() - deb, end = conversation_buffer.get_bounds() - conversation_buffer.delete(deb, end) - - def on_history(self, widget): - """When history button is pressed : call log window""" - if not self.plugin.windows['logs'].has_key(self.user.jid): - self.plugin.windows['logs'][self.user.jid] = history_window(self.plugin, self.user.jid) - - def on_focus(self, widget, event): - """When window get focus""" - self.plugin.systray.remove_jid(self.user.jid, self.account) - if self.nb_unread > 0: - self.nb_unread = 0 - self.show_title() - - def on_button_contact_clicked(self, widget): - """When button contact is clicked""" - self.plugin.roster.on_info(widget, self.user, self.account) - - def __init__(self, user, plugin, account): - self.user = user - self.plugin = plugin - self.account = account - self.keyID = self.user.keyID - self.nb_unread = 0 - self.xml = gtk.glade.XML(GTKGUI_GLADE, 'Chat', APP) - self.window = self.xml.get_widget('Chat') - self.show_title() - self.status_image = self.xml.get_widget('status_image') - image = self.plugin.roster.pixbufs[user.show] - if image.get_storage_type() == gtk.IMAGE_ANIMATION: - self.status_image.set_from_animation(image.get_animation()) - elif image.get_storage_type() == gtk.IMAGE_PIXBUF: - self.status_image.set_from_pixbuf(image.get_pixbuf()) - contact_button = self.xml.get_widget('contact_button') - contact_button.set_label(user.name + ' <' + user.jid + '>') - if not self.keyID: - self.xml.get_widget('gpg_toggle_button').set_sensitive(False) - message_textview = self.xml.get_widget('message_textview') - message_textview.grab_focus() - conversation_textview = self.xml.get_widget('conversation_textview') - conversation_buffer = conversation_textview.get_buffer() - end_iter = conversation_buffer.get_end_iter() - conversation_buffer.create_mark('end', end_iter, 0) - self.xml.signal_connect('gtk_widget_destroy', self.delete_event) - self.xml.signal_connect('on_clear_clicked', self.on_clear) - self.xml.signal_connect('on_button_contact_clicked', \ - self.on_button_contact_clicked) - self.xml.get_widget('button_contact').set_use_underline(False) - self.xml.signal_connect('on_focus', self.on_focus) - self.xml.signal_connect('on_history_clicked', self.on_history) - self.xml.signal_connect('on_msg_key_press_event', \ - self.on_msg_key_press_event) - self.xml.signal_connect('on_chat_key_press_event', \ - self.on_chat_key_press_event) - self.tagIn = conversation_buffer.create_tag("incoming") - color = self.plugin.config['inmsgcolor'] - self.tagIn.set_property("foreground", color) - self.tagOut = conversation_buffer.create_tag("outgoing") - color = self.plugin.config['outmsgcolor'] - self.tagOut.set_property("foreground", color) - self.tagStatus = conversation_buffer.create_tag("status") - color = self.plugin.config['statusmsgcolor'] - self.tagStatus.set_property("foreground", color) - #print queued messages - if plugin.queues[account].has_key(user.jid): - self.read_queue(plugin.queues[account][user.jid]) - if self.user.show != 'online': - self.print_conversation(_("%s is now %s (%s)") % (user.name, \ - user.show, user.status), user.jid, 'status') - class gc: def delete_event(self, widget): """close window""" @@ -1952,7 +1700,7 @@ class roster_window: self.set_cb() def new_chat(self, user, account): - if USE_TABBED_CHAT: + if self.plugin.config['usetabbedchat']: if not self.plugin.windows[account]['chats'].has_key('tabbed'): self.plugin.windows[account]['chats']['tabbed'] = \ tabbed_chat_window(user, self.plugin, account) @@ -1963,7 +1711,7 @@ class roster_window: self.plugin.windows[account]['chats']['tabbed'].window.present() else: self.plugin.windows[account]['chats'][user.jid] = \ - chat_window(user, self.plugin, account) + tabbed_chat_window(user, self.plugin, account) def on_message(self, jid, msg, tim, account): """when we receive a message""" @@ -2098,12 +1846,12 @@ class roster_window: self.tree.expand_row(path, False) else: if self.plugin.windows[account]['chats'].has_key(jid): - if USE_TABBED_CHAT: + if self.plugin.config['usetabbedchat']: self.plugin.windows[account]['chats'][jid].active_tab(jid) self.plugin.windows[account]['chats'][jid].window.present() elif self.contacts[account].has_key(jid): self.new_chat(self.contacts[account][jid][0], account) - self.plugin.windows[account]['chats']['tabbed'].active_tab(jid) + self.plugin.windows[account]['chats'][jid].active_tab(jid) def on_roster_treeview_row_expanded(self, widget, iter, path): """When a row is expanded : @@ -3149,9 +2897,6 @@ class plugin: break if pix: gtk.window_set_default_icon(pix) - if self.config['usetabbedchat']: - global USE_TABBED_CHAT - USE_TABBED_CHAT = 1 self.roster = roster_window(self) gtk.timeout_add(100, self.read_queue) gtk.timeout_add(100, self.read_sleepy) -- GitLab