Allow the copy of file paths to clipboard.
[geeqie.git] / src / typedefs.h
1 /*
2  * Geeqie
3  * (C) 2006 John Ellis
4  * Copyright (C) 2008 The Geeqie Team
5  *
6  * Author: John Ellis
7  *
8  * This software is released under the GNU General Public License (GNU GPL).
9  * Please read the included file COPYING for more information.
10  * This software comes with no warranty of any kind, use at your own risk!
11  */
12
13
14 #ifndef TYPEDEFS_H
15 #define TYPEDEFS_H
16
17 typedef enum {
18         MOUSE_BUTTON_LEFT       = 1,
19         MOUSE_BUTTON_MIDDLE     = 2,
20         MOUSE_BUTTON_RIGHT      = 3,
21         MOUSE_BUTTON_WHEEL_UP   = 4,
22         MOUSE_BUTTON_WHEEL_DOWN = 5
23 } MouseButton;
24
25 typedef enum {
26         DIRVIEW_LIST,
27         DIRVIEW_TREE
28 } DirViewType;
29
30 typedef enum {
31         CMD_COPY = GQ_EDITOR_GENERIC_SLOTS,
32         CMD_MOVE,
33         CMD_RENAME,
34         CMD_DELETE,
35         CMD_FOLDER,
36         GQ_EDITOR_SLOTS
37 } SpecialEditor;
38
39 typedef enum {
40         SORT_NONE,
41         SORT_NAME,
42         SORT_SIZE,
43         SORT_TIME,
44         SORT_PATH,
45         SORT_NUMBER
46 } SortType;
47
48 typedef enum {
49         ALTER_NONE,             /* do nothing */
50         ALTER_ROTATE_90,
51         ALTER_ROTATE_90_CC,     /* counterclockwise */
52         ALTER_ROTATE_180,
53         ALTER_MIRROR,
54         ALTER_FLIP,
55         ALTER_DESATURATE
56 } AlterType;
57
58 typedef enum {
59         LAYOUT_HIDE   = 0,
60         LAYOUT_LEFT   = 1 << 0,
61         LAYOUT_RIGHT  = 1 << 1,
62         LAYOUT_TOP    = 1 << 2,
63         LAYOUT_BOTTOM = 1 << 3
64 } LayoutLocation;
65
66
67 typedef enum {
68         IMAGE_STATE_NONE        = 0,
69         IMAGE_STATE_IMAGE       = 1 << 0,
70         IMAGE_STATE_LOADING     = 1 << 1,
71         IMAGE_STATE_ERROR       = 1 << 2,
72         IMAGE_STATE_COLOR_ADJ   = 1 << 3,
73         IMAGE_STATE_ROTATE_AUTO = 1 << 4,
74         IMAGE_STATE_ROTATE_USER = 1 << 5,
75         IMAGE_STATE_DELAY_FLIP  = 1 << 6
76 } ImageState;
77
78 typedef enum {
79         SPLIT_NONE = 0,
80         SPLIT_VERT,
81         SPLIT_HOR,
82         SPLIT_QUAD,
83 } ImageSplitMode;
84
85 typedef enum {
86         FILEDATA_CHANGE_DELETE,
87         FILEDATA_CHANGE_MOVE,
88         FILEDATA_CHANGE_RENAME,
89         FILEDATA_CHANGE_COPY
90 } FileDataChangeType;
91
92 typedef enum {
93         MTS_MODE_MINUS,
94         MTS_MODE_SET,
95         MTS_MODE_OR,
96         MTS_MODE_AND
97 } MarkToSelectionMode;
98
99 typedef enum {
100         STM_MODE_RESET,
101         STM_MODE_SET,
102         STM_MODE_TOGGLE
103 } SelectionToMarkMode;
104
105 typedef enum {
106         FORMAT_CLASS_UNKNOWN,
107         FORMAT_CLASS_IMAGE,
108         FORMAT_CLASS_RAWIMAGE,
109         FORMAT_CLASS_META,
110         FILE_FORMAT_CLASSES
111 } FileFormatClass;
112
113 typedef enum {
114         SS_ERR_NONE = 0,
115         SS_ERR_DISABLED, /**< secsave is disabled. */
116         SS_ERR_OUT_OF_MEM, /**< memory allocation failure */
117
118         /* see err field in SecureSaveInfo */
119         SS_ERR_OPEN_READ,
120         SS_ERR_OPEN_WRITE,
121         SS_ERR_STAT,
122         SS_ERR_ACCESS,
123         SS_ERR_MKSTEMP,
124         SS_ERR_RENAME,
125         SS_ERR_OTHER,
126 } SecureSaveErrno;
127
128
129 #define MAX_SPLIT_IMAGES 4
130
131 typedef struct _ImageLoader ImageLoader;
132 typedef struct _ThumbLoader ThumbLoader;
133
134 typedef struct _CollectInfo CollectInfo;
135 typedef struct _CollectionData CollectionData;
136 typedef struct _CollectTable CollectTable;
137 typedef struct _CollectWindow CollectWindow;
138
139 typedef struct _ImageWindow ImageWindow;
140
141 typedef struct _FileData FileData;
142 typedef struct _FileDataChangeInfo FileDataChangeInfo;
143
144 typedef struct _LayoutWindow LayoutWindow;
145 typedef struct _ViewDir ViewDir;
146 typedef struct _ViewDirInfoList ViewDirInfoList;
147 typedef struct _ViewDirInfoTree ViewDirInfoTree;
148 typedef struct _ViewFileList ViewFileList;
149 typedef struct _ViewFileIcon ViewFileIcon;
150
151 typedef struct _SlideShowData SlideShowData;
152 typedef struct _FullScreenData FullScreenData;
153
154 typedef struct _PixmapFolders PixmapFolders;
155 typedef struct _Histogram Histogram;
156
157 typedef struct _SecureSaveInfo SecureSaveInfo;
158
159 typedef struct _ConfOptions ConfOptions;
160
161 struct _ImageLoader
162 {
163         GdkPixbuf *pixbuf;
164         FileData *fd;
165         gchar *path;
166
167         gint bytes_read;
168         gint bytes_total;
169
170         gint requested_width;
171         gint requested_height;
172         gint shrunk;
173
174         gint done;
175         gint idle_id;
176         gint idle_priority;
177
178         GdkPixbufLoader *loader;
179         gint load_fd;
180
181         void (*func_area_ready)(ImageLoader *, guint x, guint y, guint w, guint h, gpointer);
182         void (*func_error)(ImageLoader *, gpointer);
183         void (*func_done)(ImageLoader *, gpointer);
184         void (*func_percent)(ImageLoader *, gdouble, gpointer);
185
186         gpointer data_area_ready;
187         gpointer data_error;
188         gpointer data_done;
189         gpointer data_percent;
190
191         gint idle_done_id;
192
193         guchar *read_buffer;
194         gint read_buffer_size;
195         gint idle_read_loop_count;
196 };
197
198 typedef void (* ThumbLoaderFunc)(ThumbLoader *tl, gpointer data);
199
200 struct _ThumbLoader
201 {
202         gint standard_loader;
203
204         GdkPixbuf *pixbuf;      /* contains final (scaled) image when done */
205         ImageLoader *il;
206         gchar *path;
207
208         gint cache_enable;
209         gint cache_hit;
210         gdouble percent_done;
211
212         gint max_w;
213         gint max_h;
214
215         ThumbLoaderFunc func_done;
216         ThumbLoaderFunc func_error;
217         ThumbLoaderFunc func_progress;
218
219         gpointer data;
220
221         gint idle_done_id;
222 };
223
224 struct _CollectInfo
225 {
226         FileData *fd;
227         GdkPixbuf *pixbuf;
228         gint flag_mask;
229 };
230
231 struct _CollectionData
232 {
233         gchar *path;
234         gchar *name;
235         GList *list;
236         SortType sort_method;
237
238         ThumbLoader *thumb_loader;
239         CollectInfo *thumb_info;
240
241         void (*info_updated_func)(CollectionData *, CollectInfo *, gpointer);
242         gpointer info_updated_data;
243
244         gint ref;
245
246         /* geometry */
247         gint window_read;
248         gint window_x;
249         gint window_y;
250         gint window_w;
251         gint window_h;
252
253         /* contents changed since save flag */
254         gint changed;
255
256         GHashTable *existence;
257 };
258
259 struct _CollectTable
260 {
261         GtkWidget *scrolled;
262         GtkWidget *listview;
263         gint columns;
264         gint rows;
265
266         CollectionData *cd;
267
268         GList *selection;
269         CollectInfo *prev_selection;
270
271         CollectInfo *click_info;
272
273         GtkWidget *tip_window;
274         gint tip_delay_id;
275         CollectInfo *tip_info;
276
277         GdkWindow *marker_window;
278         CollectInfo *marker_info;
279
280         GtkWidget *status_label;
281         GtkWidget *extra_label;
282
283         gint focus_row;
284         gint focus_column;
285         CollectInfo *focus_info;
286
287         GtkWidget *popup;
288         CollectInfo *drop_info;
289         GList *drop_list;
290
291         gint sync_idle_id;
292         gint drop_idle_id;
293
294         gint show_text;
295 };
296
297 struct _CollectWindow
298 {
299         GtkWidget *window;
300         CollectTable *table;
301         GtkWidget *status_box;
302         GList *list;
303
304         GtkWidget *close_dialog;
305
306         CollectionData *cd;
307 };
308
309 typedef gint (* ImageTileRequestFunc)(ImageWindow *imd, gint x, gint y,
310                                       gint width, gint height, GdkPixbuf *pixbuf, gpointer);
311 typedef void (* ImageTileDisposeFunc)(ImageWindow *imd, gint x, gint y,
312                                       gint width, gint height, GdkPixbuf *pixbuf, gpointer);
313
314 struct _ImageWindow
315 {
316         GtkWidget *widget;      /* use this to add it and show it */
317         GtkWidget *pr;
318         GtkWidget *frame;
319
320         FileData *image_fd;
321
322         gint64 size;            /* file size (bytes) */
323         time_t mtime;           /* file modified time stamp */
324         gint unknown;           /* failed to load image */
325
326         ImageLoader *il;
327
328         gint has_frame;
329
330         /* top level (not necessarily parent) window */
331         gint top_window_sync;   /* resize top_window when image dimensions change */
332         GtkWidget *top_window;  /* window that gets title, and window to resize when 'fitting' */
333         gchar *title;           /* window title to display left of file name */
334         gchar *title_right;     /* window title to display right of file name */
335         gint title_show_zoom;   /* option to include zoom in window title */
336
337         gint completed;
338         ImageState state;       /* mask of IMAGE_STATE_* flags about current image */
339
340         void (*func_update)(ImageWindow *imd, gpointer data);
341         void (*func_complete)(ImageWindow *imd, gint preload, gpointer data);
342         void (*func_state)(ImageWindow *imd, ImageState state, gpointer data);
343         ImageTileRequestFunc func_tile_request;
344         ImageTileDisposeFunc func_tile_dispose;
345
346         gpointer data_update;
347         gpointer data_complete;
348         gpointer data_state;
349         gpointer data_tile;
350
351         /* button, scroll functions */
352         void (*func_button)(ImageWindow *, gint button,
353                             guint32 time, gdouble x, gdouble y, guint state, gpointer);
354         void (*func_drag)(ImageWindow *, gint button,
355                             guint32 time, gdouble x, gdouble y, guint state, gdouble dx, gdouble dy,gpointer);
356         void (*func_scroll)(ImageWindow *, GdkScrollDirection direction,
357                             guint32 time, gdouble x, gdouble y, guint state, gpointer);
358
359         gpointer data_button;
360         gpointer data_drag;
361         gpointer data_scroll;
362
363         /* scroll notification (for scroll bar implementation) */
364         void (*func_scroll_notify)(ImageWindow *, gint x, gint y, gint width, gint height, gpointer);
365
366         gpointer data_scroll_notify;
367
368         /* collection info */
369         CollectionData *collection;
370         CollectInfo *collection_info;
371
372         /* color profiles */
373         gint color_profile_enable;
374         gint color_profile_input;
375         gint color_profile_screen;
376         gint color_profile_use_image;
377         gint color_profile_from_image;
378         gpointer cm;
379
380         /* histogram */
381         gint histogram_enabled;
382         Histogram *histogram;
383
384         AlterType delay_alter_type;
385
386         ImageLoader *read_ahead_il;
387         GdkPixbuf *read_ahead_pixbuf;
388         FileData *read_ahead_fd;
389
390         GdkPixbuf *prev_pixbuf;
391         FileData *prev_fd;
392         gint prev_color_row;
393
394         gint auto_refresh_id;
395         gint auto_refresh_interval;
396
397         gint delay_flip;
398         gint orientation;
399         gint desaturate;
400
401         gint overlay_show_zoom; /* set to true if overlay is showing zoom ratio */
402 };
403
404 #define FILEDATA_MARKS_SIZE 6
405
406 struct _FileDataChangeInfo {
407         FileDataChangeType type;
408         gchar *source;
409         gchar *dest;
410 };
411
412 struct _FileData {
413         gint magick;
414         gint type;
415         gchar *original_path; /* key to file_data_pool hash table */
416         gchar *path;
417         const gchar *name;
418         const gchar *extension;
419         gint64 size;
420         time_t date;
421         gboolean marks[FILEDATA_MARKS_SIZE];
422         GList *sidecar_files;
423         FileData *parent; /* parent file if this is a sidecar file, NULL otherwise */
424         FileDataChangeInfo *change; /* for rename, move ... */
425         GdkPixbuf *pixbuf;
426         gint ref;
427         gint user_orientation;
428         gint exif_orientation;
429 };
430
431 struct _LayoutWindow
432 {
433         gchar *path;
434
435         /* base */
436
437         GtkWidget *window;
438
439         GtkWidget *main_box;
440
441         GtkWidget *group_box;
442         GtkWidget *h_pane;
443         GtkWidget *v_pane;
444
445         /* menus, path selector */
446
447         GtkActionGroup *action_group;
448         GtkUIManager *ui_manager;
449
450         GtkWidget *path_entry;
451
452         /* image */
453
454         LayoutLocation image_location;
455
456         ImageWindow *image;
457
458         ImageWindow *split_images[MAX_SPLIT_IMAGES];
459         ImageSplitMode split_mode;
460         gint active_split_image;
461
462         GtkWidget *split_image_widget;
463
464         gint connect_zoom, connect_scroll;
465
466         /* tools window (float) */
467
468         GtkWidget *tools;
469         GtkWidget *tools_pane;
470
471         gint tools_float;
472         gint tools_hidden;
473
474         /* toolbar */
475
476         GtkWidget *toolbar;
477         gint toolbar_hidden;
478
479         GtkWidget *thumb_button;
480         gint thumbs_enabled;
481         gint marks_enabled;
482
483         /* dir view */
484
485         LayoutLocation dir_location;
486
487         ViewDir *vd;
488         GtkWidget *dir_view;
489
490         DirViewType dir_view_type;
491
492         /* file view */
493
494         LayoutLocation file_location;
495
496         ViewFileList *vfl;
497         ViewFileIcon *vfi;
498         GtkWidget *file_view;
499
500         gint icon_view;
501         SortType sort_method;
502         gint sort_ascend;
503
504         /* status bar */
505
506         GtkWidget *info_box;
507         GtkWidget *info_progress_bar;
508         GtkWidget *info_sort;
509         GtkWidget *info_color;
510         GtkWidget *info_status;
511         GtkWidget *info_details;
512         GtkWidget *info_zoom;
513
514         /* slide show */
515
516         SlideShowData *slideshow;
517
518         /* full screen */
519
520         FullScreenData *full_screen;
521
522         /* dividers */
523
524         gint div_h;
525         gint div_v;
526         gint div_float;
527
528         /* directory update check */
529
530         gint last_time_id;
531         time_t last_time;
532
533         /* misc */
534
535         GtkWidget *utility_box;
536         GtkWidget *bar_sort;
537         GtkWidget *bar_exif;
538         GtkWidget *bar_info;
539
540         gint bar_sort_enabled;
541         gint bar_exif_enabled;
542         gint bar_info_enabled;
543
544         gint bar_exif_width;
545         gint bar_exif_advanced;
546         gint bar_info_width;
547 };
548
549 struct _ViewDir
550 {
551         DirViewType type;
552         gpointer info;
553
554         GtkWidget *widget;
555         GtkWidget *view;
556
557         gchar *path;
558
559         FileData *click_fd;
560
561         FileData *drop_fd;
562         GList *drop_list;
563         gint drop_scroll_id;
564
565         /* func list */
566         void (*select_func)(ViewDir *vd, const gchar *path, gpointer data);
567         gpointer select_data;
568
569         void (*dnd_drop_update_func)(ViewDir *vd);
570         void (*dnd_drop_leave_func)(ViewDir *vd);
571
572         LayoutWindow *layout;
573
574         GtkWidget *popup;
575
576         PixmapFolders *pf;
577 };
578
579 struct _ViewDirInfoList
580 {
581         GList *list;
582 };
583
584 struct _ViewDirInfoTree
585 {
586         gint drop_expand_id;
587         gint busy_ref;
588 };
589
590 struct _ViewFileList
591 {
592         GtkWidget *widget;
593         GtkWidget *listview;
594
595         gchar *path;
596         GList *list;
597
598         SortType sort_method;
599         gint sort_ascend;
600
601         FileData *click_fd;
602         FileData *select_fd;
603
604         gint thumbs_enabled;
605         gint marks_enabled;
606         gint active_mark;
607
608         /* thumb updates */
609         gint thumbs_running;
610         gint thumbs_count;
611         ThumbLoader *thumbs_loader;
612         FileData *thumbs_filedata;
613
614         /* func list */
615         void (*func_thumb_status)(ViewFileList *vfl, gdouble val, const gchar *text, gpointer data);
616         gpointer data_thumb_status;
617
618         void (*func_status)(ViewFileList *vfl, gpointer data);
619         gpointer data_status;
620
621         gint select_idle_id;
622         LayoutWindow *layout;
623
624         GtkWidget *popup;
625 };
626
627 struct _IconData;
628
629 struct _ViewFileIcon
630 {
631         GtkWidget *widget;
632         GtkWidget *listview;
633
634         gchar *path;
635         GList *list;
636
637         /* table stuff */
638
639         gint columns;
640         gint rows;
641
642         GList *selection;
643         struct _IconData *prev_selection;
644
645         GtkWidget *tip_window;
646         gint tip_delay_id;
647         struct _IconData *tip_id;
648
649         struct _IconData *click_id;
650
651         struct _IconData *focus_id;
652         gint focus_row;
653         gint focus_column;
654
655         SortType sort_method;
656         gint sort_ascend;
657
658         gint show_text;
659
660         gint sync_idle_id;
661
662         /* thumbs */
663
664         gint thumbs_running;
665         GList *thumbs_list;
666         gint thumbs_count;
667         ThumbLoader *thumbs_loader;
668         FileData *thumbs_fd;
669
670         /* func list */
671         void (*func_thumb_status)(ViewFileIcon *vfi, gdouble val, const gchar *text, gpointer data);
672         gpointer data_thumb_status;
673
674         void (*func_status)(ViewFileIcon *vfi, gpointer data);
675         gpointer data_status;
676
677         LayoutWindow *layout;
678
679         GtkWidget *popup;
680 };
681
682 struct _SlideShowData
683 {
684         ImageWindow *imd;
685
686         GList *filelist;
687         CollectionData *cd;
688         gchar *layout_path;
689         LayoutWindow *layout;
690
691         GList *list;
692         GList *list_done;
693
694         FileData *slide_fd;
695
696         gint slide_count;
697         gint timeout_id;
698
699         gint from_selection;
700
701         void (*stop_func)(SlideShowData *, gpointer);
702         gpointer stop_data;
703
704         gint paused;
705 };
706
707 struct _FullScreenData
708 {
709         GtkWidget *window;
710         ImageWindow *imd;
711
712         GtkWidget *normal_window;
713         ImageWindow *normal_imd;
714
715         gint hide_mouse_id;
716         gint busy_mouse_id;
717         gint cursor_state;
718
719         gint saver_block_id;
720
721         void (*stop_func)(FullScreenData *, gpointer);
722         gpointer stop_data;
723 };
724
725 struct _PixmapFolders
726 {
727         GdkPixbuf *close;
728         GdkPixbuf *open;
729         GdkPixbuf *deny;
730         GdkPixbuf *parent;
731 };
732
733 struct _SecureSaveInfo {
734         FILE *fp; /**< file stream pointer */
735         gchar *file_name; /**< final file name */
736         gchar *tmp_file_name; /**< temporary file name */
737         gint err; /**< set to non-zero value in case of error */
738         gint secure_save; /**< use secure save for this file, internal use only */
739         gint preserve_perms; /**< whether to preserve perms, TRUE by default */
740         gint preserve_mtime; /**< whether to preserve mtime, FALSE by default */
741         gint unlink_on_error; /**< whether to remove temporary file on save failure, TRUE by default */
742 };
743
744 struct _ConfOptions
745 {
746
747         /* ui */
748         gint progressive_key_scrolling;
749         gint place_dialogs_under_mouse;
750         gint mousewheel_scrolls;
751         gint show_icon_names;
752         gint show_copy_path;
753
754         /* various */
755         gint startup_path_enable;
756         gchar *startup_path;
757         gint enable_metadata_dirs;
758
759         gint tree_descend_subdirs;
760
761         gint lazy_image_sync;
762         gint update_on_time_change;
763
764         gint duplicates_similarity_threshold;
765
766         gint open_recent_list_maxsize;
767         gint dnd_icon_size;
768
769         /* file ops */
770         struct {
771                 gint enable_in_place_rename;
772
773                 gint confirm_delete;
774                 gint enable_delete_key;
775                 gint safe_delete_enable;
776                 gchar *safe_delete_path;
777                 gint safe_delete_folder_maxsize;
778         } file_ops;
779
780         /* image */
781         struct {
782                 gint exif_rotate_enable;
783                 gint scroll_reset_method;
784                 gint fit_window_to_image;
785                 gint limit_window_size;
786                 gint max_window_size;
787                 gint limit_autofit_size;
788                 gint max_autofit_size;
789
790                 gint tile_cache_max;    /* in megabytes */
791                 gint dither_quality;
792                 gint enable_read_ahead;
793
794                 gint zoom_mode;
795                 gint zoom_2pass;
796                 gint zoom_to_fit_allow_expand;
797                 gint zoom_quality;
798                 gint zoom_increment;    /* 10 is 1.0, 5 is 0.05, 20 is 2.0, etc. */
799
800                 gint use_custom_border_color;
801                 GdkColor border_color;
802
803                 gint read_buffer_size; /* bytes to read from file per read() */
804                 gint idle_read_loop_count; /* the number of bytes to read per idle call (define x image.read_buffer_size) */
805         } image;
806
807         /* thumbnails */
808         struct {
809                 gint max_width;
810                 gint max_height;
811                 gint enable_caching;
812                 gint cache_into_dirs;
813                 gint fast;
814                 gint use_xvpics;
815                 gint spec_standard;
816                 gint quality;
817         } thumbnails;
818
819         /* file filtering */
820         struct {
821                 gint show_hidden_files;
822                 gint show_dot_directory;
823                 gint disable;
824         } file_filter;
825
826         /* collections */
827         struct {
828                 gint rectangular_selection;
829         } collections;
830
831         /* editors */
832         gchar *editor_name[GQ_EDITOR_SLOTS];
833         gchar *editor_command[GQ_EDITOR_SLOTS];
834
835         /* file sorting */
836         struct {
837                 SortType method;
838                 gint ascending;
839                 gint case_sensitive; /* file sorting method (case) */
840         } file_sort;
841
842         /* slideshow */
843         struct {
844                 gint delay;     /* in tenths of a second */
845                 gint random;
846                 gint repeat;
847         } slideshow;
848
849         /* fullscreen */
850         struct {
851                 gint screen;
852                 gint clean_flip;
853                 gint disable_saver;
854                 gint above;
855         } fullscreen;
856
857         /* image overlay */
858         struct {
859                 struct {
860                         gint enabled;
861                         gint show_at_startup;
862                         gchar *template_string;
863                 } common;
864         } image_overlay;
865
866         /* layout */
867         struct {
868                 gchar *order;
869                 gint style;
870
871                 gint view_as_icons;
872                 DirViewType dir_view_type;
873
874                 gint show_thumbnails;
875                 gint show_marks;
876
877                 struct {
878                         gint w;
879                         gint h;
880                         gint x;
881                         gint y;
882                         gint maximized;
883                         gint hdivider_pos;
884                         gint vdivider_pos;
885                 } main_window;
886
887                 struct {
888                         gint w;
889                         gint h;
890                         gint x;
891                         gint y;
892                         gint vdivider_pos;
893                 } float_window;
894
895                 gint save_window_positions;
896
897                 gint tools_float;
898                 gint tools_hidden;
899                 gint tools_restore_state;
900
901                 gint toolbar_hidden;
902
903         } layout;
904
905         /* panels */
906         struct {
907                 struct {
908                         gint enabled;
909                         gint width;
910                 } info;
911
912                 struct {
913                         gint enabled;
914                         gint width;
915                 } exif;
916
917                 struct {
918                         gint enabled;
919                         gint mode_state;
920                         gint action_state;
921                         gint selection_state;
922                 } sort;
923         } panels;
924
925
926         /* color profiles */
927         struct {
928                 gint enabled;
929                 gint input_type;
930                 gchar *input_file[COLOR_PROFILE_INPUTS];
931                 gchar *input_name[COLOR_PROFILE_INPUTS];
932                 gint screen_type;
933                 gchar *screen_file;
934                 gint use_image;
935
936         } color_profile;
937
938 };
939
940 #endif