~ubuntu-branches/ubuntu/natty/empathy/natty-updates

« back to all changes in this revision

Viewing changes to libempathy-gtk/empathy-irc-network-dialog.c

Tags: upstream-0.22.0
ImportĀ upstreamĀ versionĀ 0.22.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2007-2008 Guillaume Desmottes
 
3
 *
 
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.
 
8
 *
 
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.
 
13
 *
 
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
 
17
 *
 
18
 * Authors: Guillaume Desmottes <gdesmott@gnome.org>
 
19
 */
 
20
 
 
21
#include "config.h"
 
22
 
 
23
#include <stdlib.h>
 
24
#include <string.h>
 
25
#include <sys/stat.h>
 
26
 
 
27
#include <glib/gi18n.h>
 
28
#include <gtk/gtk.h>
 
29
#include <glade/glade.h>
 
30
 
 
31
#include <libmissioncontrol/mc-account.h>
 
32
#include <libmissioncontrol/mc-protocol.h>
 
33
 
 
34
#include <libempathy/empathy-utils.h>
 
35
#include <libempathy/empathy-debug.h>
 
36
 
 
37
#include <libempathy/empathy-irc-network-manager.h>
 
38
#include "empathy-ui-utils.h"
 
39
#include "totem-subtitle-encoding.h"
 
40
 
 
41
#include "empathy-irc-network-dialog.h"
 
42
 
 
43
#define DEBUG_DOMAIN "AccountWidgetIRC"
 
44
 
 
45
typedef struct {
 
46
  EmpathyIrcNetwork *network;
 
47
 
 
48
  GtkWidget *dialog;
 
49
  GtkWidget *button_close;
 
50
 
 
51
  GtkWidget *entry_network;
 
52
  GtkWidget *combobox_charset;
 
53
 
 
54
  GtkWidget *treeview_servers;
 
55
  GtkWidget *button_add;
 
56
  GtkWidget *button_remove;
 
57
  GtkWidget *button_up;
 
58
  GtkWidget *button_down;
 
59
} EmpathyIrcNetworkDialog;
 
60
 
 
61
static void
 
62
irc_network_dialog_destroy_cb (GtkWidget *widget,
 
63
                               EmpathyIrcNetworkDialog *dialog)
 
64
{
 
65
  g_object_unref (dialog->network);
 
66
 
 
67
  g_slice_free (EmpathyIrcNetworkDialog, dialog);
 
68
}
 
69
 
 
70
static void
 
71
irc_network_dialog_close_clicked_cb (GtkWidget *widget,
 
72
                                     EmpathyIrcNetworkDialog *dialog)
 
73
{
 
74
  gtk_widget_destroy (dialog->dialog);
 
75
}
 
76
 
 
77
enum {
 
78
  COL_SRV_OBJ,
 
79
  COL_ADR,
 
80
  COL_PORT,
 
81
  COL_SSL
 
82
};
 
83
 
 
84
static void
 
85
add_server_to_store (GtkListStore *store,
 
86
                     EmpathyIrcServer *server,
 
87
                     GtkTreeIter *iter)
 
88
{
 
89
  gchar *address;
 
90
  guint port;
 
91
  gboolean ssl;
 
92
 
 
93
  g_object_get (server,
 
94
      "address", &address,
 
95
      "port", &port,
 
96
      "ssl", &ssl,
 
97
      NULL);
 
98
 
 
99
  gtk_list_store_insert_with_values (store, iter, -1,
 
100
      COL_SRV_OBJ, server,
 
101
      COL_ADR, address,
 
102
      COL_PORT, port,
 
103
      COL_SSL, ssl,
 
104
      -1);
 
105
 
 
106
  g_free (address);
 
107
}
 
108
 
 
109
static void
 
110
irc_network_dialog_setup (EmpathyIrcNetworkDialog *dialog)
 
