1 /*
2 | Copyright (C) 2002 Corey Donohoe <atmos at atmos.org>
3 | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
4 | Part of the gtkpod project.
5 |
6 | URL: http://www.gtkpod.org/
7 | URL: http://gtkpod.sourceforge.net/
8 |
9 | This program is free software; you can redistribute it and/or modify
10 | it under the terms of the GNU General Public License as published by
11 | the Free Software Foundation; either version 2 of the License, or
12 | (at your option) any later version.
13 |
14 | This program is distributed in the hope that it will be useful,
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 | GNU General Public License for more details.
18 |
19 | You should have received a copy of the GNU General Public License
20 | along with this program; if not, write to the Free Software
21 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 |
23 | iTunes and iPod are trademarks of Apple
24 |
25 | This product is not supported/written/published by Apple!
26 |
27 | $Id$
28 */
29
30 #include <stdio.h>
31 #include <string.h>
32 #include "charset.h"
33 #include "display_itdb.h"
34 #include "info.h"
35 #include "fileselection.h"
36 #include "sha1.h"
37 /*#include "md5.h"*/
38 #include "misc.h"
39 #include "misc_track.h"
40 #include "prefs.h"
41 #include "sort_window.h"
42 #include "repository.h"
43 #include "display_coverart.h"
44
45 GladeXML *prefs_window_xml;
46 GladeXML *sort_window_xml;
47
48 static GtkWidget *sort_window = NULL;
49
50 /* New prefs temp handling */
51 static TempPrefs *sort_temp_prefs;
52 static TempLists *sort_temp_lists;
53
54 static const GtkFileChooserAction path_type[] =
55 {
56 GTK_FILE_CHOOSER_ACTION_OPEN, /* select file */
57 GTK_FILE_CHOOSER_ACTION_OPEN,
58 GTK_FILE_CHOOSER_ACTION_OPEN,
59 GTK_FILE_CHOOSER_ACTION_OPEN,
60 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, /* select folder */
61 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
62 GTK_FILE_CHOOSER_ACTION_OPEN,
63 GTK_FILE_CHOOSER_ACTION_OPEN,
64 GTK_FILE_CHOOSER_ACTION_OPEN,
65 GTK_FILE_CHOOSER_ACTION_OPEN,
66 GTK_FILE_CHOOSER_ACTION_OPEN,
67 -1
68 };
69
70 enum {
71 TRACK_COLUMNS_TEXT,
72 TRACK_COLUMNS_INT,
73 TRACK_N_COLUMNS
74 };
75
76 typedef enum {
77 HIDE,
78 SHOW
79 } TrackColumnsType;
80
81 /* ------------------------------------------------------------ *\
82 * *
83 * Sort-Prefs Window *
84 * *
85 \* ------------------------------------------------------------ */
86
87 /* the following checkboxes exist */
88 static const gint sort_ign_fields[] = {
89 T_TITLE, T_ARTIST,
90 T_ALBUM, T_COMPOSER,
91 -1
92 };
93
94 /* Copy the current ignore fields and ignore strings into scfg */
sort_window_read_sort_ign()95 static void sort_window_read_sort_ign ()
96 {
97 gint i;
98 GtkTextView *tv;
99 GtkTextBuffer *tb;
100 GList *sort_ign_strings;
101 GList *current;
102 gchar *buf;
103
104
105 /* read sort field states */
106 for (i=0; sort_ign_fields[i] != -1; ++i)
107 {
108 buf = g_strdup_printf ("sort_ign_field_%d",
109 sort_ign_fields[i]);
110 GtkWidget *w = gtkpod_xml_get_widget (sort_window_xml, buf);
111 g_return_if_fail (w);
112 prefs_set_int( buf,
113 gtk_toggle_button_get_active (
114 GTK_TOGGLE_BUTTON (w)));
115 g_free (buf);
116 }
117
118 /* Read sort ignore strings */
119 tv = GTK_TEXT_VIEW (gtkpod_xml_get_widget (sort_window_xml,
120 "sort_ign_strings"));
121 g_return_if_fail (tv);
122 tb = gtk_text_view_get_buffer (tv);
123 g_return_if_fail (tb);
124
125 sort_ign_strings = get_list_from_buffer(tb);
126 current = sort_ign_strings;
127
128 /* Add a trailing whitespace to strings */
129 while (current)
130 {
131 g_strstrip(current->data);
132
133 if (strlen(current->data) != 0)
134 {
135 buf = g_strdup_printf("%s ",(gchar *) current->data);
136 g_free(current->data);
137 current->data = buf;
138 }
139
140 current = g_list_next(current);
141 }
142
143 temp_list_add(sort_temp_lists, "sort_ign_string_", sort_ign_strings);
144 }
145
146 /**
147 * sort_window_create
148 * Create, Initialize, and Show the sorting preferences window
149 * allocate a static sort struct for temporary variables
150 */
sort_window_create(void)151 void sort_window_create (void)
152 {
153 if (sort_window)
154 {
155 /* sort options already open --> simply raise to the top */
156 gdk_window_raise(sort_window->window);
157 }
158 else
159 {
160 GList *sort_ign_strings;
161 GList *current; /* current sort ignore item */
162 GtkWidget *w;
163 GtkTextView *tv;
164 GtkTextBuffer *tb;
165 gint i;
166 GtkTextIter ti;
167 gchar *str;
168 GtkTooltips *tooltips;
169 gint *tm_listed_order, tm_list_pos;
170
171 sort_temp_prefs = temp_prefs_create();
172 sort_temp_lists = temp_lists_create();
173
174 sort_window_xml = gtkpod_xml_new (xml_file, "sort_window");
175 glade_xml_signal_autoconnect (sort_window_xml);
176
177 sort_window = gtkpod_xml_get_widget (sort_window_xml, "sort_window");
178
179 /* label the ignore-field checkbox-labels */
180 for (i=0; sort_ign_fields[i] != -1; ++i)
181 {
182 gchar *buf = g_strdup_printf ("sort_ign_field_%d",
183 sort_ign_fields[i]);
184 GtkWidget *w = gtkpod_xml_get_widget (sort_window_xml, buf);
185 g_return_if_fail (w);
186 gtk_button_set_label (
187 GTK_BUTTON (w),
188 gettext (get_t_string (sort_ign_fields[i])));
189 gtk_toggle_button_set_active (
190 GTK_TOGGLE_BUTTON (w),
191 prefs_get_int (buf));
192 g_free (buf);
193 }
194 /* set the ignore strings */
195 tv = GTK_TEXT_VIEW (gtkpod_xml_get_widget (sort_window_xml,
196 "sort_ign_strings"));
197 tb = gtk_text_view_get_buffer (tv);
198 if (!tb)
199 { /* text buffer doesn't exist yet */
200 tb = gtk_text_buffer_new (NULL);
201 gtk_text_view_set_buffer(tv, tb);
202 gtk_text_view_set_editable(tv, FALSE);
203 gtk_text_view_set_cursor_visible(tv, FALSE);
204 }
205
206 sort_ign_strings = prefs_get_list("sort_ign_string_");
207 current = sort_ign_strings;
208 while (current)
209 {
210 str = (gchar *)current->data;
211 current = g_list_next(current);
212
213 /* append new text to the end */
214 gtk_text_buffer_get_end_iter (tb, &ti);
215 gtk_text_buffer_insert (tb, &ti, str, -1);
216 /* append newline */
217 gtk_text_buffer_get_end_iter (tb, &ti);
218 gtk_text_buffer_insert (tb, &ti, "\n", -1);
219 }
220
221 prefs_free_list(sort_ign_strings);
222
223 sort_window_read_sort_ign ();
224
225 /* Set Sort-Column-Combo */
226 /* create the list in the order of the columns displayed */
227 tm_store_col_order ();
228
229 /* Here we store the order of TM_Items in the
230 * GtkComboBox */
231 tm_listed_order = g_new (gint, TM_NUM_COLUMNS);
232 tm_list_pos = 1;
233
234 w = gtkpod_xml_get_widget (sort_window_xml, "sort_combo");
235 gtk_combo_box_remove_text (GTK_COMBO_BOX (w), 0);
236
237 gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("No sorting"));
238
239 for (i = 0; i < TM_NUM_COLUMNS; ++i)
240 { /* first the visible columns */
241 TM_item col = prefs_get_int_index("col_order", i);
242 if (col != -1)
243 {
244 if (prefs_get_int_index("col_visible", col))
245 {
246 gtk_combo_box_append_text (GTK_COMBO_BOX (w), gettext (get_tm_string (col)));
247 tm_listed_order[col] = tm_list_pos;
248 ++tm_list_pos;
249 }
250 }
251 }
252
253 for (i=0; i<TM_NUM_COLUMNS; ++i)
254 { /* now the hidden colums */
255 TM_item col = prefs_get_int_index("col_order", i);
256 if (col != -1)
257 {
258 if (!prefs_get_int_index("col_visible", col))
259 {
260 gtk_combo_box_append_text (GTK_COMBO_BOX (w), gettext (get_tm_string (col)));
261 tm_listed_order[col] = tm_list_pos;
262 ++tm_list_pos;
263 }
264 }
265 }
266
267 /* associate tm_listed_order with sort_window */
268 g_object_set_data (G_OBJECT (sort_window), "tm_listed_order", tm_listed_order);
269
270 tooltips = gtk_tooltips_new ();
271 gtk_tooltips_set_tip (tooltips, w, _("You can also use the table headers, but this allows you to sort according to a column that is not displayed."), NULL);
272
273 sort_window_update ();
274
275 sort_window_show_hide_tooltips ();
276 gtk_window_set_transient_for (GTK_WINDOW (sort_window), GTK_WINDOW (gtkpod_window));
277 gtk_widget_show (sort_window);
278 }
279 }
280
281
282
283 /* Update sort_window's settings (except for ignore list and ignore
284 * fields) */
sort_window_update(void)285 void sort_window_update (void)
286 {
287 if (sort_window)
288 {
289 /* gchar *str; */
290 GtkWidget *w = NULL;
291 gint *tm_listed_order;
292 gint sortorder;
293 TM_item sortcol;
294
295 switch (prefs_get_int("pm_sort"))
296 {
297 case SORT_ASCENDING:
298 w = gtkpod_xml_get_widget (sort_window_xml, "pm_ascend");
299 break;
300 case SORT_DESCENDING:
301 w = gtkpod_xml_get_widget (sort_window_xml, "pm_descend");
302 break;
303 case SORT_NONE:
304 w = gtkpod_xml_get_widget (sort_window_xml, "pm_none");
305 break;
306 }
307 if (w)
308 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
309
310 w = NULL;
311 switch (prefs_get_int("st_sort"))
312 {
313 case SORT_ASCENDING:
314 w = gtkpod_xml_get_widget (sort_window_xml, "st_ascend");
315 break;
316 case SORT_DESCENDING:
317 w = gtkpod_xml_get_widget (sort_window_xml, "st_descend");
318 break;
319 case SORT_NONE:
320 w = gtkpod_xml_get_widget (sort_window_xml, "st_none");
321 break;
322 }
323 if (w)
324 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
325
326 switch (prefs_get_int("tm_sort"))
327 {
328 case SORT_ASCENDING:
329 w = gtkpod_xml_get_widget (sort_window_xml, "tm_ascend");
330 break;
331 case SORT_DESCENDING:
332 w = gtkpod_xml_get_widget (sort_window_xml, "tm_descend");
333 break;
334 case SORT_NONE:
335 w = gtkpod_xml_get_widget (sort_window_xml, "tm_none");
336 break;
337 }
338 if (w)
339 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
340
341 w = gtkpod_xml_get_widget (sort_window_xml, "tm_autostore");
342 if (w)
343 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
344 prefs_get_int("tm_autostore"));
345
346 if((w = gtkpod_xml_get_widget (sort_window_xml, "cfg_case_sensitive")))
347 {
348 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
349 prefs_get_int("case_sensitive"));
350 }
351 /* set standard entry in combo */
352 /* str = gettext (get_tm_string (prefs_get_int("tm_sortcol")));
353 w = gtkpod_xml_get_widget (sort_window_xml, "sort_combo");
354 gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (w)->entry), str); */
355 w = gtkpod_xml_get_widget (sort_window_xml, "sort_combo");
356 tm_listed_order = g_object_get_data (G_OBJECT (sort_window), "tm_listed_order");
357 g_return_if_fail (tm_listed_order);
358 sortcol = prefs_get_int ("tm_sortcol");
359 sortorder = prefs_get_int ("tm_sort");
360 if ((sortcol >= 0) && (sortcol < TM_NUM_COLUMNS) && (sortorder != SORT_NONE))
361 {
362 gtk_combo_box_set_active (GTK_COMBO_BOX(w), tm_listed_order[sortcol]);
363 }
364 else
365 {
366 gtk_combo_box_set_active (GTK_COMBO_BOX(w), 0);
367 }
368 }
369 }
370
371
372 /* turn the sort window insensitive (if it's open) */
sort_window_block(void)373 void sort_window_block (void)
374 {
375 if (sort_window)
376 gtk_widget_set_sensitive (sort_window, FALSE);
377 }
378
379 /* turn the sort window sensitive (if it's open) */
sort_window_release(void)380 void sort_window_release (void)
381 {
382 if (sort_window)
383 gtk_widget_set_sensitive (sort_window, TRUE);
384 }
385
386
387 /* make the tooltips visible or hide it depending on the value set in
388 * the prefs (tooltips_prefs) */
sort_window_show_hide_tooltips(void)389 void sort_window_show_hide_tooltips (void)
390 {
391 if (sort_window)
392 {
393 GtkTooltips *tt;
394 GtkTooltipsData *tooltips_data;
395
396 tooltips_data = gtk_tooltips_data_get (gtkpod_xml_get_widget (sort_window_xml, "sort_combo"));
397 tt = tooltips_data->tooltips;
398
399 if (tt)
400 {
401 if (prefs_get_int("display_tooltips_prefs"))
402 gtk_tooltips_enable (tt);
403 else
404 gtk_tooltips_disable (tt);
405 }
406 else
407 {
408 g_warning ("***tt is NULL***");
409 }
410 }
411 }
412
413
414 /* get the sort_column selected in the combo */
sort_window_get_sort_col(void)415 static TM_item sort_window_get_sort_col (void)
416 {
417 GtkWidget *w;
418 TM_item sortcol;
419 gint item;
420 gint *tm_listed_order;
421
422 g_return_val_if_fail (sort_window, -1);
423 tm_listed_order = g_object_get_data (G_OBJECT (sort_window), "tm_listed_order");
424
425 w = gtkpod_xml_get_widget (sort_window_xml, "sort_combo");
426 item = gtk_combo_box_get_active (GTK_COMBO_BOX (w));
427
428 if ((item<=0) || (item >TM_NUM_COLUMNS))
429 { /* either an error or no entry is active or "No sorting" is
430 selected (0). In all these cases we return -1 ("No
431 sorting") */
432 sortcol = -1;
433 }
434 else
435 {
436 gint i;
437 sortcol = -1;
438 for (i=0; i<TM_NUM_COLUMNS; ++i)
439 {
440 if (tm_listed_order[i] == item)
441 {
442 sortcol = i;
443 break;
444 }
445 }
446 }
447
448 return sortcol;
449 }
450
451
452 /* Prepare keys to be copied to prefs table */
sort_window_set()453 static void sort_window_set ()
454 {
455 gint val; /* A value from temp prefs */
456 TM_item sortcol_new;
457 TM_item sortcol_old;
458
459 sortcol_old = prefs_get_int("tm_sortcol");
460 sortcol_new = sort_window_get_sort_col();
461 if (sortcol_new != -1)
462 {
463 prefs_set_int ("tm_sortcol", sortcol_new);
464 if (prefs_get_int ("tm_sort") == SORT_NONE)
465 {
466 if (temp_prefs_get_int_value (sort_temp_prefs, "tm_sort", &val))
467 {
468 prefs_set_int ("tm_sort", val);
469 }
470 else
471 {
472 prefs_set_int ("tm_sort", GTK_SORT_ASCENDING);
473 }
474 }
475 }
476 else
477 {
478 if (prefs_get_int ("tm_sort") == SORT_NONE)
479 { /* no change */
480 sortcol_new = sortcol_old;
481 }
482 else
483 {
484 prefs_set_int ("tm_sort", SORT_NONE);
485 }
486 }
487
488 /* update compare string keys */
489 compare_string_fuzzy_generate_keys ();
490
491 /* if case sensitive has changed, rebuild sortkeys */
492 if (temp_prefs_get_int_value(sort_temp_prefs, "case_sensitive", &val))
493 {
494 st_rebuild_sortkeys ();
495 temp_prefs_remove_key (sort_temp_prefs, "case_sensitive");
496 }
497 /* if sort type has changed, initialize display */
498 if (temp_prefs_get_int_value(sort_temp_prefs, "pm_sort", &val))
499 {
500 pm_sort (val);
501 temp_prefs_remove_key (sort_temp_prefs, "pm_sort");
502 }
503 if (temp_prefs_get_int_value(sort_temp_prefs, "st_sort", &val))
504 {
505 st_sort (val);
506 temp_prefs_remove_key (sort_temp_prefs, "st_sort");
507 }
508 if (temp_prefs_get_int_value(sort_temp_prefs, "tm_sort", NULL) ||
509 (sortcol_old != sortcol_new))
510 {
511 tm_sort_counter (-1);
512 tm_sort (prefs_get_int("tm_sortcol"), prefs_get_int("tm_sort"));
513 temp_prefs_remove_key (sort_temp_prefs, "tm_sort");
514 }
515 /* if auto sort was changed to TRUE, store order */
516 if (!temp_prefs_get_int(sort_temp_prefs, "tm_autostore"))
517 {
518 tm_rows_reordered ();
519 temp_prefs_remove_key (sort_temp_prefs, "tm_autostore");
520 }
521
522 sort_window_update ();
523 }
524
525
526 /* -----------------------------------------------------------------
527
528 Callbacks
529
530 ----------------------------------------------------------------- */
531
532 G_MODULE_EXPORT void
on_st_ascend_toggled(GtkToggleButton * togglebutton,gpointer user_data)533 on_st_ascend_toggled (GtkToggleButton *togglebutton,
534 gpointer user_data)
535 {
536 if (gtk_toggle_button_get_active(togglebutton))
537 sort_window_set_st_sort (SORT_ASCENDING);
538 }
539
540
541 G_MODULE_EXPORT void
on_st_descend_toggled(GtkToggleButton * togglebutton,gpointer user_data)542 on_st_descend_toggled (GtkToggleButton *togglebutton,
543 gpointer user_data)
544 {
545 if (gtk_toggle_button_get_active(togglebutton))
546 sort_window_set_st_sort (SORT_DESCENDING);
547 }
548
549
550 G_MODULE_EXPORT void
on_st_none_toggled(GtkToggleButton * togglebutton,gpointer user_data)551 on_st_none_toggled (GtkToggleButton *togglebutton,
552 gpointer user_data)
553 {
554 if (gtk_toggle_button_get_active(togglebutton))
555 sort_window_set_st_sort (SORT_NONE);
556 }
557
558
559 G_MODULE_EXPORT void
on_pm_ascend_toggled(GtkToggleButton * togglebutton,gpointer user_data)560 on_pm_ascend_toggled (GtkToggleButton *togglebutton,
561 gpointer user_data)
562 {
563 if (gtk_toggle_button_get_active(togglebutton))
564 sort_window_set_pm_sort (SORT_ASCENDING);
565 }
566
567
568 G_MODULE_EXPORT void
on_pm_descend_toggled(GtkToggleButton * togglebutton,gpointer user_data)569 on_pm_descend_toggled (GtkToggleButton *togglebutton,
570 gpointer user_data)
571 {
572 if (gtk_toggle_button_get_active(togglebutton))
573 sort_window_set_pm_sort (SORT_DESCENDING);
574 }
575
576
577 G_MODULE_EXPORT void
on_pm_none_toggled(GtkToggleButton * togglebutton,gpointer user_data)578 on_pm_none_toggled (GtkToggleButton *togglebutton,
579 gpointer user_data)
580 {
581 if (gtk_toggle_button_get_active(togglebutton))
582 sort_window_set_pm_sort (SORT_NONE);
583 }
584
585
586 G_MODULE_EXPORT void
on_tm_ascend_toggled(GtkToggleButton * togglebutton,gpointer user_data)587 on_tm_ascend_toggled (GtkToggleButton *togglebutton,
588 gpointer user_data)
589 {
590 if (gtk_toggle_button_get_active(togglebutton))
591 sort_window_set_tm_sort (SORT_ASCENDING);
592 }
593
594
595 G_MODULE_EXPORT void
on_tm_descend_toggled(GtkToggleButton * togglebutton,gpointer user_data)596 on_tm_descend_toggled (GtkToggleButton *togglebutton,
597 gpointer user_data)
598 {
599 if (gtk_toggle_button_get_active(togglebutton))
600 sort_window_set_tm_sort (SORT_DESCENDING);
601 }
602
603
604 G_MODULE_EXPORT void
on_tm_none_toggled(GtkToggleButton * togglebutton,gpointer user_data)605 on_tm_none_toggled (GtkToggleButton *togglebutton,
606 gpointer user_data)
607 {
608 if (gtk_toggle_button_get_active(togglebutton))
609 sort_window_set_tm_sort (SORT_NONE);
610 }
611
612 G_MODULE_EXPORT void
on_tm_autostore_toggled(GtkToggleButton * togglebutton,gpointer user_data)613 on_tm_autostore_toggled (GtkToggleButton *togglebutton,
614 gpointer user_data)
615 {
616 sort_window_set_tm_autostore (gtk_toggle_button_get_active(togglebutton));
617 }
618
619
620 G_MODULE_EXPORT void
on_sort_case_sensitive_toggled(GtkToggleButton * togglebutton,gpointer user_data)621 on_sort_case_sensitive_toggled (GtkToggleButton *togglebutton,
622 gpointer user_data)
623 {
624 sort_window_set_case_sensitive(
625 gtk_toggle_button_get_active(togglebutton));
626 }
627
628
629 G_MODULE_EXPORT void
on_sort_apply_clicked(GtkButton * button,gpointer user_data)630 on_sort_apply_clicked (GtkButton *button,
631 gpointer user_data)
632 {
633 sort_window_apply ();
634 }
635
636
637 G_MODULE_EXPORT void
on_sort_cancel_clicked(GtkButton * button,gpointer user_data)638 on_sort_cancel_clicked (GtkButton *button,
639 gpointer user_data)
640 {
641 sort_window_cancel ();
642 }
643
644
645 G_MODULE_EXPORT void
on_sort_ok_clicked(GtkButton * button,gpointer user_data)646 on_sort_ok_clicked (GtkButton *button,
647 gpointer user_data)
648 {
649 sort_window_ok ();
650 }
651
652
653 G_MODULE_EXPORT gboolean
on_sort_window_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)654 on_sort_window_delete_event (GtkWidget *widget,
655 GdkEvent *event,
656 gpointer user_data)
657 {
658 sort_window_delete ();
659 return FALSE;
660 }
661
662
663
664 /**
665 * sort_window_cancel
666 * UI has requested sort prefs changes be ignored -- write back the
667 * original values
668 */
sort_window_cancel(void)669 void sort_window_cancel (void)
670 {
671 /* close the window */
672 if(sort_window)
673 gtk_widget_destroy(sort_window);
674 sort_window = NULL;
675 }
676
677 /* when window is deleted, we keep the currently applied prefs */
sort_window_delete(void)678 void sort_window_delete(void)
679 {
680 temp_prefs_destroy(sort_temp_prefs);
681 sort_temp_prefs = NULL;
682 temp_lists_destroy(sort_temp_lists);
683 sort_temp_lists = NULL;
684
685 /* close the window */
686 if(sort_window)
687 {
688 gint *tm_listed_order;
689 tm_listed_order = g_object_get_data (G_OBJECT (sort_window), "tm_listed_order");
690 g_warn_if_fail (tm_listed_order);
691 g_free (tm_listed_order);
692 gtk_widget_destroy(sort_window);
693 }
694 sort_window = NULL;
695 }
696
697 /* apply the current settings and close the window */
sort_window_ok(void)698 void sort_window_ok (void)
699 {
700 /* update the sort ignore strings */
701 sort_window_read_sort_ign ();
702
703 temp_prefs_apply(sort_temp_prefs);
704 temp_lists_apply(sort_temp_lists);
705
706 /* save current settings */
707 sort_window_set ();
708
709 /* close the window */
710 if(sort_window)
711 gtk_widget_destroy(sort_window);
712 sort_window = NULL;
713 }
714
715
716 /* apply the current settings, don't close the window */
sort_window_apply(void)717 void sort_window_apply (void)
718 {
719 /* update the sort ignore strings */
720 sort_window_read_sort_ign ();
721
722 temp_prefs_apply(sort_temp_prefs);
723 temp_lists_apply(sort_temp_lists);
724
725 /* save current settings */
726 sort_window_set ();
727 }
728
sort_window_set_tm_autostore(gboolean val)729 void sort_window_set_tm_autostore (gboolean val)
730 {
731 temp_prefs_set_int(sort_temp_prefs, "tm_autostore", val);
732 }
733
sort_window_set_pm_sort(gint val)734 void sort_window_set_pm_sort (gint val)
735 {
736 temp_prefs_set_int(sort_temp_prefs, "pm_sort", val);
737 }
738
sort_window_set_st_sort(gint val)739 void sort_window_set_st_sort (gint val)
740 {
741 temp_prefs_set_int(sort_temp_prefs, "st_sort", val);
742 }
743
sort_window_set_tm_sort(gint val)744 void sort_window_set_tm_sort (gint val)
745 {
746 temp_prefs_set_int(sort_temp_prefs, "tm_sort", val);
747 }
748
sort_window_set_case_sensitive(gboolean val)749 void sort_window_set_case_sensitive (gboolean val)
750 {
751 temp_prefs_set_int(sort_temp_prefs, "case_sensitive",
752 val);
753 }
754