Statistics
| Revision:

root / src / prefs_display_items.c @ 1573

History | View | Annotate | Download (17.6 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
174
        /* add/remove button */
175
        btn_vbox = gtk_vbox_new(FALSE, 0);
176
        gtk_widget_show(btn_vbox);
177
        gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
178
179
        btn_vbox1 = gtk_vbox_new(FALSE, 8);
180
        gtk_widget_show(btn_vbox1);
181
        gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
182
183
        add_btn = gtk_button_new_with_label(_("  ->  "));
184
        gtk_widget_show(add_btn);
185
        gtk_box_pack_start(GTK_BOX(btn_vbox1), add_btn, FALSE, FALSE, 0);
186
187
        remove_btn = gtk_button_new_with_label(_("  <-  "));
188
        gtk_widget_show(remove_btn);
189
        gtk_box_pack_start(GTK_BOX(btn_vbox1), remove_btn, FALSE, FALSE, 0);
190
191
        g_signal_connect(G_OBJECT(add_btn), "clicked",
192
                         G_CALLBACK(prefs_display_items_add), dialog);
193
        g_signal_connect(G_OBJECT(remove_btn), "clicked",
194
                         G_CALLBACK(prefs_display_items_remove), dialog);
195
196
        clist_hbox = gtk_hbox_new(FALSE, 8);
197
        gtk_widget_show(clist_hbox);
198
        gtk_box_pack_start(GTK_BOX(hbox1), clist_hbox, TRUE, TRUE, 0);
199
200
        scrolledwin = gtk_scrolled_window_new(NULL, NULL);
201
        gtk_widget_set_size_request(scrolledwin, 180, 210);
202
        gtk_widget_show(scrolledwin);
203
        gtk_box_pack_start(GTK_BOX(clist_hbox), scrolledwin, TRUE, TRUE, 0);
204
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
205
                                       GTK_POLICY_AUTOMATIC,
206
                                       GTK_POLICY_AUTOMATIC);
207
208
        title[0] = _("Displayed items");
209
        shown_clist = gtk_clist_new_with_titles(1, title);
210
        gtk_widget_show(shown_clist);
211
        gtk_container_add(GTK_CONTAINER(scrolledwin), shown_clist);
212
        gtk_clist_set_selection_mode(GTK_CLIST(shown_clist),
213
                                     GTK_SELECTION_BROWSE);
214
#if 0
215
        gtk_clist_set_reorderable(GTK_CLIST(shown_clist), TRUE);
216
        gtk_clist_set_use_drag_icons(GTK_CLIST(shown_clist), FALSE);
217
#endif
218
        GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(shown_clist)->column[0].button,
219
                               GTK_CAN_FOCUS);
220
221
        g_signal_connect(G_OBJECT(shown_clist), "select-row",
222
                         G_CALLBACK(prefs_display_items_shown_select_row),
223
                         dialog);
224
        g_signal_connect_after(G_OBJECT(shown_clist), "row-move",
225
                               G_CALLBACK(prefs_display_items_shown_row_move),
226
                               dialog);
227
228
        /* up/down button */
229
        btn_vbox = gtk_vbox_new(FALSE, 0);
230
        gtk_widget_show(btn_vbox);
231
        gtk_box_pack_start(GTK_BOX(hbox1), btn_vbox, FALSE, FALSE, 0);
232
233
        btn_vbox1 = gtk_vbox_new(FALSE, 8);
234
        gtk_widget_show(btn_vbox1);
235
        gtk_box_pack_start(GTK_BOX(btn_vbox), btn_vbox1, TRUE, FALSE, 0);
236
237
        up_btn = gtk_button_new_with_label(_("Up"));
238
        gtk_widget_show(up_btn);
239
        gtk_box_pack_start(GTK_BOX(btn_vbox1), up_btn, FALSE, FALSE, 0);
240
241
        down_btn = gtk_button_new_with_label(_("Down"));
242
        gtk_widget_show(down_btn);
243
        gtk_box_pack_start(GTK_BOX(btn_vbox1), down_btn, FALSE, FALSE, 0);
244
245
        g_signal_connect(G_OBJECT(up_btn), "clicked",
246
                         G_CALLBACK(prefs_display_items_up), dialog);
247
        g_signal_connect(G_OBJECT(down_btn), "clicked",
248
                         G_CALLBACK(prefs_display_items_down), dialog);
249
250
        btn_hbox = gtk_hbox_new(FALSE, 8);
251
        gtk_widget_show(btn_hbox);
252
        gtk_box_pack_end(GTK_BOX(vbox), btn_hbox, FALSE, FALSE, 0);
253
254
        btn_vbox = gtk_vbox_new(FALSE, 0);
