Statistics
| Revision:

root / src / prefs_display_items.c @ 1963

History | View | Annotate | Download (17.5 kB)

1
/*
2
 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3
 * Copyright (C) 1999-2007 Hiroyuki Yamamoto
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
 */
19
20
#ifdef HAVE_CONFIG_H
21
#  include "config.h"
22
#endif
23
24
#include "defs.h"
25
26
#include <glib.h>
27
#include <glib/gi18n.h>
28
#include <gdk/gdkkeysyms.h>
29
#include <gtk/gtkmain.h>
30
#include <gtk/gtkwindow.h>
31
#include <gtk/gtkvbox.h>
32
#include <gtk/gtkhbox.h>
33
#include <gtk/gtkclist.h>
34
#include <gtk/gtkbutton.h>
35
#include <gtk/gtkstock.h>
36
37
#include "prefs.h"
38
#include "prefs_ui.h"
39
#include "prefs_common.h"
40
#include "prefs_display_items.h"
41
#include "manage_window.h"
42
#include "mainwindow.h"
43
#include "gtkutils.h"
44
#include "utils.h"
45
46
static void prefs_display_items_set_sensitive(PrefsDisplayItemsDialog *dialog);
47
48
/* callback functions */
49
static void prefs_display_items_add        (GtkWidget        *widget,
50
                                         gpointer         data);
51
static void prefs_display_items_remove        (GtkWidget        *widget,
52
                                         gpointer         data);
53
54
static void prefs_display_items_up        (GtkWidget        *widget,
55
                                         gpointer         data);
56
static void prefs_display_items_down        (GtkWidget        *widget,
57
                                         gpointer         data);
58
59
static void prefs_display_items_default        (GtkWidget        *widget,
60
                                         gpointer         data);
61
62
static void prefs_display_items_ok        (GtkWidget        *widget,
63
                                         gpointer         data);
64
static void prefs_display_items_cancel        (GtkWidget        *widget,
65
                                         gpointer         data);
66
67
static void prefs_display_items_shown_select_row(GtkWidget        *widget,
68
                                                 gint                 row,
69
                                                 gint                 column,
70
                                                 GdkEventButton        *event,
71
                                                 gpointer         data);
72
static void prefs_display_items_shown_row_move        (GtkWidget        *widget,
73
                                                 gint                 row,
74
                                                 gint                 column,
75
                                                 gpointer         data);
76
77
static gint prefs_display_items_delete_event        (GtkWidget        *widget,
78
                                                 GdkEventAny        *event,
79
                                                 gpointer         data);
80
static gboolean prefs_display_items_key_pressed        (GtkWidget        *widget,
81
                                                 GdkEventKey        *event,
82
                                                 gpointer         data);