111
{
 
112
  gchar *name, *charset;
 
113
  GSList *servers, *l;
 
114
  GtkListStore *store;
 
115
 
 
116
  g_object_get (dialog->network,
 
117
      "name", &name,
 
118
      "charset", &charset,
 
119
      NULL);
 
120
  gtk_entry_set_text (GTK_ENTRY (dialog->entry_network), name);
 
121
 
 
122
  store = GTK_LIST_STORE (gtk_tree_view_get_model (
 
123
        GTK_TREE_VIEW (dialog->treeview_servers)));
 
124
 
 
125
  servers = empathy_irc_network_get_servers (dialog->network);
 
126
  for (l = servers; l != NULL; l = g_slist_next (l))
 
127
    {
 
128
      EmpathyIrcServer *server = l->data;
 
129
      GtkTreeIter iter;
 
130
 
 
131
      add_server_to_store (store, server, &iter);
 
132
    }
 
133
 
 
134
  totem_subtitle_encoding_set (GTK_COMBO_BOX (dialog->combobox_charset),
 
135
      charset);
 
136
 
 
137
  g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
 
138
  g_slist_free (servers);
 
139
  g_free (name);
 
140
  g_free (charset);
 
141
}
 
142
 
 
143
static void
 
144
irc_network_dialog_address_edited_cb (GtkCellRendererText *renderer,
 
145
                                      gchar *path,
 
146
                                      gchar *new_text,
 
147
                                      EmpathyIrcNetworkDialog *dialog)
 
148
{
 
149
  EmpathyIrcServer *server;
 
150
  GtkTreeModel *model;
 
151
  GtkTreePath  *treepath;
 
152
  GtkTreeIter iter;
 
153
 
 
154
  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
 
155
  treepath = gtk_tree_path_new_from_string (path);
 
156
  gtk_tree_model_get_iter (model, &iter, treepath);
 
157
  gtk_tree_model_get (model, &iter,
 
158
      COL_SRV_OBJ, &server,
 
159
      -1);
 
160
  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 
161
      COL_ADR, new_text,
 
162
      -1);
 
163
 
 
164
  g_object_set (server, "address", new_text, NULL);
 
165
 
 
166
  gtk_tree_path_free (treepath);
 
167
  g_object_unref (server);
 
168
}
 
169
 
 
170
static void
 
171
irc_network_dialog_port_edited_cb (GtkCellRendererText *renderer,
 
172
                                   gchar *path,
 
173
                                   gchar *new_text,
 
174
                                   EmpathyIrcNetworkDialog *dialog)
 
175
{
 
176
  EmpathyIrcServer *server;
 
177
  GtkTreeModel *model;
 
178
  GtkTreePath  *treepath;
 
179
  GtkTreeIter iter;
 
180
  guint port;
 
181
 
 
182
  port = strtoul (new_text, NULL, 10);
 
183
  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
 
184
  treepath = gtk_tree_path_new_from_string (path);
 
185
  gtk_tree_model_get_iter (model, &iter, treepath);
 
186
  gtk_tree_model_get (model, &iter,
 
187
      COL_SRV_OBJ, &server,
 
188
      -1);
 
189
  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 
190
      COL_PORT, port,
 
191
      -1);
 
192
 
 
193
  g_object_set (server, "port", port, NULL);
 
194
 
 
195
  gtk_tree_path_free (treepath);
 
196
  g_object_unref (server);
 
197
}
 
198
 
 
199
static void
 
200
irc_network_dialog_ssl_toggled_cb (GtkCellRendererText *renderer,
 
201
                                   gchar *path,
 
202
                                   EmpathyIrcNetworkDialog *dialog)
 