255
        gtk_widget_show(btn_vbox);
256
        gtk_box_pack_start(GTK_BOX(btn_hbox), btn_vbox, FALSE, FALSE, 0);
257
258
        default_btn = gtk_button_new_with_label(_(" Revert to default "));
259
        gtk_widget_show(default_btn);
260
        gtk_box_pack_start(GTK_BOX(btn_vbox), default_btn, TRUE, FALSE, 0);
261
262
        g_signal_connect(G_OBJECT(default_btn), "clicked",
263
                         G_CALLBACK(prefs_display_items_default), dialog);
264
265
        gtkut_stock_button_set_create(&confirm_area, &ok_btn, GTK_STOCK_OK,
266
                                      &cancel_btn, GTK_STOCK_CANCEL,
267
                                      NULL, NULL);
268
        gtk_widget_show(confirm_area);
269
        gtk_box_pack_end(GTK_BOX(btn_hbox), confirm_area, FALSE, FALSE, 0);
270
        gtk_widget_grab_default(ok_btn);
271
272
        g_signal_connect(G_OBJECT(ok_btn), "clicked",
273
                         G_CALLBACK(prefs_display_items_ok), dialog);
274
        g_signal_connect(G_OBJECT(cancel_btn), "clicked",
275
                         G_CALLBACK(prefs_display_items_cancel), dialog);
276
277
        dialog->window       = window;
278
        dialog->label        = label;
279
        dialog->stock_clist  = stock_clist;
280
        dialog->shown_clist  = shown_clist;
281
        dialog->add_btn      = add_btn;
282
        dialog->remove_btn   = remove_btn;
283
        dialog->up_btn       = up_btn;
284
        dialog->down_btn     = down_btn;
285
        dialog->confirm_area = confirm_area;
286
        dialog->ok_btn       = ok_btn;
287
        dialog->cancel_btn   = cancel_btn;
288
289
        gtkut_box_set_reverse_order(GTK_BOX(dialog->confirm_area),
290
                                    !prefs_common.comply_gnome_hig);
291
        manage_window_set_transient(GTK_WINDOW(dialog->window));
292
        gtk_widget_grab_focus(dialog->ok_btn);
293
294
        dialog->finished = FALSE;
295
        dialog->cancelled = FALSE;
296
297
        return dialog;
298
}
299
300
void prefs_display_items_dialog_destroy(PrefsDisplayItemsDialog *dialog)
301
{
302
        if (!dialog)
303
                return;
304
305
        if (dialog->available_items)
306
                g_list_free(dialog->available_items);
307
        if (dialog->visible_items)
308
                g_list_free(dialog->visible_items);
309
        gtk_widget_destroy(dialog->window);
310
        g_free(dialog);
311
}
312
313
static void prefs_display_items_update_available
314
        (PrefsDisplayItemsDialog *dialog)
315
{
316
        GtkCList *stock_clist = GTK_CLIST(dialog->stock_clist);
317
        GList *cur;
318
319
        g_return_if_fail(dialog->available_items != NULL);
320
321
        gtk_clist_clear(stock_clist);
322
323
        for (cur = dialog->available_items; cur != NULL; cur = cur->next) {
324
                PrefsDisplayItem *item = cur->data;
325
                gint row;
326
                gchar *name;
327
328
                if (item->allow_multiple || item->in_use == FALSE) {
329
                        name = gettext(item->label);
330
                        row = gtk_clist_append(stock_clist, (gchar **)&name);
331
                        gtk_clist_set_row_data(stock_clist, row, item);
332
                }
333
        }
334
}
335
336
static PrefsDisplayItem *prefs_display_items_get_item_from_id
337
        (PrefsDisplayItemsDialog *dialog, gint id)
338
{
339
        gint i;
340
341
        for (i = 0; dialog->all_items[i].id != -1; i++) {
342
                if (id == dialog->all_items[i].id)
343
                        return (PrefsDisplayItem *)&dialog->all_items[i];
344
        }
345
346
        return NULL;
347
}
348
349
void prefs_display_items_dialog_set_available(PrefsDisplayItemsDialog *dialog,
350
                                              PrefsDisplayItem *all_items,
351
                                              const gint *ids)
352
{
353
        gint i;
354
        GList *list = NULL;
355
356
        dialog->all_items = all_items;
357
        for (i = 0; ids[i] != -1; i++) {
358
                PrefsDisplayItem *item;
359
360
                item = prefs_display_items_get_item_from_id(dialog, ids[i]);
361
                if (item)
362
                        list = g_list_append(list, item);
363
        }
364
        dialog->available_items = list;
365
        prefs_display_items_update_available(dialog);
366
}
367
368
void prefs_display_items_dialog_set_default_visible
369
                                        (PrefsDisplayItemsDialog *dialog,
370
                                         const gint *ids)