83
84
PrefsDisplayItemsDialog *prefs_display_items_dialog_create(void)
85
{
86
        PrefsDisplayItemsDialog *dialog;
87
88
        GtkWidget *window;
89
        GtkWidget *vbox;
90
91
        GtkWidget *label_hbox;
92
        GtkWidget *label;
93
94
        GtkWidget *vbox1;
95
96
        GtkWidget *hbox1;
97
        GtkWidget *clist_hbox;
98
        GtkWidget *scrolledwin;
99
        GtkWidget *stock_clist;
100
        GtkWidget *shown_clist;
101
102
        GtkWidget *btn_vbox;
103
        GtkWidget *btn_vbox1;
104
        GtkWidget *add_btn;
105
        GtkWidget *remove_btn;
106
        GtkWidget *up_btn;
107
        GtkWidget *down_btn;
108
109
        GtkWidget *btn_hbox;
110
        GtkWidget *default_btn;
111
        GtkWidget *confirm_area;
112
        GtkWidget *ok_btn;
113
        GtkWidget *cancel_btn;
114
115
        gchar *title[1];
116
117
        dialog = g_new0(PrefsDisplayItemsDialog, 1);
118
119
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
120
        gtk_container_set_border_width(GTK_CONTAINER(window), 8);
121
        gtk_window_set_position(GTK_WINDOW(window),
122
                                GTK_WIN_POS_CENTER_ON_PARENT);
123
        gtk_window_set_modal(GTK_WINDOW(window), TRUE);
124
        gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
125
        gtk_window_set_title(GTK_WINDOW(window), _("Display items setting"));
126
        g_signal_connect(G_OBJECT(window), "delete_event",
127
                         G_CALLBACK(prefs_display_items_delete_event), dialog);
128
        g_signal_connect(G_OBJECT(window), "key_press_event",
129
                         G_CALLBACK(prefs_display_items_key_pressed), dialog);
130
131
        vbox = gtk_vbox_new(FALSE, 6);
132
        gtk_widget_show(vbox);
133
        gtk_container_add(GTK_CONTAINER(window), vbox);
134
135
        label_hbox = gtk_hbox_new(FALSE, 0);
136
        gtk_widget_show(label_hbox);
137
        gtk_box_pack_start(GTK_BOX(vbox), label_hbox, FALSE, FALSE, 4);
138
139
        label = gtk_label_new("");
140
        gtk_widget_show(label);
141
        gtk_box_pack_start(GTK_BOX(label_hbox), label, FALSE, FALSE, 4);
142
        gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
143
144
        vbox1 = gtk_vbox_new(FALSE, VSPACING);
145
        gtk_widget_show(vbox1);
146
        gtk_box_pack_start(GTK_BOX(vbox), vbox1, TRUE, TRUE, 0);
147
        gtk_container_set_border_width(GTK_CONTAINER(vbox1), 2);
148
149
        hbox1 = gtk_hbox_new(FALSE, 8);
150
        gtk_widget_show(hbox1);
151
        gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, TRUE, 0);
152
153
        clist_hbox = gtk_hbox_new(FALSE, 8);
154
        gtk_widget_show(clist_hbox);
155
        gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0);
156
157
        scrolledwin = gtk_scrolled_window_new(NULL, NULL);
158
        gtk_widget_set_size_request(scrolledwin, 180, 210);
159
        gtk_widget_show(scrolledwin);
160
        gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0);
161
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
162
                                       GTK_POLICY_AUTOMATIC,
163
                                       GTK_POLICY_AUTOMATIC);
164
165
        title[0] = _("Available items");
166
        stock_clist = gtk_clist_new_with_titles(1, title);
167
        gtk_widget_show(stock_clist);
168
        gtk_container_add(GTK_CONTAINER(scrolledwin), stock_clist);
169
        gtk_clist_set_selection_mode(GTK_CLIST(stock_clist),
170
                                     GTK_SELECTION_BROWSE);
171
        GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(stock_clist)->column[0].button,
172
                               GTK_CAN_FOCUS);
173
        gtkut_clist_set_redraw(GTK_CLIST(stock_clist));
174
175
        /* add/remove button */
176
        btn_vbox = gtk_vbox_new(FALSE, 0);
177
        gtk_widget_show(btn_vbox);
178
        gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
179
180
        btn_vbox1 = gtk_vbox_new(FALSE, 8);
181
        gtk_widget_show(btn_vbox1);
182
        gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
183
184
        add_btn = gtk_button_new_with_label(_("  ->  "));
185
        gtk_widget_show(add_btn);
186
        gtk_box_pack_start(GTK_BOX(btn_vbox1), add_btn, FALSE, FALSE, 0);
187
188
        remove_btn = gtk_button_new_with_label(_("  <-  "));
189
        gtk_widget_show(remove_btn);
190
        gtk_box_pack_start(GTK_BOX(btn_vbox1), remove_btn, FALSE, FALSE, 0);
191
192
        g_signal_connect(G_OBJECT(add_btn), "clicked",
193
                         G_CALLBACK(prefs_display_items_add), dialog);
194
        g_signal_connect(G_OBJECT(remove_btn), "clicked",
195
                         G_CALLBACK(prefs_display_items_remove), dialog);
196
197
        clist_hbox = gtk_hbox_new(FALSE, 8);
198
        gtk_widget_show(clist_hbox);
199
        gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0);
200
201
        scrolledwin = gtk_scrolled_window_new(NULL, NULL);