203
{
 
204
  EmpathyIrcServer *server;
 
205
  GtkTreeModel *model;
 
206
  GtkTreePath  *treepath;
 
207
  GtkTreeIter iter;
 
208
  gboolean ssl;
 
209
 
 
210
  model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
 
211
  treepath = gtk_tree_path_new_from_string (path);
 
212
  gtk_tree_model_get_iter (model, &iter, treepath);
 
213
  gtk_tree_model_get (model, &iter,
 
214
      COL_SRV_OBJ, &server,
 
215
      COL_SSL, &ssl,
 
216
      -1);
 
217
  ssl = !ssl;
 
218
  gtk_list_store_set (GTK_LIST_STORE (model), &iter,
 
219
      COL_SSL, ssl,
 
220
      -1);
 
221
 
 
222
  g_object_set (server, "ssl", ssl, NULL);
 
223
 
 
224
  gtk_tree_path_free (treepath);
 
225
  g_object_unref (server);
 
226
}
 
227
 
 
228
static gboolean
 
229
irc_network_dialog_network_focus_cb (GtkWidget *widget,
 
230
                                     GdkEventFocus *event,
 
231
                                     EmpathyIrcNetworkDialog *dialog)
 
232
{
 
233
  const gchar *str;
 
234
 
 
235
  str = gtk_entry_get_text (GTK_ENTRY (widget));
 
236
 
 
237
  g_object_set (dialog->network, "name", str, NULL);
 
238
 
 
239
  return FALSE;
 
240
}
 
241
 
 
242
static void
 
243
irc_network_dialog_network_update_buttons (EmpathyIrcNetworkDialog *dialog)
 
244
{
 
245
  GtkTreeSelection *selection;
 
246
  GtkTreeModel *model;
 
247
  GtkTreePath *path;
 
248
  GtkTreeIter iter;
 
249
  gboolean can_remove = FALSE, can_move_up = FALSE, can_move_down = FALSE;
 
250
  int selected;
 
251
 
 
252
  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
 
253
        dialog->treeview_servers));
 
254
 
 
255
  if (gtk_tree_selection_get_selected (selection, &model, &iter))
 
256
  {
 
257
    path = gtk_tree_model_get_path (model, &iter);
 
258
 
 
259
    selected = gtk_tree_path_get_indices (path)[0];
 
260
 
 
261
    can_remove = TRUE;
 
262
    can_move_up = selected > 0;
 
263
    can_move_down = 
 
264
      selected < gtk_tree_model_iter_n_children (model, NULL) - 1;
 
265
 
 
266
    gtk_tree_path_free (path);
 
267
  }
 
268
 
 
269
  gtk_widget_set_sensitive (dialog->button_remove, can_remove);
 
270
  gtk_widget_set_sensitive (dialog->button_up, can_move_up);
 
271
  gtk_widget_set_sensitive (dialog->button_down, can_move_down);
 
272
}
 
273
 
 
274
static void
 
275
irc_network_dialog_button_add_clicked_cb (GtkWidget *widget,
 
276
                                          EmpathyIrcNetworkDialog *dialog)
 
277
{
 
278
  EmpathyIrcServer *server;
 
279
  GtkListStore *store;
 
280
  GtkTreeIter iter;
 
281
  GtkTreePath *path;
 
282
  GtkTreeViewColumn *column;
 
283
 
 
284
  store = GTK_LIST_STORE (gtk_tree_view_get_model (
 
285
        GTK_TREE_VIEW (dialog->treeview_servers)));
 
286
 
 
287
  server = empathy_irc_server_new (_("new server"), 6667, FALSE);
 
288
  empathy_irc_network_append_server (dialog->network, server);
 
289
  add_server_to_store (store, server, &iter);
 
290
 
 
291
  path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter);
 
292
  column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
 
293
      0);
 
294
  gtk_tree_view_set_cursor (GTK_TREE_VIEW (dialog->treeview_servers), path,
 
295
      column, TRUE);
 
296
 
 
297
  irc_network_dialog_network_update_buttons (dialog);
 
298
 
 
299
  gtk_tree_path_free (path);
 
300
  g_object_unref (server);
 
301
}
 
302
 
 
303
static void
 
304
irc_network_dialog_button_remove_clicked_cb (GtkWidget *widget,
 
305
                                             EmpathyIrcNetworkDialog *dialog)
 