371
{
372
        dialog->default_visible_ids = ids;
373
}
374
375
void prefs_display_items_dialog_set_visible(PrefsDisplayItemsDialog *dialog,
376
                                            const gint *ids)
377
{
378
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
379
        GList *cur;
380
        PrefsDisplayItem *item;
381
        gint i;
382
        gint row;
383
        gchar *name;
384
385
        g_return_if_fail(dialog->available_items != NULL);
386
387
        if (!ids)
388
                ids = dialog->default_visible_ids;
389
        g_return_if_fail(ids != NULL);
390
391
        gtk_clist_clear(shown_clist);
392
393
        if (dialog->visible_items) {
394
                g_list_free(dialog->visible_items);
395
                dialog->visible_items = NULL;
396
        }
397
398
        for (cur = dialog->available_items; cur != NULL; cur = cur->next) {
399
                item = cur->data;
400
                item->in_use = FALSE;
401
        }
402
403
        for (i = 0; ids[i] != -1; i++) {
404
                gint id = ids[i];
405
406
                item = prefs_display_items_get_item_from_id(dialog, id);
407
408
                g_return_if_fail(item != NULL);
409
                g_return_if_fail(item->allow_multiple || item->in_use == FALSE);
410
411
                item->in_use = TRUE;
412
413
                name = gettext(item->label);
414
                row = gtk_clist_append(shown_clist, (gchar **)&name);
415
                gtk_clist_set_row_data(shown_clist, row, item);
416
        }
417
418
        name = "--------";
419
        row = gtk_clist_append(shown_clist, (gchar **)&name);
420
        gtk_widget_ensure_style(GTK_WIDGET(shown_clist));
421
        gtk_clist_set_foreground
422
                (shown_clist, row,
423
                 &GTK_WIDGET(shown_clist)->style->text[GTK_STATE_INSENSITIVE]);
424
425
        prefs_display_items_update_available(dialog);
426
        prefs_display_items_set_sensitive(dialog);
427
        gtk_clist_moveto(shown_clist, 0, 0, 0, 0);
428
}
429
430
static void prefs_display_items_set_sensitive(PrefsDisplayItemsDialog *dialog)
431
{
432
        GtkCList *clist = GTK_CLIST(dialog->shown_clist);
433
        gint row;
434
435
        if (!clist->selection) return;
436
437
        row = GPOINTER_TO_INT(clist->selection->data);
438
439
        if (gtk_clist_get_row_data(clist, row))
440
                gtk_widget_set_sensitive(dialog->remove_btn, TRUE);
441
        else
442
                gtk_widget_set_sensitive(dialog->remove_btn, FALSE);
443
444
        if (row > 0 && row < clist->rows - 1)
445
                gtk_widget_set_sensitive(dialog->up_btn, TRUE);
446
        else
447
                gtk_widget_set_sensitive(dialog->up_btn, FALSE);
448
449
        if (row >= 0 && row < clist->rows - 2)
450
                gtk_widget_set_sensitive(dialog->down_btn, TRUE);
451
        else
452
                gtk_widget_set_sensitive(dialog->down_btn, FALSE);
453
454
        if (gtk_clist_row_is_visible(clist, row) != GTK_VISIBILITY_FULL)
455
                gtk_clist_moveto(clist, row, 0, 0.5, 0);
456
}
457
458
static void prefs_display_items_add(GtkWidget *widget, gpointer data)
459
{
460
        PrefsDisplayItemsDialog *dialog = data;
461
        GtkCList *stock_clist = GTK_CLIST(dialog->stock_clist);
462
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
463
        PrefsDisplayItem *item;
464
        gint row;
465
        gchar *name;
466
467
        if (!stock_clist->selection) return;
468
469
        row = GPOINTER_TO_INT(stock_clist->selection->data);
470
        item = (PrefsDisplayItem *)gtk_clist_get_row_data(stock_clist, row);
471
        if (!item->allow_multiple) {
472
                gtk_clist_remove(stock_clist, row);
473
                gtk_widget_queue_resize(GTK_WIDGET(stock_clist));
474
                if (stock_clist->rows == row)
475
                        gtk_clist_select_row(stock_clist, row - 1, -1);
476
        }
477
478
        if (!shown_clist->selection)
479
                row = 0;
480
        else
481
                row = GPOINTER_TO_INT(shown_clist->selection->data);
482
483
        item->in_use = TRUE;
484
485
        name = gettext(item->label);
486
        row = gtk_clist_insert(shown_clist, row, (gchar **)&name);
487
        gtk_clist_set_row_data(shown_clist, row, item);
488
489
        prefs_display_items_set_sensitive(dialog);
490
}
491
492
static void prefs_display_items_remove(GtkWidget *widget, gpointer data)
493
{
494
        PrefsDisplayItemsDialog *dialog = data;
495
        GtkCList *stock_clist = GTK_CLIST(dialog->stock_clist);
496
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
497
        PrefsDisplayItem *item;
498
        gint row;
499
        gchar *name;
500
501
        if (!shown_clist->selection) return;
502
503
        row = GPOINTER_TO_INT(shown_clist->selection->data);
504
        item = (PrefsDisplayItem *)gtk_clist_get_row_data(shown_clist, row);
505
        if (!item)
506
                return;
507
        gtk_clist_remove(shown_clist, row);
508
        gtk_widget_queue_resize(GTK_WIDGET(shown_clist));
509
        if (shown_clist->rows == row)
510
                gtk_clist_select_row(shown_clist, row - 1, -1);
511
512
        if (!item->allow_multiple) {
513
                item->in_use = FALSE;
514
                prefs_display_items_update_available(dialog);
515
        }
516
517
        prefs_display_items_set_sensitive(dialog);
518
}
519
520
static void prefs_display_items_up(GtkWidget *widget, gpointer data)
521
{
522
        PrefsDisplayItemsDialog *dialog = data;
523
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
524
        gint row;
525
526
        if (!shown_clist->selection) return;
527
528
        row = GPOINTER_TO_INT(shown_clist->selection->data);
529
        if (row > 0 && row < shown_clist->rows - 1)
530
                gtk_clist_row_move(shown_clist, row, row - 1);
531
}
532
533
static void prefs_display_items_down(GtkWidget *widget, gpointer data)
534
{
535
        PrefsDisplayItemsDialog *dialog = data;
536
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
537
        gint row;
538
539
        if (!shown_clist->selection) return;
540
541
        row = GPOINTER_TO_INT(shown_clist->selection->data);
542
        if (row >= 0 && row < shown_clist->rows - 2)
543
                gtk_clist_row_move(shown_clist, row, row + 1);
544
}
545
546
static void prefs_display_items_default(GtkWidget *widget, gpointer data)
547
{
548
        PrefsDisplayItemsDialog *dialog = data;
549
550
        prefs_display_items_dialog_set_visible(dialog, NULL);
551
}
552
553
static void prefs_display_items_ok(GtkWidget *widget, gpointer data)
554
{
555
        PrefsDisplayItemsDialog *dialog = data;
556
        GtkCList *shown_clist = GTK_CLIST(dialog->shown_clist);
557
        GList *list = NULL;
558
        PrefsDisplayItem *item;
559
        gint row;
560
561
        for (row = 0; row < shown_clist->rows; row++) {
562
                item = gtk_clist_get_row_data(shown_clist, row);
563
                if (item)
564
                        list = g_list_append(list, item);
565
        }
566
567
        dialog->visible_items = list;
568
        dialog->finished = TRUE;
569
}
570
571
static void prefs_display_items_cancel(GtkWidget *widget, gpointer data)
572
{
573
        PrefsDisplayItemsDialog *dialog = data;
574
575
        dialog->finished = TRUE;
576
        dialog->cancelled = TRUE;
577
}
578
579
static void prefs_display_items_shown_select_row(GtkWidget        *widget,
580
                                                 gint                 row,
581
                                                 gint                 column,
582
                                                 GdkEventButton        *event,
583
                                                 gpointer         data)
584
{
585
        PrefsDisplayItemsDialog *dialog = data;
586
587
        prefs_display_items_set_sensitive(dialog);
588
}
589
590
static void prefs_display_items_shown_row_move        (GtkWidget        *widget,
591
                                                 gint                 row,
592
                                                 gint                 column,
593
                                                 gpointer         data)
594
{
595
        PrefsDisplayItemsDialog *dialog = data;
596
597
        prefs_display_items_set_sensitive(dialog);
598
}
599
600
static gint prefs_display_items_delete_event(GtkWidget *widget,
601
                                             GdkEventAny *event,
602
                                             gpointer data)
603
{
604
        PrefsDisplayItemsDialog *dialog = data;
605
606
        dialog->finished = TRUE;
607
        dialog->cancelled = TRUE;
608
        return TRUE;
609
}
610
611
static gboolean prefs_display_items_key_pressed(GtkWidget *widget,
612
                                                GdkEventKey *event,
613
                                                gpointer data)
614
{
615
        PrefsDisplayItemsDialog *dialog = data;
616
617
        if (event && event->keyval == GDK_Escape) {
618
                dialog->finished = TRUE;
619
                dialog->cancelled = TRUE;
620
        }
621
        return FALSE;
622
}