|
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-irc-network-dialog.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include <glib/gi18n-lib.h>
|
|
Packit |
79f644 |
#include <stdlib.h>
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "tpaw-builder.h"
|
|
Packit |
79f644 |
#include "tpaw-utils.h"
|
|
Packit |
79f644 |
#include "totem-subtitle-encoding.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
typedef struct {
|
|
Packit |
79f644 |
TpawIrcNetwork *network;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GtkWidget *dialog;
|
|
Packit |
79f644 |
GtkWidget *button_close;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GtkWidget *entry_network;
|
|
Packit |
79f644 |
GtkWidget *combobox_charset;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
GtkWidget *treeview_servers;
|
|
Packit |
79f644 |
GtkWidget *button_add;
|
|
Packit |
79f644 |
GtkWidget *button_remove;
|
|
Packit |
79f644 |
GtkWidget *button_up;
|
|
Packit |
79f644 |
GtkWidget *button_down;
|
|
Packit |
79f644 |
} TpawIrcNetworkDialog;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_destroy_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_object_unref (dialog->network);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_slice_free (TpawIrcNetworkDialog, dialog);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_close_clicked_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gtk_widget_destroy (dialog->dialog);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
enum {
|
|
Packit |
79f644 |
COL_SRV_OBJ,
|
|
Packit |
79f644 |
COL_ADR,
|
|
Packit |
79f644 |
COL_PORT,
|
|
Packit |
79f644 |
COL_SSL
|
|
Packit |
79f644 |
};
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
add_server_to_store (GtkListStore *store,
|
|
Packit |
79f644 |
TpawIrcServer *server,
|
|
Packit |
79f644 |
GtkTreeIter *iter)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gchar *address;
|
|
Packit |
79f644 |
guint port;
|
|
Packit |
79f644 |
gboolean ssl;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_get (server,
|
|
Packit |
79f644 |
"address", &address,
|
|
Packit |
79f644 |
"port", &port,
|
|
Packit |
79f644 |
"ssl", &ssl,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_list_store_insert_with_values (store, iter, -1,
|
|
Packit |
79f644 |
COL_SRV_OBJ, server,
|
|
Packit |
79f644 |
COL_ADR, address,
|
|
Packit |
79f644 |
COL_PORT, port,
|
|
Packit |
79f644 |
COL_SSL, ssl,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_free (address);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_setup (TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gchar *name, *charset;
|
|
Packit |
79f644 |
GSList *servers, *l;
|
|
Packit |
79f644 |
GtkListStore *store;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_get (dialog->network,
|
|
Packit |
79f644 |
"name", &name,
|
|
Packit |
79f644 |
"charset", &charset,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
gtk_entry_set_text (GTK_ENTRY (dialog->entry_network), name);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
store = GTK_LIST_STORE (gtk_tree_view_get_model (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers)));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
servers = tpaw_irc_network_get_servers (dialog->network);
|
|
Packit |
79f644 |
for (l = servers; l != NULL; l = g_slist_next (l))
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawIrcServer *server = l->data;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
add_server_to_store (store, server, &iter);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
totem_subtitle_encoding_set (GTK_COMBO_BOX (dialog->combobox_charset),
|
|
Packit |
79f644 |
charset);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
|
|
Packit |
79f644 |
g_slist_free (servers);
|
|
Packit |
79f644 |
g_free (name);
|
|
Packit |
79f644 |
g_free (charset);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_address_edited_cb (GtkCellRendererText *renderer,
|
|
Packit |
79f644 |
gchar *path,
|
|
Packit |
79f644 |
gchar *new_text,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreePath *treepath;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
treepath = gtk_tree_path_new_from_string (path);
|
|
Packit |
79f644 |
gtk_tree_model_get_iter (model, &iter, treepath);
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter,
|
|
Packit |
79f644 |
COL_SRV_OBJ, &server,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
|
Packit |
79f644 |
COL_ADR, new_text,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_set (server, "address", new_text, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (treepath);
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_port_edited_cb (GtkCellRendererText *renderer,
|
|
Packit |
79f644 |
gchar *path,
|
|
Packit |
79f644 |
gchar *new_text,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreePath *treepath;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
guint port;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
port = strtoul (new_text, NULL, 10);
|
|
Packit |
79f644 |
model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
treepath = gtk_tree_path_new_from_string (path);
|
|
Packit |
79f644 |
gtk_tree_model_get_iter (model, &iter, treepath);
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter,
|
|
Packit |
79f644 |
COL_SRV_OBJ, &server,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
|
Packit |
79f644 |
COL_PORT, port,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_set (server, "port", port, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (treepath);
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_ssl_toggled_cb (GtkCellRendererText *renderer,
|
|
Packit |
79f644 |
gchar *path,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreePath *treepath;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
gboolean ssl;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
treepath = gtk_tree_path_new_from_string (path);
|
|
Packit |
79f644 |
gtk_tree_model_get_iter (model, &iter, treepath);
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter,
|
|
Packit |
79f644 |
COL_SRV_OBJ, &server,
|
|
Packit |
79f644 |
COL_SSL, &ssl,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
ssl = !ssl;
|
|
Packit |
79f644 |
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
|
|
Packit |
79f644 |
COL_SSL, ssl,
|
|
Packit |
79f644 |
-1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_set (server, "ssl", ssl, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (treepath);
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static gboolean
|
|
Packit |
79f644 |
irc_network_dialog_network_focus_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
GdkEventFocus *event,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
const gchar *str;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
str = gtk_entry_get_text (GTK_ENTRY (widget));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_set (dialog->network, "name", str, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return FALSE;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeSelection *selection;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreePath *path;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
gboolean can_remove = FALSE, can_move_up = FALSE, can_move_down = FALSE;
|
|
Packit |
79f644 |
int selected;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
|
|
Packit |
79f644 |
dialog->treeview_servers));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
path = gtk_tree_model_get_path (model, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selected = gtk_tree_path_get_indices (path)[0];
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
can_remove = TRUE;
|
|
Packit |
79f644 |
can_move_up = selected > 0;
|
|
Packit |
79f644 |
can_move_down =
|
|
Packit |
79f644 |
selected < gtk_tree_model_iter_n_children (model, NULL) - 1;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_widget_set_sensitive (dialog->button_remove, can_remove);
|
|
Packit |
79f644 |
gtk_widget_set_sensitive (dialog->button_up, can_move_up);
|
|
Packit |
79f644 |
gtk_widget_set_sensitive (dialog->button_down, can_move_down);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_button_add_clicked_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
GtkListStore *store;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
GtkTreePath *path;
|
|
Packit |
79f644 |
GtkTreeViewColumn *column;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
store = GTK_LIST_STORE (gtk_tree_view_get_model (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers)));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
server = tpaw_irc_server_new (_("new server"), 6667, FALSE);
|
|
Packit |
79f644 |
tpaw_irc_network_append_server (dialog->network, server);
|
|
Packit |
79f644 |
add_server_to_store (store, server, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter);
|
|
Packit |
79f644 |
column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
0);
|
|
Packit |
79f644 |
gtk_tree_view_set_cursor (GTK_TREE_VIEW (dialog->treeview_servers), path,
|
|
Packit |
79f644 |
column, TRUE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_button_remove_clicked_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeSelection *selection;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selection = gtk_tree_view_get_selection (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (!gtk_tree_selection_get_selected (selection, &model, &iter))
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
|
|
Packit |
79f644 |
tpaw_irc_network_remove_server (dialog->network, server);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_button_up_clicked_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeSelection *selection;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreeIter iter, iter_prev;
|
|
Packit |
79f644 |
GtkTreePath *path;
|
|
Packit |
79f644 |
gint *pos;
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selection = gtk_tree_view_get_selection (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (!gtk_tree_selection_get_selected (selection, &model, &iter))
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
path = gtk_tree_model_get_path (model, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (!gtk_tree_path_prev (path))
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_model_get_iter (model, &iter_prev, path);
|
|
Packit |
79f644 |
gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
pos = gtk_tree_path_get_indices (path);
|
|
Packit |
79f644 |
tpaw_irc_network_set_server_position (dialog->network, server, *pos);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (server);
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_button_down_clicked_cb (GtkWidget *widget,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeSelection *selection;
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreeIter iter, iter_prev;
|
|
Packit |
79f644 |
GtkTreePath *path;
|
|
Packit |
79f644 |
TpawIrcServer *server;
|
|
Packit |
79f644 |
gint *pos;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selection = gtk_tree_view_get_selection (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (!gtk_tree_selection_get_selected (selection, &model, &iter))
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
path = gtk_tree_model_get_path (model, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_next (path);
|
|
Packit |
79f644 |
if (!gtk_tree_model_get_iter (model, &iter_prev, path))
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
pos = gtk_tree_path_get_indices (path);
|
|
Packit |
79f644 |
tpaw_irc_network_set_server_position (dialog->network, server, *pos);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_path_free (path);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_selection_changed_cb (GtkTreeSelection *treeselection,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
irc_network_dialog_combobox_charset_changed_cb (GtkWidget *combobox,
|
|
Packit |
79f644 |
TpawIrcNetworkDialog *dialog)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
const gchar *charset;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
charset = totem_subtitle_encoding_get_selected (GTK_COMBO_BOX (combobox));
|
|
Packit |
79f644 |
g_object_set (dialog->network, "charset", charset, NULL);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
change_network (TpawIrcNetworkDialog *dialog,
|
|
Packit |
79f644 |
TpawIrcNetwork *network)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkListStore *store;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (dialog->network == network)
|
|
Packit |
79f644 |
/* No need to change */
|
|
Packit |
79f644 |
return;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (dialog->network != NULL)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
g_object_unref (dialog->network);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
dialog->network = network;
|
|
Packit |
79f644 |
g_object_ref (network);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
store = GTK_LIST_STORE (gtk_tree_view_get_model (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers)));
|
|
Packit |
79f644 |
gtk_list_store_clear (store);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_setup (dialog);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/**
|
|
Packit |
79f644 |
* tpaw_irc_network_dialog_show:
|
|
Packit |
79f644 |
* @network: the #TpawIrcNetwork to configure
|
|
Packit |
79f644 |
* @parent: the parent of this dialog
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* Display a dialog to configure a given #TpawIrcNetwork.
|
|
Packit |
79f644 |
* This function is a singleton so if a configuration dialog already
|
|
Packit |
79f644 |
* exists we use this one to edit the network.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* Returns: The displayed #GtkDialog
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
GtkWidget *
|
|
Packit |
79f644 |
tpaw_irc_network_dialog_show (TpawIrcNetwork *network,
|
|
Packit |
79f644 |
GtkWidget *parent)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
static TpawIrcNetworkDialog *dialog = NULL;
|
|
Packit |
79f644 |
GtkBuilder *gui;
|
|
Packit |
79f644 |
GtkListStore *store;
|
|
Packit |
79f644 |
GtkCellRenderer *renderer;
|
|
Packit |
79f644 |
GtkAdjustment *adjustment;
|
|
Packit |
79f644 |
GtkTreeSelection *selection;
|
|
Packit |
79f644 |
GtkTreeViewColumn *column;
|
|
Packit |
79f644 |
GtkWidget *sw, *toolbar;
|
|
Packit |
79f644 |
GtkStyleContext *context;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_val_if_fail (network != NULL, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (dialog != NULL)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
change_network (dialog, network);
|
|
Packit |
79f644 |
gtk_window_present (GTK_WINDOW (dialog->dialog));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return dialog->dialog;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
dialog = g_slice_new0 (TpawIrcNetworkDialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
dialog->network = network;
|
|
Packit |
79f644 |
g_object_ref (dialog->network);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gui = tpaw_builder_get_resource (TPAW_ACCOUNT_WIDGETS_RESOURCES_PREFIX "/tpaw-account-widget-irc.ui",
|
|
Packit |
79f644 |
"irc_network_dialog", &dialog->dialog,
|
|
Packit |
79f644 |
"button_close", &dialog->button_close,
|
|
Packit |
79f644 |
"entry_network", &dialog->entry_network,
|
|
Packit |
79f644 |
"combobox_charset", &dialog->combobox_charset,
|
|
Packit |
79f644 |
"treeview_servers", &dialog->treeview_servers,
|
|
Packit |
79f644 |
"button_add", &dialog->button_add,
|
|
Packit |
79f644 |
"button_remove", &dialog->button_remove,
|
|
Packit |
79f644 |
"button_up", &dialog->button_up,
|
|
Packit |
79f644 |
"button_down", &dialog->button_down,
|
|
Packit |
79f644 |
"scrolledwindow_network_server", &sw,
|
|
Packit |
79f644 |
"toolbar_network_server", &toolbar,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
store = gtk_list_store_new (4, G_TYPE_OBJECT, G_TYPE_STRING,
|
|
Packit |
79f644 |
G_TYPE_UINT, G_TYPE_BOOLEAN);
|
|
Packit |
79f644 |
gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
GTK_TREE_MODEL (store));
|
|
Packit |
79f644 |
g_object_unref (store);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* address */
|
|
Packit |
79f644 |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
79f644 |
g_object_set (renderer, "editable", TRUE, NULL);
|
|
Packit |
79f644 |
g_signal_connect (renderer, "edited",
|
|
Packit |
79f644 |
G_CALLBACK (irc_network_dialog_address_edited_cb), dialog);
|
|
Packit |
79f644 |
gtk_tree_view_insert_column_with_attributes (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
-1, _("Server"), renderer, "text", COL_ADR,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
0);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
|
|
Packit |
79f644 |
gtk_tree_view_column_set_expand (column, TRUE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* port */
|
|
Packit |
79f644 |
adjustment = (GtkAdjustment *) gtk_adjustment_new (6667, 1, G_MAXUINT16,
|
|
Packit |
79f644 |
1, 10, 0);
|
|
Packit |
79f644 |
renderer = gtk_cell_renderer_spin_new ();
|
|
Packit |
79f644 |
g_object_set (renderer,
|
|
Packit |
79f644 |
"editable", TRUE,
|
|
Packit |
79f644 |
"adjustment", adjustment,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
g_signal_connect (renderer, "edited",
|
|
Packit |
79f644 |
G_CALLBACK (irc_network_dialog_port_edited_cb), dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_view_insert_column_with_attributes (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
-1, _("Port"), renderer, "text", COL_PORT,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
1);
|
|
Packit |
79f644 |
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
|
|
Packit |
79f644 |
gtk_tree_view_column_set_expand (column, TRUE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* SSL */
|
|
Packit |
79f644 |
renderer = gtk_cell_renderer_toggle_new ();
|
|
Packit |
79f644 |
g_object_set (renderer, "activatable", TRUE, NULL);
|
|
Packit |
79f644 |
g_signal_connect (renderer, "toggled",
|
|
Packit |
79f644 |
G_CALLBACK (irc_network_dialog_ssl_toggled_cb), dialog);
|
|
Packit |
79f644 |
gtk_tree_view_insert_column_with_attributes (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
-1, _("SSL"), renderer, "active", COL_SSL,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
selection = gtk_tree_view_get_selection (
|
|
Packit |
79f644 |
GTK_TREE_VIEW (dialog->treeview_servers));
|
|
Packit |
79f644 |
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
|
|
Packit |
79f644 |
2);
|
|
Packit |
79f644 |
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_view_column_set_expand (column, TRUE);
|
|
Packit |
79f644 |
/* charset */
|
|
Packit |
79f644 |
totem_subtitle_encoding_init (GTK_COMBO_BOX (dialog->combobox_charset));
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_setup (dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
tpaw_builder_connect (gui, dialog,
|
|
Packit |
79f644 |
"irc_network_dialog", "destroy", irc_network_dialog_destroy_cb,
|
|
Packit |
79f644 |
"button_close", "clicked", irc_network_dialog_close_clicked_cb,
|
|
Packit |
79f644 |
"entry_network", "focus-out-event", irc_network_dialog_network_focus_cb,
|
|
Packit |
79f644 |
"button_add", "clicked", irc_network_dialog_button_add_clicked_cb,
|
|
Packit |
79f644 |
"button_remove", "clicked", irc_network_dialog_button_remove_clicked_cb,
|
|
Packit |
79f644 |
"button_up", "clicked", irc_network_dialog_button_up_clicked_cb,
|
|
Packit |
79f644 |
"button_down", "clicked", irc_network_dialog_button_down_clicked_cb,
|
|
Packit |
79f644 |
"combobox_charset", "changed", irc_network_dialog_combobox_charset_changed_cb,
|
|
Packit |
79f644 |
NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_unref (gui);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_object_add_weak_pointer (G_OBJECT (dialog->dialog),
|
|
Packit |
79f644 |
(gpointer) &dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_signal_connect (selection, "changed",
|
|
Packit |
79f644 |
G_CALLBACK (irc_network_dialog_selection_changed_cb),
|
|
Packit |
79f644 |
dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog),
|
|
Packit |
79f644 |
GTK_WINDOW (parent));
|
|
Packit |
79f644 |
gtk_window_set_modal (GTK_WINDOW (dialog->dialog), TRUE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* join the add/remove toolbar to the treeview */
|
|
Packit |
79f644 |
context = gtk_widget_get_style_context (sw);
|
|
Packit |
79f644 |
gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
context = gtk_widget_get_style_context (toolbar);
|
|
Packit |
79f644 |
gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
irc_network_dialog_network_update_buttons (dialog);
|
|
Packit |
79f644 |
gtk_widget_show_all (dialog->dialog);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_window_set_resizable (GTK_WINDOW (dialog->dialog), FALSE);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return dialog->dialog;
|
|
Packit |
79f644 |
}
|