202
        gtk_widget_set_size_request(scrolledwin, 180, 210);
203
        gtk_widget_show(scrolledwin);
204
        gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0);
205
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
206
                                       GTK_POLICY_AUTOMATIC,
207
                                       GTK_POLICY_AUTOMATIC);
208
209
        title[0] = _("Displayed items");
210
        shown_clist = gtk_clist_new_with_titles(1, title);
211
        gtk_widget_show(shown_clist);
212
        gtk_container_add(GTK_CONTAINER(scrolledwin), shown_clist);
213
        gtk_clist_set_selection_mode(GTK_CLIST(shown_clist),
214
                                     GTK_SELECTION_BROWSE);
215
#if 0
216
        gtk_clist_set_reorderable(GTK_CLIST(shown_clist), TRUE);
217
        gtk_clist_set_use_drag_icons(GTK_CLIST(shown_clist), FALSE);
218
#endif
219
        GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(shown_clist)->column[0].button,
220
                               GTK_CAN_FOCUS);
221
        gtkut_clist_set_redraw(GTK_CLIST(shown_clist));
222
223
        g_signal_connect(G_OBJECT(shown_clist), "select-row",
224
                         G_CALLBACK(prefs_display_items_shown_select_row),
225
                         dialog);
226
        g_signal_connect_after(G_OBJECT(shown_clist), "row-move",
227
                               G_CALLBACK(prefs_display_items_shown_row_move),
228
                               dialog);
229
230
        /* up/down button */
231
        btn_vbox = gtk_vbox_new(FALSE, 0);
232
        gtk_widget_show(btn_vbox);
233
        gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
234
235
        btn_vbox1 = gtk_vbox_new(FALSE, 8);
236
        gtk_widget_show(btn_vbox1);
237
        gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
238
239
        up_btn = gtk_button_new_with_label(_("Up"));
240
        gtk_widget_show(up_btn);
241
        gtk_box_pack_start(GTK_BOX(btn_vbox1), up_btn, FALSE, FALSE, 0);
242
243
        down_btn = gtk_button_new_with_label(_("Down"));
244
        gtk_widget_show(down_btn);
245
        gtk_box_pack_start(GTK_BOX(btn_vbox1), down_btn, FALSE, FALSE, 0);
246
247
        g_signal_connect(G_OBJECT(up_btn), "clicked",
248
                         G_CALLBACK(prefs_display_items_up), dialog);
249
        g_signal_connect(G_OBJECT(down_btn), "clicked",
250
                         G_CALLBACK(prefs_display_items_down), dialog);
251
252
        btn_hbox = gtk_hbox_new(FALSE, 8);
253
        gtk_widget_show(btn_hbox);
254
        gtk_box_pack_end(GTK_BOX(vbox), btn_hbox, FALSE, FALSE, 0);
255
256
        btn_vbox = gtk_vbox_new(FALSE, 0);
257
        gtk_widget_show(btn_vbox);
258
        gtk_box_pack_start(GTK_BOX(btn_hbox), btn_vbox, FALSE, FALSE, 0);
259
260
        default_btn = gtk_button_new_with_label(_(" Revert to default "));
261
        gtk_widget_show(default_btn);
262
        gtk_box_pack_start(GTK_BOX(btn_vbox), default_btn, TRUE, FALSE, 0);
263
264
        g_signal_connect(G_OBJECT(default_btn), "clicked",
265
                         G_CALLBACK(prefs_display_items_default), dialog);
266
267
        gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
268
                                      &cancel_btn, GTK_STOCK_CANCEL,
269
                                      NULL, NULL);
270
        gtk_widget_show(confirm_area);
271
        gtk_box_pack_end(GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0);
272
        gtk_widget_grab_default(ok_btn);
273
274
        g_signal_connect(G_OBJECT(ok_btn), "clicked",
275
                         G_CALLBACK(prefs_display_items_ok), dialog);
276
        g_signal_connect(G_OBJECT(cancel_btn), "clicked",
277
                         G_CALLBACK(prefs_display_items_cancel), dialog);
278
279
        dialog->window       = window;
280
        dialog->label        = label;
