diff options
Diffstat (limited to 'tp-account-widgets/tpaw-irc-network-chooser.c')
-rw-r--r-- | tp-account-widgets/tpaw-irc-network-chooser.c | 407 |
1 files changed, 0 insertions, 407 deletions
diff --git a/tp-account-widgets/tpaw-irc-network-chooser.c b/tp-account-widgets/tpaw-irc-network-chooser.c deleted file mode 100644 index 977f0ac3e..000000000 --- a/tp-account-widgets/tpaw-irc-network-chooser.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright (C) 2007-2008 Guillaume Desmottes - * Copyright (C) 2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Guillaume Desmottes <gdesmott@gnome.org> - */ - -#include "config.h" -#include "tpaw-irc-network-chooser.h" - -#include "tpaw-irc-network-chooser-dialog.h" -#include "tpaw-irc-network-manager.h" -#include "tpaw-utils.h" - -#define DEBUG_FLAG TPAW_DEBUG_ACCOUNT | TPAW_DEBUG_IRC -#include "tpaw-debug.h" - -#define DEFAULT_IRC_NETWORK "irc.gimp.org" -#define DEFAULT_IRC_PORT 6667 -#define DEFAULT_IRC_SSL FALSE - -enum { - PROP_SETTINGS = 1 -}; - -enum { - SIG_CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -struct _TpawIrcNetworkChooserPriv { - TpawAccountSettings *settings; - - TpawIrcNetworkManager *network_manager; - GtkWidget *dialog; - /* Displayed network */ - TpawIrcNetwork *network; -}; - -G_DEFINE_TYPE (TpawIrcNetworkChooser, tpaw_irc_network_chooser, - GTK_TYPE_BUTTON); - -static void -tpaw_irc_network_chooser_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - TpawIrcNetworkChooser *self = TPAW_IRC_NETWORK_CHOOSER (object); - - switch (prop_id) - { - case PROP_SETTINGS: - self->priv->settings = g_value_dup_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -tpaw_irc_network_chooser_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - TpawIrcNetworkChooser *self = TPAW_IRC_NETWORK_CHOOSER (object); - - switch (prop_id) - { - case PROP_SETTINGS: - g_value_set_object (value, self->priv->settings); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -unset_server_params (TpawIrcNetworkChooser *self) -{ - DEBUG ("Unset server, port and use-ssl"); - tpaw_account_settings_unset (self->priv->settings, "server"); - tpaw_account_settings_unset (self->priv->settings, "port"); - tpaw_account_settings_unset (self->priv->settings, "use-ssl"); -} - -static gchar * -dup_network_service (TpawIrcNetwork *network) -{ - /* Account.Service has to be a lower case alphanumeric string which may - * also contain '-' but not start with it. */ -#define VALID G_CSET_a_2_z G_CSET_DIGITS "-" - gchar *service, *tmp; - - service = g_strdup (tpaw_irc_network_get_name (network)); - service = g_strstrip (service); - - if (tp_str_empty (service)) - { - g_free (service); - return NULL; - } - - tmp = service; - service = g_ascii_strdown (service, -1); - g_free (tmp); - - service = g_strcanon (service, VALID, '-'); - - if (service[0] == '-') - { - tmp = service; - service = g_strdup (service + 1); - - g_free (tmp); - } - - return service; -} - -static void -update_server_params (TpawIrcNetworkChooser *self) -{ - GSList *servers; - const gchar *charset; - - g_assert (self->priv->network != NULL); - - charset = tpaw_irc_network_get_charset (self->priv->network); - DEBUG ("Setting charset to %s", charset); - tpaw_account_settings_set (self->priv->settings, "charset", - g_variant_new_string (charset)); - - servers = tpaw_irc_network_get_servers (self->priv->network); - if (g_slist_length (servers) > 0) - { - /* set the first server as CM server */ - TpawIrcServer *server = servers->data; - gchar *address; - guint port; - gboolean ssl; - gchar *service; - - g_object_get (server, - "address", &address, - "port", &port, - "ssl", &ssl, - NULL); - - DEBUG ("Setting server to %s", address); - tpaw_account_settings_set (self->priv->settings, "server", - g_variant_new_string (address)); - DEBUG ("Setting port to %u", port); - tpaw_account_settings_set (self->priv->settings, "port", - g_variant_new_uint32 (port)); - DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" ); - tpaw_account_settings_set (self->priv->settings, "use-ssl", - g_variant_new_boolean (ssl)); - - /* Set Account.Service */ - service = dup_network_service (self->priv->network); - DEBUG ("Setting Service to %s", service); - tpaw_account_settings_set_service (self->priv->settings, service); - - g_free (address); - g_free (service); - } - else - { - /* No server. Unset values */ - unset_server_params (self); - } - - g_slist_foreach (servers, (GFunc) g_object_unref, NULL); - g_slist_free (servers); -} - -static void -set_label (TpawIrcNetworkChooser *self) -{ - g_assert (self->priv->network != NULL); - - gtk_button_set_label (GTK_BUTTON (self), - tpaw_irc_network_get_name (self->priv->network)); -} - -static void -set_label_from_settings (TpawIrcNetworkChooser *self) -{ - gchar *server; - - tp_clear_object (&self->priv->network); - - server = tpaw_account_settings_dup_string (self->priv->settings, "server"); - - if (server != NULL) - { - TpawIrcServer *srv; - gint port; - gboolean ssl; - - self->priv->network = - tpaw_irc_network_manager_find_network_by_address ( - self->priv->network_manager, server); - - if (self->priv->network != NULL) - { - /* The network is known */ - g_object_ref (self->priv->network); - set_label (self); - return; - } - - /* We don't have this network. Let's create it */ - port = tpaw_account_settings_get_uint32 (self->priv->settings, "port"); - ssl = tpaw_account_settings_get_boolean (self->priv->settings, - "use-ssl"); - - DEBUG ("Create a network %s", server); - self->priv->network = tpaw_irc_network_new (server); - srv = tpaw_irc_server_new (server, port, ssl); - - tpaw_irc_network_append_server (self->priv->network, srv); - tpaw_irc_network_manager_add (self->priv->network_manager, - self->priv->network); - - set_label (self); - - g_object_unref (srv); - g_free (server); - return; - } - - /* Set default network */ - self->priv->network = tpaw_irc_network_manager_find_network_by_address ( - self->priv->network_manager, DEFAULT_IRC_NETWORK); - - if (self->priv->network == NULL) - { - /* Default network is not known, recreate it */ - TpawIrcServer *srv; - - self->priv->network = tpaw_irc_network_new (DEFAULT_IRC_NETWORK); - - srv = tpaw_irc_server_new (DEFAULT_IRC_NETWORK, DEFAULT_IRC_PORT, - DEFAULT_IRC_SSL); - - tpaw_irc_network_append_server (self->priv->network, srv); - tpaw_irc_network_manager_add (self->priv->network_manager, - self->priv->network); - - g_object_unref (srv); - } - - set_label (self); - update_server_params (self); - g_object_ref (self->priv->network); -} - -static void -dialog_response_cb (GtkDialog *dialog, - gint response, - TpawIrcNetworkChooser *self) -{ - TpawIrcNetworkChooserDialog *chooser = - TPAW_IRC_NETWORK_CHOOSER_DIALOG (self->priv->dialog); - - if (response != GTK_RESPONSE_CLOSE && - response != GTK_RESPONSE_DELETE_EVENT) - return; - - if (tpaw_irc_network_chooser_dialog_get_changed (chooser)) - { - tp_clear_object (&self->priv->network); - - self->priv->network = g_object_ref ( - tpaw_irc_network_chooser_dialog_get_network (chooser)); - - update_server_params (self); - set_label (self); - - g_signal_emit (self, signals[SIG_CHANGED], 0); - } - - gtk_widget_destroy (self->priv->dialog); - self->priv->dialog = NULL; -} - -static void -clicked_cb (GtkButton *button, - gpointer user_data) -{ - TpawIrcNetworkChooser *self = TPAW_IRC_NETWORK_CHOOSER (button); - GtkWindow *window; - - if (self->priv->dialog != NULL) - goto out; - - window = tpaw_get_toplevel_window (GTK_WIDGET (button)); - - self->priv->dialog = tpaw_irc_network_chooser_dialog_new ( - self->priv->settings, self->priv->network, window); - gtk_widget_show_all (self->priv->dialog); - - tp_g_signal_connect_object (self->priv->dialog, "response", - G_CALLBACK (dialog_response_cb), button, 0); - -out: - tpaw_window_present (GTK_WINDOW (self->priv->dialog)); -} - -static void -tpaw_irc_network_chooser_constructed (GObject *object) -{ - TpawIrcNetworkChooser *self = (TpawIrcNetworkChooser *) object; - - g_assert (self->priv->settings != NULL); - - set_label_from_settings (self); - - g_signal_connect (self, "clicked", G_CALLBACK (clicked_cb), self); -} - -static void -tpaw_irc_network_chooser_dispose (GObject *object) -{ - TpawIrcNetworkChooser *self = (TpawIrcNetworkChooser *) object; - - tp_clear_object (&self->priv->settings); - tp_clear_object (&self->priv->network_manager); - tp_clear_object (&self->priv->network); - - if (G_OBJECT_CLASS (tpaw_irc_network_chooser_parent_class)->dispose) - G_OBJECT_CLASS (tpaw_irc_network_chooser_parent_class)->dispose (object); -} - -static void -tpaw_irc_network_chooser_class_init (TpawIrcNetworkChooserClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = tpaw_irc_network_chooser_get_property; - object_class->set_property = tpaw_irc_network_chooser_set_property; - object_class->constructed = tpaw_irc_network_chooser_constructed; - object_class->dispose = tpaw_irc_network_chooser_dispose; - - g_object_class_install_property (object_class, PROP_SETTINGS, - g_param_spec_object ("settings", - "Settings", - "The TpawAccountSettings to show and edit", - TPAW_TYPE_ACCOUNT_SETTINGS, - G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - signals[SIG_CHANGED] = g_signal_new ("changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_generic, - G_TYPE_NONE, - 0); - - g_type_class_add_private (object_class, - sizeof (TpawIrcNetworkChooserPriv)); -} - -static void -tpaw_irc_network_chooser_init (TpawIrcNetworkChooser *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, - TPAW_TYPE_IRC_NETWORK_CHOOSER, TpawIrcNetworkChooserPriv); - - self->priv->network_manager = tpaw_irc_network_manager_dup_default (); -} - -GtkWidget * -tpaw_irc_network_chooser_new (TpawAccountSettings *settings) -{ - return g_object_new (TPAW_TYPE_IRC_NETWORK_CHOOSER, - "settings", settings, - NULL); -} - -TpawIrcNetwork * -tpaw_irc_network_chooser_get_network (TpawIrcNetworkChooser *self) -{ - return self->priv->network; -} |