306
{
 
307
  GtkTreeSelection *selection;
 
308
  GtkTreeModel *model;
 
309
  GtkTreeIter iter;
 
310
  EmpathyIrcServer *server;
 
311
 
 
312
  selection = gtk_tree_view_get_selection (
 
313
      GTK_TREE_VIEW (dialog->treeview_servers));
 
314
 
 
315
  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
 
316
    return;
 
317
 
 
318
  gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
 
319
 
 
320
  gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
 
321
  empathy_irc_network_remove_server (dialog->network, server);
 
322
 
 
323
  irc_network_dialog_network_update_buttons (dialog);
 
324
 
 
325
  g_object_unref (server);
 
326
}
 
327
 
 
328
static void
 
329
irc_network_dialog_button_up_clicked_cb (GtkWidget *widget,
 
330
                                         EmpathyIrcNetworkDialog *dialog)
 
331
{
 
332
  GtkTreeSelection *selection;
 
333
  GtkTreeModel *model;
 
334
  GtkTreeIter iter, iter_prev;
 
335
  GtkTreePath *path;
 
336
  gint *pos;
 
337
  EmpathyIrcServer *server;
 
338
 
 
339
  selection = gtk_tree_view_get_selection (
 
340
      GTK_TREE_VIEW (dialog->treeview_servers));
 
341
 
 
342
  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
 
343
    return;
 
344
 
 
345
  path = gtk_tree_model_get_path (model, &iter);
 
346
 
 
347
  if (!gtk_tree_path_prev (path))
 
348
  {
 
349
    gtk_tree_path_free (path);
 
350
    return;
 
351
  }
 
352
 
 
353
  gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
 
354
 
 
355
  gtk_tree_model_get_iter (model, &iter_prev, path);
 
356
  gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
 
357
 
 
358
  pos = gtk_tree_path_get_indices (path);
 
359
  empathy_irc_network_set_server_position (dialog->network, server, *pos);
 
360
 
 
361
  irc_network_dialog_network_update_buttons (dialog);
 
362
 
 
363
  g_object_unref (server);
 
364
  gtk_tree_path_free (path);
 
365
}
 
366
 
 
367
static void
 
368
irc_network_dialog_button_down_clicked_cb (GtkWidget *widget,
 
369
                                           EmpathyIrcNetworkDialog *dialog)
 
370
{
 
371
  GtkTreeSelection *selection;
 
372
  GtkTreeModel *model;
 
373
  GtkTreeIter iter, iter_prev;
 
374
  GtkTreePath *path;
 
375
  EmpathyIrcServer *server;
 
376
  gint *pos;
 
377
 
 
378
  selection = gtk_tree_view_get_selection (
 
379
      GTK_TREE_VIEW (dialog->treeview_servers));
 
380
 
 
381
  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
 
382
    return;
 
383
 
 
384
  path = gtk_tree_model_get_path (model, &iter);
 
385
 
 
386
  gtk_tree_path_next (path);
 
387
  if (!gtk_tree_model_get_iter (model, &iter_prev, path))
 
388
    {
 
389
      gtk_tree_path_free (path);
 
390
      return;
 
391
    }
 
392
 
 
393
  gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
 
394
 
 
395
  gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
 
396
 
 
397
  pos = gtk_tree_path_get_indices (path);
 
398
  empathy_irc_network_set_server_position (dialog->network, server, *pos);
 
399
 
 
400
  irc_network_dialog_network_update_buttons (dialog);
 
401
 
 
402
  gtk_tree_path_free (path);
 
403
}
 
404
 
 
405
static void
 
406
irc_network_dialog_selection_changed_cb (GtkTreeSelection  *treeselection,
 
407
                                         EmpathyIrcNetworkDialog *dialog)
 
408
{
 
409
  irc_network_dialog_network_update_buttons (dialog);
 
410
}
 
411
 
 
412
static void
 