281
        dialog->stock_clist  = stock_clist;
282
        dialog->shown_clist  = shown_clist;
283
        dialog->add_btn      = add_btn;
284
        dialog->remove_btn   = remove_btn;
285
        dialog->up_btn       = up_btn;
286
        dialog->down_btn     = down_btn;
287
        dialog->confirm_area = confirm_area;
288
        dialog->ok_btn       = ok_btn;
289
        dialog->cancel_btn   = cancel_btn;
290
291
        gtkut_box_set_reverse_order(GTK_BOX(dialog->confirm_area),
292
                                    !prefs_common.comply_gnome_hig);
293
        manage_window_set_transient(GTK_WINDOW(dialog->window));
294
        gtk_widget_grab_focus(dialog->ok_btn);
295
296
        dialog->finished = FALSE;
297
        dialog->cancelled = FALSE;
298
299
        return dialog;
300
}
301
302
void prefs_display_items_dialog_destroy(PrefsDisplayItemsDialog *dialog)
303
{
304
        if (!dialog)
305
                return;
306
307
        if (dialog->available_items)
308
                g_list_free(dialog->available_items);
309
        if (dialog->visible_items)
310
                g_list_free(dialog->visible_items);
311
        gtk_widget_destroy(dialog->window);
312
        g_free(dialog);
313
}
314
315
static void prefs_display_items_update_available
316
        (PrefsDisplayItemsDialog *dialog)
317
{
318
        GtkCList *stock_clist = GTK_CLIST(dialog->stock_clist);
319
        GList *cur;
320
321
        g_return_if_fail(dialog->available_items != NULL);
322
323
        gtk_clist_clear(stock_clist);
324
325
        for (cur = dialog->available_items; cur != NULL; cur = cur->next) {
326
                PrefsDisplayItem *item = cur->data;
327
                gint row;
328
                gchar *name;
329
330
                if (item->allow_multiple || item->in_use == FALSE) {
331
                        name = gettext(item->label);
332
                        row = gtk_clist_append(stock_clist, (gchar **)&name);
333
                        gtk_clist_set_row_data(stock_clist, row, item);
334
                }
335
        }
336
}
337
338
static PrefsDisplayItem *prefs_display_items_get_item_from_id
339
        (PrefsDisplayItemsDialog *dialog, gint id)
340
{
341
        gint i;
342
343
        for (i = 0; dialog->all_items[i].id != -1; i++) {
344
                if (id == dialog->all_items[i].id)
345
                        return (PrefsDisplayItem *)&dialog->all_items[i];
346
        }
347
348
        return NULL;
349
}
350
351
void prefs_display_items_dialog_set_available(PrefsDisplayItemsDialog *dialog,
352
                                              PrefsDisplayItem *all_items,
353
                                              const gint *ids)
354
{
355
        gint i;
356
        GList *list = NULL;
357
358
        dialog->all_items = all_items;
359
        for (i = 0; ids[i] != -1; i++) {
360
                PrefsDisplayItem *item;
361
362
                item = prefs_display_items_get_item_from_id(dialog, ids[i]);
363
                if (item)
364
                        list = g_list_append(list, item);
365
        }
366
        dialog->available_items = list;
367
        prefs_display_items_update_available(dialog);
368
}
369
370
void prefs_display_items_dialog_set_default_visible
371
                                        (PrefsDisplayItemsDialog *dialog,
372
                                         const gint *ids)
373
{
374
        dialog->default_visible_ids = ids;
375
}
376
377
void prefs_display_items_dialog_set_visible(PrefsDisplayItemsDialog *dialog,
378
                                            const gint *ids)
