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_grid_attach (GTK_GRID (*table_common_settings),
168 settings->network_chooser, 1, 0, 1, 1);
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",
179 "entry_username", "username",
182 empathy_builder_connect (self->ui_details->gui, settings,
183 "table_irc_settings", "destroy", account_widget_irc_destroy_cb,
186 self->ui_details->default_focus = g_strdup ("entry_nick");
188 g_object_unref (ac_settings);
190 /* Automatically set password-prompt when needed */
191 password = empathy_account_settings_get_string (ac_settings, "password");
193 if (set_password_prompt_if_needed (ac_settings, password))
195 /* Apply right now to save password-prompt */
196 empathy_account_settings_apply_async (ac_settings, NULL, NULL);
199 g_signal_connect (entry_password, "changed",
200 G_CALLBACK (entry_password_changed_cb), settings);
202 return EMPATHY_IRC_NETWORK_CHOOSER (settings->network_chooser);
205 EmpathyIrcNetworkChooser *
206 empathy_account_widget_irc_build_simple (EmpathyAccountWidget *self,
207 const char *filename)
209 EmpathyAccountWidgetIrc *settings;
210 EmpathyAccountSettings *ac_settings;
211 GtkAlignment *alignment;
213 settings = g_slice_new0 (EmpathyAccountWidgetIrc);
214 settings->self = self;
216 self->ui_details->gui = empathy_builder_get_file (filename,
217 "vbox_irc_simple", &self->ui_details->widget,
218 "alignment_network_simple", &alignment,
221 /* Add network chooser button */
222 g_object_get (settings->self, "settings", &ac_settings, NULL);
224 settings->network_chooser = empathy_irc_network_chooser_new (ac_settings);
226 g_signal_connect (settings->network_chooser, "changed",
227 G_CALLBACK (network_changed_cb), settings);
229 gtk_container_add (GTK_CONTAINER (alignment), settings->network_chooser);
231 gtk_widget_show (settings->network_chooser);
233 empathy_account_widget_handle_params (self,
234 "entry_nick_simple", "account",
237 empathy_builder_connect (self->ui_details->gui, settings,
238 "vbox_irc_simple", "destroy", account_widget_irc_destroy_cb,
241 self->ui_details->default_focus = g_strdup ("entry_nick_simple");
243 g_object_unref (ac_settings);
245 return EMPATHY_IRC_NETWORK_CHOOSER (settings->network_chooser);