413
irc_network_dialog_combobox_charset_changed_cb (GtkWidget *combobox,
 
414
                                                EmpathyIrcNetworkDialog *dialog)
 
415
{
 
416
  const gchar *charset;
 
417
 
 
418
  charset = totem_subtitle_encoding_get_selected (GTK_COMBO_BOX (combobox));
 
419
  g_object_set (dialog->network, "charset", charset, NULL);
 
420
}
 
421
 
 
422
static void
 
423
change_network (EmpathyIrcNetworkDialog *dialog,
 
424
                EmpathyIrcNetwork *network)
 
425
{
 
426
  GtkListStore *store;
 
427
 
 
428
  if (dialog->network == network)
 
429
    /* No need to change */
 
430
    return;
 
431
 
 
432
  if (dialog->network != NULL)
 
433
    {
 
434
      g_object_unref (dialog->network);
 
435
    }
 
436
 
 
437
  dialog->network = network;
 
438
  g_object_ref (network);
 
439
 
 
440
  store = GTK_LIST_STORE (gtk_tree_view_get_model (
 
441
        GTK_TREE_VIEW (dialog->treeview_servers)));
 
442
  gtk_list_store_clear (store);
 
443
 
 
444
  irc_network_dialog_setup (dialog);
 
445
}
 
446
 
 
447
/**
 
448
 * empathy_irc_network_dialog_show:
 
449
 * @network: the #EmpathyIrcNetwork to configure
 
450
 * @parent: the parent of this dialog
 
451
 *
 
452
 * Display a dialog to configure a given #EmpathyIrcNetwork.
 
453
 * This function is a singleton so if a configuration dialog already
 
454
 * exists we use this one to edit the network.
 
455
 *
 
456
 * Returns: The displayed #GtkDialog
 
457
 */
 
458
GtkWidget *
 
459
empathy_irc_network_dialog_show (EmpathyIrcNetwork *network,
 
460
                                 GtkWidget *parent)
 
461
{
 
462
  static EmpathyIrcNetworkDialog *dialog = NULL;
 
463
  GladeXML *glade;
 
464
  GtkListStore *store;
 
465
  GtkCellRenderer *renderer;
 
466
  GtkAdjustment *adjustment;
 
467
  GtkTreeSelection *selection;
 
468
  GtkTreeViewColumn *column;
 
469
 
 
470
  g_return_val_if_fail (network != NULL, NULL);
 
471
 
 
472
  if (dialog != NULL)
 
473
    {
 
474
      change_network (dialog, network);
 
475
      gtk_window_present (GTK_WINDOW (dialog->dialog));
 
476
 
 
477
      return dialog->dialog;
 
478
    }
 
479
 
 
480
  dialog = g_slice_new0 (EmpathyIrcNetworkDialog);
 
481
 
 
482
  dialog->network = network;
 
483
  g_object_ref (dialog->network);
 
484
 
 
485
  glade = empathy_glade_get_file ("empathy-account-widget-irc.glade",
 
486
      "irc_network_dialog",
 
487
      NULL,
 
488
      "irc_network_dialog", &dialog->dialog,
 
489
      "button_close", &dialog->button_close,
 
490
      "entry_network", &dialog->entry_network,
 
491
      "combobox_charset", &dialog->combobox_charset,
 
492
      "treeview_servers", &dialog->treeview_servers,
 
493
      "button_add", &dialog->button_add,
 
494
      "button_remove", &dialog->button_remove,
 
495
      "button_up", &dialog->button_up,
 
496
      "button_down", &dialog->button_down,
 
497
      NULL);
 
498
 
 
499
  store = gtk_list_store_new (4, G_TYPE_OBJECT, G_TYPE_STRING,
 
500
      G_TYPE_UINT, G_TYPE_BOOLEAN);
 
501
  gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview_servers),
 
502
      GTK_TREE_MODEL (store));
 
503
  g_object_unref (store);
 
504
 
 
505
  /* address */
 