379
{
380
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
381
        GList *cur;
382
        PrefsDisplayItem *item;
383
        gint i;
384
        gint row;
385
        gchar *name;
386
387
        g_return_if_fail(dialog->available_items != NULL);
388
389
        if (!ids)
390
                ids = dialog->default_visible_ids;
391
        g_return_if_fail(ids != NULL);
392
393
        gtk_clist_clear(shown_clist);
394
395
        if (dialog->visible_items) {
396
                g_list_free(dialog->visible_items);
397
                dialog->visible_items = NULL;
398
        }
399
400
        for (cur = dialog->available_items; cur != NULL; cur = cur->next) {
401
                item = cur->data;
402
                item->in_use = FALSE;
403
        }
404
405
        for (i = 0; ids[i] != -1; i++) {
406
                gint id = ids[i];
407
408
                item = prefs_display_items_get_item_from_id(dialog, id);
409
410
                g_return_if_fail(item != NULL);
411
                g_return_if_fail(item->allow_multiple || item->in_use == FALSE);
412
413
                item->in_use = TRUE;
414
415
                name = gettext(item->label);
416
                row = gtk_clist_append(shown_clist, (gchar **)&name);
417
                gtk_clist_set_row_data(shown_clist, row, item);
418
        }
419
420
        name = "--------";
421
        row = gtk_clist_append(shown_clist, (gchar **)&name);
422
        gtk_widget_ensure_style(GTK_WIDGET(shown_clist));
423
        gtk_clist_set_foreground
424
                (shown_clist, row,
425
                 &GTK_WIDGET(shown_clist)->style->text[GTK_STATE_INSENSITIVE]);
426
427
        prefs_display_items_update_available(dialog);
428
        prefs_display_items_set_sensitive(dialog);
429
        gtk_clist_moveto(shown_clist, 0, 0, 0, 0);
430
}
431
432
static void prefs_display_items_set_sensitive(PrefsDisplayItemsDialog *dialog)
433
{
434
        GtkCList *clist = GTK_CLIST(dialog->shown_clist);
435
        gint row;
436
437
        if (!clist->selection) return;
438
439
        row = GPOINTER_TO_INT(clist->selection->data);
440
441
        if (gtk_clist_get_row_data(clist, row))
442
                gtk_widget_set_sensitive(dialog->remove_btn, TRUE);
443
        else
444
                gtk_widget_set_sensitive(dialog->remove_btn, FALSE);
445
446
        if (row > 0 && row < clist->rows - 1)
447
                gtk_widget_set_sensitive(dialog->up_btn, TRUE);
448
        else
449
                gtk_widget_set_sensitive(dialog->up_btn, FALSE);
450
451
        if (row >= 0 && row < clist->rows - 2)
452
                gtk_widget_set_sensitive(dialog->down_btn, TRUE);
453
        else
454
                gtk_widget_set_sensitive(dialog->down_btn, FALSE);
455
456
        if (gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
457
                gtk_clist_moveto(clist, row, 0, 0.5, 0);
458
}
459
460
static void prefs_display_items_add(GtkWidget *widget, gpointer data)
461
{
462
        PrefsDisplayItemsDialog *dialog = data;
463
        GtkCList *stock_clist = GTK_CLIST(dialog->stock_clist);
464
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
465
        PrefsDisplayItem *item;
466
        gint row;
467
        gchar *name;
468
469
        if (!stock_clist->selection) return;
470
471
        row = GPOINTER_TO_INT(stock_clist->selection->data);
472
        item = (PrefsDisplayItem *)gtk_clist_get_row_data(stock_clist, row);
473
        if (!item->allow_multiple) {
474
                gtk_clist_remove(stock_clist, row);
475
                if (stock_clist->rows == row)
476
                        gtk_clist_select_row(stock_clist, row - 1, -1);
477
        }
478
479
        if (!shown_clist->selection)
480
                row = 0;
481
        else
482
                row = GPOINTER_TO_INT(shown_clist->selection->data);
483
484
        item->in_use = TRUE;
485
486
        name = gettext(item->label);
487
        row = gtk_clist_insert(shown_clist, row, (gchar **)&name);
488
        gtk_clist_set_row_data(shown_clist, row, item);
489
490
        prefs_display_items_set_sensitive(dialog);
491
}
492
493
static void prefs_display_items_remove(GtkWidget *widget, gpointer data)
494
{
495
        PrefsDisplayItemsDialog *dialog = data;
496
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
497
        PrefsDisplayItem *item;
498
        gint row;
499
500
        if (!shown_clist->selection) return;
501
502
        row = GPOINTER_TO_INT(shown_clist->selection->data);
503
        item = (PrefsDisplayItem *)gtk_clist_get_row_data(shown_clist, row);
504
        if (!item)
505
                return;
506
        gtk_clist_remove(shown_clist, row);
507
        if (shown_clist->rows == row)
508
                gtk_clist_select_row(shown_clist, row - 1, -1);
509
510
        if (!item->allow_multiple) {
511
                item->in_use = FALSE;
512
                prefs_display_items_update_available(dialog);
513
        }
514
515
        prefs_display_items_set_sensitive(dialog);
516
}
517
518
static void prefs_display_items_up(GtkWidget *widget, gpointer data)
519
{
520
        PrefsDisplayItemsDialog *dialog = data;
521
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
522
        gint row;
523
524
        if (!shown_clist->selection) return;
525
526
        row = GPOINTER_TO_INT(shown_clist->selection->data);
527
        if (row > 0 && row < shown_clist->rows - 1)
528
                gtk_clist_row_move(shown_clist, row, row - 1);
529
}
530
531
static void prefs_display_items_down(GtkWidget *widget, gpointer data)
532
{
533
        PrefsDisplayItemsDialog *dialog = data;
534
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
535
        gint row;
536
537
        if (!shown_clist->selection) return;
538
539
        row = GPOINTER_TO_INT(shown_clist->selection->data);
540
        if (row >= 0 && row < shown_clist->rows - 2)
541
                gtk_clist_row_move(shown_clist, row, row + 1);
542
}
543
544
static void prefs_display_items_default(GtkWidget *widget, gpointer data)
545
{
546
        PrefsDisplayItemsDialog *dialog = data;
547
548
        prefs_display_items_dialog_set_visible(dialog, NULL);
549
}
550
551
static void prefs_display_items_ok(GtkWidget *widget, gpointer data)
552
{
553
        PrefsDisplayItemsDialog *dialog = data;
554
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
555
        GList *list = NULL;
556
        PrefsDisplayItem *item;
557
        gint row;
558
559
        for (row = 0; row < shown_clist->rows; row++) {
560
                item = gtk_clist_get_row_data(shown_clist, row);
561
                if (item)
562
                        list = g_list_append(list, item);
563
        }
564
565
        dialog->visible_items = list;
566
        dialog->finished = TRUE;
567
}
568
569
static void prefs_display_items_cancel(GtkWidget *widget, gpointer data)
570
{
571
        PrefsDisplayItemsDialog *dialog = data;
572
573
        dialog->finished = TRUE;
574
        dialog->cancelled = TRUE;
575
}
576
577
static void prefs_display_items_shown_select_row(GtkWidget        *widget,
578
                                                 gint                 row,
579
                                                 gint                 column,
580
                                                 GdkEventButton        *event,
581
                                                 gpointer         data)
582
{
583
        PrefsDisplayItemsDialog *dialog = data;
584
585
        prefs_display_items_set_sensitive(dialog);
586
}
587
588
static void prefs_display_items_shown_row_move        (GtkWidget        *widget,
589
                                                 gint                 row,
590
                                                 gint                 column,
591
                                                 gpointer         data)
592
{
593
        PrefsDisplayItemsDialog *dialog = data;
594
595
        prefs_display_items_set_sensitive(dialog);
596
}
597
598
static gint prefs_display_items_delete_event(GtkWidget *widget,
599
                                             GdkEventAny *event,
600
                                             gpointer data)
601
{
602
        PrefsDisplayItemsDialog *dialog = data;
603
604
        dialog->finished = TRUE;
605
        dialog->cancelled = TRUE;
606
        return TRUE;
607
}
608
609
static gboolean prefs_display_items_key_pressed(GtkWidget *widget,
610
                                                GdkEventKey *event,
611
                                                gpointer data)
612
{
613
        PrefsDisplayItemsDialog *dialog = data;
614
615
        if (event && event->keyval == GDK_Escape) {
616
                dialog->finished = TRUE;
617
                dialog->cancelled = TRUE;
618
        }
619
        return FALSE;
620
}