2 * Copyright (C) 2007-2008 Guillaume Desmottes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 * Authors: Guillaume Desmottes <gdesmott@gnome.org>
27 #include <glib/gi18n-lib.h>
30 #include <libempathy/empathy-utils.h>
32 #include "empathy-irc-network-dialog.h"
33 #include "empathy-irc-network-chooser.h"
34 #include "empathy-account-widget.h"
35 #include "empathy-account-widget-private.h"
36 #include "empathy-account-widget-irc.h"
37 #include "empathy-ui-utils.h"
39 #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT | EMPATHY_DEBUG_IRC
40 #include <libempathy/empathy-debug.h>
43 EmpathyAccountWidget
*self
;
45 GtkWidget
*vbox_settings
;
47 GtkWidget
*network_chooser
;
48 } EmpathyAccountWidgetIrc
;
51 account_widget_irc_destroy_cb (GtkWidget
*widget
,
52 EmpathyAccountWidgetIrc
*settings
)
54 g_slice_free (EmpathyAccountWidgetIrc
, settings
);
58 account_widget_irc_setup (EmpathyAccountWidgetIrc
*settings
)
60 const gchar
*nick
= NULL
;
61 const gchar
*fullname
= NULL
;
62 EmpathyAccountSettings
*ac_settings
;
64 g_object_get (settings
->self
, "settings", &ac_settings
, NULL
);
66 nick
= empathy_account_settings_get_string (ac_settings
, "account");
67 fullname
= empathy_account_settings_get_string (ac_settings
,
72 nick
= g_strdup (g_get_user_name ());
73 empathy_account_settings_set_string (ac_settings
,
79 fullname
= g_strdup (g_get_real_name ());
82 fullname
= g_strdup (nick
);
84 empathy_account_settings_set_string (ac_settings
,
85 "fullname", fullname
);
90 network_changed_cb (EmpathyIrcNetworkChooser
*chooser
,
91 EmpathyAccountWidgetIrc
*settings
)
93 empathy_account_widget_changed (settings
->self
);
97 * set_password_prompt_if_needed:
99 * If @password is not empty, this function sets the 'password-prompt' param
100 * on @ac_settings. This will ensure that Idle actually asks for the password
103 * Return: %TRUE if the password-prompt param has been changed
106 set_password_prompt_if_needed (EmpathyAccountSettings
*ac_settings
,
107 const gchar
*password
)
111 prompt
= !tp_str_empty (password
);
113 if (prompt
== empathy_account_settings_get_boolean (ac_settings
,
117 empathy_account_settings_set_boolean (ac_settings
, "password-prompt",
124 entry_password_changed_cb (GtkEntry
*entry
,
125 EmpathyAccountWidgetIrc
*settings
)
127 const gchar
*password
;
128 EmpathyAccountSettings
*ac_settings
;
130 g_object_get (settings
->self
, "settings", &ac_settings
, NULL
);
132 password
= gtk_entry_get_text (entry
);
134 set_password_prompt_if_needed (ac_settings
, password
);
136 g_object_unref (ac_settings
);
139 EmpathyIrcNetworkChooser
*
140 empathy_account_widget_irc_build (EmpathyAccountWidget
*self
,
141 const char *filename
,
142 GtkWidget
**table_common_settings
)
144 EmpathyAccountWidgetIrc
*settings
;
145 EmpathyAccountSettings
*ac_settings
;
146 GtkWidget
*entry_password
;
147 const gchar
*password
;
149 settings
= g_slice_new0 (EmpathyAccountWidgetIrc
);
150 settings
->self
= self
;
152 self
->ui_details
->gui
= empathy_builder_get_file (filename
,
153 "table_irc_settings", table_common_settings
,
154 "vbox_irc", &self
->ui_details
->widget
,
155 "table_irc_settings", &settings
->vbox_settings
,
156 "entry_password", &entry_password
,
159 /* Add network chooser button */
160 g_object_get (settings
->self
, "settings", &ac_settings
, NULL
);
162 settings
->network_chooser
= empathy_irc_network_chooser_new (ac_settings
);
164 g_signal_connect (settings
->network_chooser
, "changed",
165 G_CALLBACK (network_changed_cb
), settings
);
167 gtk_table_attach (GTK_TABLE (*table_common_settings
),
168 settings
->network_chooser
, 1, 2, 0, 1, GTK_EXPAND
| GTK_FILL
, 0, 0, 0);
170 gtk_widget_show (settings
->network_chooser
);
172 account_widget_irc_setup (settings
);
174 empathy_account_widget_handle_params (self
,
175 "entry_nick", "account",
176 "entry_fullname", "fullname",
177 "entry_password", "password",
178 "entry_quit_message", "quit-message",
181 empathy_builder_connect (self
->ui_details
->gui
, settings
,
182 "table_irc_settings", "destroy", account_widget_irc_destroy_cb
,
185 self
->ui_details
->default_focus
= g_strdup ("entry_nick");
187 g_object_unref (ac_settings
);
189 /* Automatically set password-prompt when needed */
190 password
= empathy_account_settings_get_string (ac_settings
, "password");
192 if (set_password_prompt_if_needed (ac_settings
, password
))
194 /* Apply right now to save password-prompt */
195 empathy_account_settings_apply_async (ac_settings
, NULL
, NULL
);
198 g_signal_connect (entry_password
, "changed",
199 G_CALLBACK (entry_password_changed_cb
), settings
);
201 return EMPATHY_IRC_NETWORK_CHOOSER (settings
->network_chooser
);
204 EmpathyIrcNetworkChooser
*
205 empathy_account_widget_irc_build_simple (EmpathyAccountWidget
*self
,
206 const char *filename
)
208 EmpathyAccountWidgetIrc
*settings
;
209 EmpathyAccountSettings
*ac_settings
;
210 GtkAlignment
*alignment
;
212 settings
= g_slice_new0 (EmpathyAccountWidgetIrc
);
213 settings
->self
= self
;
215 self
->ui_details
->gui
= empathy_builder_get_file (filename
,
216 "vbox_irc_simple", &self
->ui_details
->widget
,
217 "alignment_network_simple", &alignment
,
220 /* Add network chooser button */
221 g_object_get (settings
->self
, "settings", &ac_settings
, NULL
);
223 settings
->network_chooser
= empathy_irc_network_chooser_new (ac_settings
);
225 g_signal_connect (settings
->network_chooser
, "changed",
226 G_CALLBACK (network_changed_cb
), settings
);
228 gtk_container_add (GTK_CONTAINER (alignment
), settings
->network_chooser
);
230 gtk_widget_show (settings
->network_chooser
);
232 empathy_account_widget_handle_params (self
,
233 "entry_nick_simple", "account",
236 empathy_builder_connect (self
->ui_details
->gui
, settings
,
237 "vbox_irc_simple", "destroy", account_widget_irc_destroy_cb
,
240 self
->ui_details
->default_focus
= g_strdup ("entry_nick_simple");
242 g_object_unref (ac_settings
);
244 return EMPATHY_IRC_NETWORK_CHOOSER (settings
->network_chooser
);