506
  renderer = gtk_cell_renderer_text_new ();
 
507
  g_object_set (renderer, "editable", TRUE, NULL);
 
508
  g_signal_connect (renderer, "edited",
 
509
      G_CALLBACK (irc_network_dialog_address_edited_cb), dialog);
 
510
  gtk_tree_view_insert_column_with_attributes (
 
511
      GTK_TREE_VIEW (dialog->treeview_servers),
 
512
      -1, _("Server"), renderer, "text", COL_ADR,
 
513
      NULL);
 
514
 
 
515
  /* port */
 
516
  adjustment = (GtkAdjustment *) gtk_adjustment_new (6667, 1, G_MAXUINT16,
 
517
      1, 10, 0);
 
518
  renderer = gtk_cell_renderer_spin_new ();
 
519
  g_object_set (renderer,
 
520
      "editable", TRUE, 
 
521
      "adjustment", adjustment,
 
522
      NULL);
 
523
  g_signal_connect (renderer, "edited",
 
524
      G_CALLBACK (irc_network_dialog_port_edited_cb), dialog);
 
525
  gtk_tree_view_insert_column_with_attributes (
 
526
      GTK_TREE_VIEW (dialog->treeview_servers),
 
527
      -1, _("Port"), renderer, "text", COL_PORT,
 
528
      NULL);
 
529
  column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
 
530
      1);
 
531
  gtk_tree_view_column_set_expand (column, TRUE);
 
532
 
 
533
  /* SSL */
 
534
  renderer = gtk_cell_renderer_toggle_new ();
 
535
  g_object_set (renderer, "activatable", TRUE, NULL);
 
536
  g_signal_connect (renderer, "toggled",
 
537
      G_CALLBACK (irc_network_dialog_ssl_toggled_cb), dialog);
 
538
  gtk_tree_view_insert_column_with_attributes (
 
539
      GTK_TREE_VIEW (dialog->treeview_servers),
 
540
      -1, _("SSL"), renderer, "active", COL_SSL,
 
541
      NULL);
 
542
 
 
543
  selection = gtk_tree_view_get_selection (
 
544
      GTK_TREE_VIEW (dialog->treeview_servers));
 
545
  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
 
546
 
 
547
  /* charset */
 
548
  totem_subtitle_encoding_init (GTK_COMBO_BOX (dialog->combobox_charset));
 
549
 
 
550
  irc_network_dialog_setup (dialog);
 
551
 
 
552
  empathy_glade_connect (glade, dialog,
 
553
      "irc_network_dialog", "destroy", irc_network_dialog_destroy_cb,
 
554
      "button_close", "clicked", irc_network_dialog_close_clicked_cb,
 
555
      "entry_network", "focus-out-event", irc_network_dialog_network_focus_cb,
 
556
      "button_add", "clicked", irc_network_dialog_button_add_clicked_cb,
 
557
      "button_remove", "clicked", irc_network_dialog_button_remove_clicked_cb,
 
558
      "button_up", "clicked", irc_network_dialog_button_up_clicked_cb,
 
559
      "button_down", "clicked", irc_network_dialog_button_down_clicked_cb,
 
560
      "combobox_charset", "changed", irc_network_dialog_combobox_charset_changed_cb,
 
561
      NULL);
 
562
 
 
563
  g_object_unref (glade);
 
564
 
 
565
  g_object_add_weak_pointer (G_OBJECT (dialog->dialog),
 
566
      (gpointer) &dialog);
 
567
 
 
568
  g_signal_connect (selection, "changed",
 
569
      G_CALLBACK (irc_network_dialog_selection_changed_cb),
 
570
      dialog);
 
571
 
 
572
  gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog),
 
573
      GTK_WINDOW (parent));
 
574
  gtk_window_set_modal (GTK_WINDOW (dialog->dialog), TRUE);
 
575
 
 
576
  irc_network_dialog_network_update_buttons (dialog);
 
577
 
 
578
  return dialog->dialog;
 
579
}