|
Packit |
79f644 |
/*
|
|
Packit |
79f644 |
* Copyright (C) 2007-2008 Guillaume Desmottes
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
79f644 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
79f644 |
* License as published by the Free Software Foundation; either
|
|
Packit |
79f644 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
79f644 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
79f644 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
79f644 |
* Lesser General Public License for more details.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
79f644 |
* License along with this library; if not, write to the Free Software
|
|
Packit |
79f644 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* Authors: Guillaume Desmottes <gdesmott@gnome.org>
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "config.h"
|
|
Packit |
79f644 |
#include "tpaw-account-widget-irc.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "tpaw-account-widget-private.h"
|
|
Packit |
79f644 |
#include "tpaw-builder.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#define DEBUG_FLAG TPAW_DEBUG_ACCOUNT | TPAW_DEBUG_IRC
|
|
Packit |
79f644 |
#include "tpaw-debug.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
typedef struct {
|
|
Packit |
79f644 |
TpawAccountWidget *self;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GtkWidget *vbox_settings;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GtkWidget *network_chooser;
|
|
Packit |
79f644 |
} TpawAccountWidgetIrc;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
account_widget_irc_destroy_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawAccountWidgetIrc *settings)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_slice_free (TpawAccountWidgetIrc, settings);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
account_widget_irc_setup (TpawAccountWidgetIrc *settings)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gchar *nick = NULL;
|
|
Packit |
79f644 |
gchar *fullname = NULL;
|
|
Packit |
79f644 |
TpawAccountSettings *ac_settings;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_get (settings->self, "settings", &ac_settings, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
nick = tpaw_account_settings_dup_string (ac_settings, "account");
|
|
Packit |
79f644 |
fullname = tpaw_account_settings_dup_string (ac_settings,
|
|
Packit |
79f644 |
"fullname");
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (nick == NULL)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
nick = g_strdup (g_get_user_name ());
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_account_settings_set (ac_settings,
|
|
Packit |
79f644 |
"account", g_variant_new_string (nick));
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (fullname == NULL)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
fullname = g_strdup (g_get_real_name ());
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (fullname == NULL)
|
|
Packit |
79f644 |
fullname = g_strdup (nick);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_account_settings_set (ac_settings,
|
|
Packit |
79f644 |
"fullname", g_variant_new_string (fullname));
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_free (nick);
|
|
Packit |
79f644 |
g_free (fullname);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
network_changed_cb (TpawIrcNetworkChooser *chooser,
|
|
Packit |
79f644 |
TpawAccountWidgetIrc *settings)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
tpaw_account_widget_changed (settings->self);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/**
|
|
Packit |
79f644 |
* set_password_prompt_if_needed:
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* If @password is not empty, this function sets the 'password-prompt' param
|
|
Packit |
79f644 |
* on @ac_settings. This will ensure that Idle actually asks for the password
|
|
Packit |
79f644 |
* when connecting.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* Return: %TRUE if the password-prompt param has been changed
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
static gboolean
|
|
Packit |
79f644 |
set_password_prompt_if_needed (TpawAccountSettings *ac_settings,
|
|
Packit |
79f644 |
const gchar *password)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gboolean prompt;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
prompt = !tp_str_empty (password);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (prompt == tpaw_account_settings_get_boolean (ac_settings,
|
|
Packit |
79f644 |
"password-prompt"))
|
|
Packit |
79f644 |
return FALSE;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_account_settings_set (ac_settings, "password-prompt",
|
|
Packit |
79f644 |
g_variant_new_boolean (prompt));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return TRUE;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
entry_password_changed_cb (GtkEntry *entry,
|
|
Packit |
79f644 |
TpawAccountWidgetIrc *settings)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
const gchar *password;
|
|
Packit |
79f644 |
TpawAccountSettings *ac_settings;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_get (settings->self, "settings", &ac_settings, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
password = gtk_entry_get_text (entry);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
set_password_prompt_if_needed (ac_settings, password);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (ac_settings);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
TpawIrcNetworkChooser *
|
|
Packit |
79f644 |
tpaw_account_widget_irc_build (TpawAccountWidget *self,
|
|
Packit |
79f644 |
const char *filename,
|
|
Packit |
79f644 |
GtkWidget **table_common_settings,
|
|
Packit |
79f644 |
GtkWidget **box)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawAccountWidgetIrc *settings;
|
|
Packit |
79f644 |
TpawAccountSettings *ac_settings;
|
|
Packit |
79f644 |
GtkWidget *entry_password;
|
|
Packit |
79f644 |
gchar *password;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
settings = g_slice_new0 (TpawAccountWidgetIrc);
|
|
Packit |
79f644 |
settings->self = self;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self->ui_details->gui = tpaw_builder_get_resource (filename,
|
|
Packit |
79f644 |
"table_irc_settings", table_common_settings,
|
|
Packit |
79f644 |
"vbox_irc", box,
|
|
Packit |
79f644 |
"table_irc_settings", &settings->vbox_settings,
|
|
Packit |
79f644 |
"entry_password", &entry_password,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Add network chooser button */
|
|
Packit |
79f644 |
g_object_get (settings->self, "settings", &ac_settings, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
settings->network_chooser = tpaw_irc_network_chooser_new (ac_settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_signal_connect (settings->network_chooser, "changed",
|
|
Packit |
79f644 |
G_CALLBACK (network_changed_cb), settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_grid_attach (GTK_GRID (*table_common_settings),
|
|
Packit |
79f644 |
settings->network_chooser, 1, 0, 1, 1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_widget_show (settings->network_chooser);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
account_widget_irc_setup (settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_account_widget_handle_params (self,
|
|
Packit |
79f644 |
"entry_nick", "account",
|
|
Packit |
79f644 |
"entry_fullname", "fullname",
|
|
Packit |
79f644 |
"entry_password", "password",
|
|
Packit |
79f644 |
"entry_quit_message", "quit-message",
|
|
Packit |
79f644 |
"entry_username", "username",
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_builder_connect (self->ui_details->gui, settings,
|
|
Packit |
79f644 |
"table_irc_settings", "destroy", account_widget_irc_destroy_cb,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self->ui_details->default_focus = g_strdup ("entry_nick");
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (ac_settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Automatically set password-prompt when needed */
|
|
Packit |
79f644 |
password = tpaw_account_settings_dup_string (ac_settings, "password");
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (set_password_prompt_if_needed (ac_settings, password))
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
/* Apply right now to save password-prompt */
|
|
Packit |
79f644 |
tpaw_account_settings_apply_async (ac_settings, NULL, NULL);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_free (password);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_signal_connect (entry_password, "changed",
|
|
Packit |
79f644 |
G_CALLBACK (entry_password_changed_cb), settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return TPAW_IRC_NETWORK_CHOOSER (settings->network_chooser);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
TpawIrcNetworkChooser *
|
|
Packit |
79f644 |
tpaw_account_widget_irc_build_simple (TpawAccountWidget *self,
|
|
Packit |
79f644 |
const char *filename,
|
|
Packit |
79f644 |
GtkWidget **box)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawAccountWidgetIrc *settings;
|
|
Packit |
79f644 |
TpawAccountSettings *ac_settings;
|
|
Packit |
79f644 |
GtkAlignment *alignment;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
settings = g_slice_new0 (TpawAccountWidgetIrc);
|
|
Packit |
79f644 |
settings->self = self;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self->ui_details->gui = tpaw_builder_get_resource (filename,
|
|
Packit |
79f644 |
"vbox_irc_simple", box,
|
|
Packit |
79f644 |
"alignment_network_simple", &alignment,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Add network chooser button */
|
|
Packit |
79f644 |
g_object_get (settings->self, "settings", &ac_settings, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
settings->network_chooser = tpaw_irc_network_chooser_new (ac_settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_signal_connect (settings->network_chooser, "changed",
|
|
Packit |
79f644 |
G_CALLBACK (network_changed_cb), settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_container_add (GTK_CONTAINER (alignment), settings->network_chooser);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_widget_show (settings->network_chooser);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_account_widget_handle_params (self,
|
|
Packit |
79f644 |
"entry_nick_simple", "account",
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_builder_connect (self->ui_details->gui, settings,
|
|
Packit |
79f644 |
"vbox_irc_simple", "destroy", account_widget_irc_destroy_cb,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
self->ui_details->default_focus = g_strdup ("entry_nick_simple");
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (ac_settings);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return TPAW_IRC_NETWORK_CHOOSER (settings->network_chooser);
|
|
Packit |
79f644 |
}
|