1 /* 2 * Copyright (C) 2006 John Ellis 3 * Copyright (C) 2008 - 2016 The Geeqie Team 4 * 5 * Author: John Ellis 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; if not, write to the Free Software Foundation, Inc., 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 20 */ 21 22 #ifndef TYPEDEFS_H 23 #define TYPEDEFS_H 24 25 typedef enum { 26 ZOOM_RESET_ORIGINAL = 0, 27 ZOOM_RESET_FIT_WINDOW = 1, 28 ZOOM_RESET_NONE = 2 29 } ZoomMode; 30 31 typedef enum { 32 PRIMARY = 0, 33 CLIPBOARD = 1, 34 } ClipboardSelection; 35 36 typedef enum { 37 MOUSE_BUTTON_LEFT = 1, 38 MOUSE_BUTTON_MIDDLE = 2, 39 MOUSE_BUTTON_RIGHT = 3, 40 MOUSE_BUTTON_WHEEL_UP = 4, 41 MOUSE_BUTTON_WHEEL_DOWN = 5, 42 MOUSE_BUTTON_8 = 8, 43 MOUSE_BUTTON_9 = 9 44 } MouseButton; 45 46 typedef enum { 47 DIRVIEW_LIST, 48 DIRVIEW_TREE, 49 50 // Keep this up to date! 51 DIRVIEW_LAST = DIRVIEW_TREE 52 } DirViewType; 53 54 typedef enum { 55 FILEVIEW_LIST, 56 FILEVIEW_ICON, 57 58 // Keep this up to date! 59 FILEVIEW_LAST = FILEVIEW_ICON 60 } FileViewType; 61 62 #define CMD_COPY "geeqie-copy-command.desktop" 63 #define CMD_MOVE "geeqie-move-command.desktop" 64 #define CMD_RENAME "geeqie-rename-command.desktop" 65 #define CMD_DELETE "geeqie-delete-command.desktop" 66 #define CMD_FOLDER "geeqie-folder-command.desktop" 67 68 typedef enum { 69 SORT_NONE, 70 SORT_NAME, 71 SORT_SIZE, 72 SORT_TIME, 73 SORT_CTIME, 74 SORT_PATH, 75 SORT_NUMBER, 76 SORT_EXIFTIME, 77 SORT_EXIFTIMEDIGITIZED, 78 SORT_RATING, 79 SORT_CLASS 80 } SortType; 81 82 /* drag and drop default action */ 83 typedef enum { 84 DND_ACTION_ASK, 85 DND_ACTION_COPY, 86 DND_ACTION_MOVE 87 } DnDAction; 88 89 typedef enum { 90 ALTER_NONE, /* do nothing */ 91 ALTER_ROTATE_90, 92 ALTER_ROTATE_90_CC, /* counterclockwise */ 93 ALTER_ROTATE_180, 94 ALTER_MIRROR, 95 ALTER_FLIP, 96 } AlterType; 97 98 typedef enum { 99 LAYOUT_HIDE = 0, 100 LAYOUT_LEFT = 1 << 0, 101 LAYOUT_RIGHT = 1 << 1, 102 LAYOUT_TOP = 1 << 2, 103 LAYOUT_BOTTOM = 1 << 3 104 } LayoutLocation; 105 106 107 typedef enum { 108 IMAGE_STATE_NONE = 0, 109 IMAGE_STATE_IMAGE = 1 << 0, 110 IMAGE_STATE_LOADING = 1 << 1, 111 IMAGE_STATE_ERROR = 1 << 2, 112 IMAGE_STATE_COLOR_ADJ = 1 << 3, 113 IMAGE_STATE_ROTATE_AUTO = 1 << 4, 114 IMAGE_STATE_ROTATE_USER = 1 << 5, 115 IMAGE_STATE_DELAY_FLIP = 1 << 6 116 } ImageState; 117 118 typedef enum { 119 SPLIT_NONE = 0, 120 SPLIT_VERT, 121 SPLIT_HOR, 122 SPLIT_QUAD, 123 } ImageSplitMode; 124 125 typedef enum { 126 FILEDATA_CHANGE_DELETE, 127 FILEDATA_CHANGE_MOVE, 128 FILEDATA_CHANGE_RENAME, 129 FILEDATA_CHANGE_COPY, 130 FILEDATA_CHANGE_UNSPECIFIED, 131 FILEDATA_CHANGE_WRITE_METADATA 132 } FileDataChangeType; 133 134 typedef enum { 135 MTS_MODE_MINUS, 136 MTS_MODE_SET, 137 MTS_MODE_OR, 138 MTS_MODE_AND 139 } MarkToSelectionMode; 140 141 typedef enum { 142 STM_MODE_RESET, 143 STM_MODE_SET, 144 STM_MODE_TOGGLE 145 } SelectionToMarkMode; 146 147 typedef enum { 148 FORMAT_CLASS_UNKNOWN, 149 FORMAT_CLASS_IMAGE, 150 FORMAT_CLASS_RAWIMAGE, 151 FORMAT_CLASS_META, 152 FORMAT_CLASS_VIDEO, 153 FORMAT_CLASS_COLLECTION, 154 FORMAT_CLASS_DOCUMENT, 155 FILE_FORMAT_CLASSES 156 } FileFormatClass; 157 158 /* defined in preferences.c */ 159 extern gchar *format_class_list[]; 160 161 typedef enum { 162 SS_ERR_NONE = 0, 163 SS_ERR_DISABLED, /**< secsave is disabled. */ 164 SS_ERR_OUT_OF_MEM, /**< memory allocation failure */ 165 166 /* see err field in SecureSaveInfo */ 167 SS_ERR_OPEN_READ, 168 SS_ERR_OPEN_WRITE, 169 SS_ERR_STAT, 170 SS_ERR_ACCESS, 171 SS_ERR_MKSTEMP, 172 SS_ERR_RENAME, 173 SS_ERR_OTHER, 174 } SecureSaveErrno; 175 176 typedef enum { 177 NOTIFY_PRIORITY_HIGH = 0, 178 NOTIFY_PRIORITY_MEDIUM, 179 NOTIFY_PRIORITY_LOW 180 } NotifyPriority; 181 182 typedef enum { 183 NOTIFY_MARKS = 1 << 1, /* changed marks */ 184 NOTIFY_PIXBUF = 1 << 2, /* image was read into fd->pixbuf */ 185 NOTIFY_HISTMAP = 1 << 3, /* histmap was read into fd->histmap */ 186 NOTIFY_ORIENTATION = 1 << 4, /* image was rotated */ 187 NOTIFY_METADATA = 1 << 5, /* changed image metadata, not yet written */ 188 NOTIFY_GROUPING = 1 << 6, /* change in fd->sidecar_files or fd->parent */ 189 NOTIFY_REREAD = 1 << 7, /* changed file size, date, etc., file name remains unchanged */ 190 NOTIFY_CHANGE = 1 << 8 /* generic change described by fd->change */ 191 } NotifyType; 192 193 typedef enum { 194 CHANGE_OK = 0, 195 CHANGE_WARN_DEST_EXISTS = 1 << 0, 196 CHANGE_WARN_NO_WRITE_PERM = 1 << 1, 197 CHANGE_WARN_SAME = 1 << 2, 198 CHANGE_WARN_CHANGED_EXT = 1 << 3, 199 CHANGE_WARN_UNSAVED_META = 1 << 4, 200 CHANGE_WARN_NO_WRITE_PERM_DEST_DIR = 1 << 5, 201 CHANGE_ERROR_MASK = (~0U) << 8, /* the values below are fatal errors */ 202 CHANGE_NO_READ_PERM = 1 << 8, 203 CHANGE_NO_WRITE_PERM_DIR = 1 << 9, 204 CHANGE_NO_DEST_DIR = 1 << 10, 205 CHANGE_DUPLICATE_DEST = 1 << 11, 206 CHANGE_NO_WRITE_PERM_DEST = 1 << 12, 207 CHANGE_DEST_EXISTS = 1 << 13, 208 CHANGE_NO_SRC = 1 << 14, 209 CHANGE_GENERIC_ERROR = 1 << 16 210 } ChangeError; 211 212 typedef enum { 213 METADATA_PLAIN = 0, /* format that can be edited and written back */ 214 METADATA_FORMATTED = 1 /* for display only */ 215 } MetadataFormat; 216 217 typedef enum { 218 STARTUP_PATH_CURRENT = 0, 219 STARTUP_PATH_LAST, 220 STARTUP_PATH_HOME, 221 } StartUpPath; 222 223 typedef enum { 224 TOOLBAR_MAIN, 225 TOOLBAR_STATUS, 226 TOOLBAR_COUNT 227 } ToolbarType; 228 229 typedef enum { 230 PR_STEREO_NONE = 0, /* do nothing */ 231 PR_STEREO_DUAL = 1 << 0, /* independent stereo buffers, for example nvidia opengl */ 232 PR_STEREO_FIXED = 1 << 1, /* custom position */ 233 PR_STEREO_HORIZ = 1 << 2, /* side by side */ 234 PR_STEREO_VERT = 1 << 3, /* above below */ 235 PR_STEREO_RIGHT = 1 << 4, /* render right buffer */ 236 PR_STEREO_ANAGLYPH_RC = 1 << 5, /* anaglyph red-cyan */ 237 PR_STEREO_ANAGLYPH_GM = 1 << 6, /* anaglyph green-magenta */ 238 PR_STEREO_ANAGLYPH_YB = 1 << 7, /* anaglyph yellow-blue */ 239 PR_STEREO_ANAGLYPH_GRAY_RC = 1 << 8, /* anaglyph gray red-cyan*/ 240 PR_STEREO_ANAGLYPH_GRAY_GM = 1 << 9, /* anaglyph gray green-magenta */ 241 PR_STEREO_ANAGLYPH_GRAY_YB = 1 << 10, /* anaglyph gray yellow-blue */ 242 PR_STEREO_ANAGLYPH_DB_RC = 1 << 11, /* anaglyph dubois red-cyan */ 243 PR_STEREO_ANAGLYPH_DB_GM = 1 << 12, /* anaglyph dubois green-magenta */ 244 PR_STEREO_ANAGLYPH_DB_YB = 1 << 13, /* anaglyph dubois yellow-blue */ 245 PR_STEREO_ANAGLYPH = PR_STEREO_ANAGLYPH_RC | 246 PR_STEREO_ANAGLYPH_GM | 247 PR_STEREO_ANAGLYPH_YB | 248 PR_STEREO_ANAGLYPH_GRAY_RC | 249 PR_STEREO_ANAGLYPH_GRAY_GM | 250 PR_STEREO_ANAGLYPH_GRAY_YB | 251 PR_STEREO_ANAGLYPH_DB_RC | 252 PR_STEREO_ANAGLYPH_DB_GM | 253 PR_STEREO_ANAGLYPH_DB_YB, /* anaglyph mask */ 254 255 PR_STEREO_MIRROR_LEFT = 1 << 14, /* mirror */ 256 PR_STEREO_FLIP_LEFT = 1 << 15, /* flip */ 257 258 PR_STEREO_MIRROR_RIGHT = 1 << 16, /* mirror */ 259 PR_STEREO_FLIP_RIGHT = 1 << 17, /* flip */ 260 261 PR_STEREO_MIRROR = PR_STEREO_MIRROR_LEFT | PR_STEREO_MIRROR_RIGHT, /* mirror mask*/ 262 PR_STEREO_FLIP = PR_STEREO_FLIP_LEFT | PR_STEREO_FLIP_RIGHT, /* flip mask*/ 263 PR_STEREO_SWAP = 1 << 18, /* swap left and right buffers */ 264 PR_STEREO_TEMP_DISABLE = 1 << 19, /* temporarily disable stereo mode if source image is not stereo */ 265 PR_STEREO_HALF = 1 << 20 266 } PixbufRendererStereoMode; 267 268 typedef enum { 269 STEREO_PIXBUF_DEFAULT = 0, 270 STEREO_PIXBUF_SBS = 1, 271 STEREO_PIXBUF_CROSS = 2, 272 STEREO_PIXBUF_NONE = 3 273 } StereoPixbufData; 274 275 typedef enum { 276 BAR_SORT_MODE_FOLDER = 0, 277 BAR_SORT_MODE_COLLECTION, 278 BAR_SORT_MODE_COUNT 279 } SortModeType; 280 281 typedef enum { 282 BAR_SORT_COPY = 0, 283 BAR_SORT_MOVE, 284 BAR_SORT_FILTER, 285 BAR_SORT_ACTION_COUNT 286 } SortActionType; 287 288 typedef enum { 289 BAR_SORT_SELECTION_IMAGE = 0, 290 BAR_SORT_SELECTION_SELECTED, 291 BAR_SORT_SELECTION_COUNT 292 } SortSelectionType; 293 294 #define MAX_SPLIT_IMAGES 4 295 296 typedef enum { 297 SELECTION_NONE = 0, 298 SELECTION_SELECTED = 1 << 0, 299 SELECTION_PRELIGHT = 1 << 1, 300 SELECTION_FOCUS = 1 << 2 301 } SelectionType; 302 303 typedef struct _ImageLoader ImageLoader; 304 typedef struct _ThumbLoader ThumbLoader; 305 306 typedef struct _AnimationData AnimationData; 307 308 typedef struct _CollectInfo CollectInfo; 309 typedef struct _CollectionData CollectionData; 310 typedef struct _CollectTable CollectTable; 311 typedef struct _CollectWindow CollectWindow; 312 313 typedef struct _ImageWindow ImageWindow; 314 315 typedef struct _FileData FileData; 316 typedef struct _FileDataChangeInfo FileDataChangeInfo; 317 318 typedef struct _LayoutWindow LayoutWindow; 319 typedef struct _LayoutOptions LayoutOptions; 320 321 typedef struct _ViewDir ViewDir; 322 typedef struct _ViewDirInfoList ViewDirInfoList; 323 typedef struct _ViewDirInfoTree ViewDirInfoTree; 324 325 typedef struct _ViewFile ViewFile; 326 typedef struct _ViewFileInfoList ViewFileInfoList; 327 typedef struct _ViewFileInfoIcon ViewFileInfoIcon; 328 329 typedef struct _SlideShowData SlideShowData; 330 typedef struct _FullScreenData FullScreenData; 331 332 typedef struct _PixmapFolders PixmapFolders; 333 typedef struct _Histogram Histogram; 334 typedef struct _HistMap HistMap; 335 336 typedef struct _SecureSaveInfo SecureSaveInfo; 337 338 typedef struct _ExifData ExifData; 339 340 typedef struct _EditorDescription EditorDescription; 341 342 typedef struct _CommandLine CommandLine; 343 344 struct _Histogram { 345 gint histogram_channel; /* drawing mode for histogram */ 346 gint histogram_mode; /* logarithmical or not */ 347 guint vgrid; /* number of vertical divisions, 0 for none */ 348 guint hgrid; /* number of horizontal divisions, 0 for none */ 349 struct { 350 int R; /* red */ 351 int G; /* green */ 352 int B; /* blue */ 353 int A; /* alpha */ 354 } grid_color; /* grid color */ 355 356 }; 357 358 359 360 struct _ImageLoader; 361 362 typedef void (* ThumbLoaderFunc)(ThumbLoader *tl, gpointer data); 363 364 typedef void (* FileUtilDoneFunc)(gboolean success, const gchar *done_path, gpointer data); 365 366 struct _ThumbLoader 367 { 368 gboolean standard_loader; 369 370 ImageLoader *il; 371 FileData *fd; /* fd->pixbuf contains final (scaled) image when done */ 372 373 gboolean cache_enable; 374 gboolean cache_hit; 375 gdouble percent_done; 376 377 gint max_w; 378 gint max_h; 379 380 ThumbLoaderFunc func_done; 381 ThumbLoaderFunc func_error; 382 ThumbLoaderFunc func_progress; 383 384 gpointer data; 385 386 guint idle_done_id; /* event source id */ 387 }; 388 389 struct _AnimationData 390 { 391 ImageWindow *iw; 392 LayoutWindow *lw; 393 GdkPixbufAnimation *gpa; 394 GdkPixbufAnimationIter *iter; 395 GdkPixbuf *gpb; 396 FileData *data_adr; 397 guint delay; 398 gboolean valid; 399 GCancellable *cancellable; 400 GFile *in_file; 401 GFileInputStream *gfstream; 402 }; 403 404 struct _CollectInfo 405 { 406 FileData *fd; 407 GdkPixbuf *pixbuf; 408 guint flag_mask; 409 }; 410 411 struct _CollectionData 412 { 413 gchar *path; 414 gchar *name; 415 GList *list; 416 SortType sort_method; 417 418 ThumbLoader *thumb_loader; 419 CollectInfo *thumb_info; 420 421 void (*info_updated_func)(CollectionData *, CollectInfo *, gpointer); 422 gpointer info_updated_data; 423 424 gint ref; 425 426 /* geometry */ 427 gint window_read; 428 gint window_x; 429 gint window_y; 430 gint window_w; 431 gint window_h; 432 433 /* contents changed since save flag */ 434 gboolean changed; 435 436 GHashTable *existence; 437 }; 438 439 struct _CollectTable 440 { 441 GtkWidget *scrolled; 442 GtkWidget *listview; 443 gint columns; 444 gint rows; 445 446 CollectionData *cd; 447 448 GList *selection; 449 CollectInfo *prev_selection; 450 451 CollectInfo *click_info; 452 453 GtkWidget *tip_window; 454 guint tip_delay_id; /* event source id */ 455 CollectInfo *tip_info; 456 457 GdkWindow *marker_window; 458 CollectInfo *marker_info; 459 460 GtkWidget *status_label; 461 GtkWidget *extra_label; 462 463 gint focus_row; 464 gint focus_column; 465 CollectInfo *focus_info; 466 467 GtkWidget *popup; 468 CollectInfo *drop_info; 469 GList *drop_list; 470 471 guint sync_idle_id; /* event source id */ 472 guint drop_idle_id; /* event source id */ 473 474 gboolean show_text; 475 gboolean show_stars; 476 477 /* file list for edit menu */ 478 GList *editmenu_fd_list; 479 }; 480 481 struct _CollectWindow 482 { 483 GtkWidget *window; 484 CollectTable *table; 485 GtkWidget *status_box; 486 487 GtkWidget *close_dialog; 488 489 CollectionData *cd; 490 }; 491 492 typedef gint (* ImageTileRequestFunc)(ImageWindow *imd, gint x, gint y, 493 gint width, gint height, GdkPixbuf *pixbuf, gpointer); 494 typedef void (* ImageTileDisposeFunc)(ImageWindow *imd, gint x, gint y, 495 gint width, gint height, GdkPixbuf *pixbuf, gpointer); 496 497 struct _ImageWindow 498 { 499 GtkWidget *widget; /* use this to add it and show it */ 500 GtkWidget *pr; 501 GtkWidget *frame; 502 503 FileData *image_fd; 504 505 gboolean unknown; /* failed to load image */ 506 507 ImageLoader *il; /* FIXME - image loader should probably go to FileData, but it must first support 508 sending callbacks to multiple ImageWindows in parallel */ 509 510 gint has_frame; /* not boolean, see image_new() */ 511 512 /* top level (not necessarily parent) window */ 513 gboolean top_window_sync; /* resize top_window when image dimensions change */ 514 GtkWidget *top_window; /* window that gets title, and window to resize when 'fitting' */ 515 gchar *title; /* window title to display left of file name */ 516 gchar *title_right; /* window title to display right of file name */ 517 gboolean title_show_zoom; /* option to include zoom in window title */ 518 519 gboolean completed; 520 ImageState state; /* mask of IMAGE_STATE_* flags about current image */ 521 522 void (*func_update)(ImageWindow *imd, gpointer data); 523 void (*func_complete)(ImageWindow *imd, gint preload, gpointer data); 524 void (*func_state)(ImageWindow *imd, ImageState state, gpointer data); 525 ImageTileRequestFunc func_tile_request; 526 ImageTileDisposeFunc func_tile_dispose; 527 528 gpointer data_update; 529 gpointer data_complete; 530 gpointer data_state; 531 gpointer data_tile; 532 533 /* button, scroll functions */ 534 void (*func_button)(ImageWindow *, GdkEventButton *event, gpointer); 535 void (*func_drag)(ImageWindow *, GdkEventMotion *event, gdouble dx, gdouble dy, gpointer); 536 void (*func_scroll)(ImageWindow *, GdkEventScroll *event, gpointer); 537 void (*func_focus_in)(ImageWindow *, gpointer); 538 539 gpointer data_button; 540 gpointer data_drag; 541 gpointer data_scroll; 542 gpointer data_focus_in; 543 544 /* scroll notification (for scroll bar implementation) */ 545 void (*func_scroll_notify)(ImageWindow *, gint x, gint y, gint width, gint height, gpointer); 546 547 gpointer data_scroll_notify; 548 549 /* collection info */ 550 CollectionData *collection; 551 CollectInfo *collection_info; 552 553 /* color profiles */ 554 gboolean color_profile_enable; 555 gint color_profile_input; 556 gboolean color_profile_use_image; 557 gint color_profile_from_image; 558 gpointer cm; 559 560 AlterType delay_alter_type; 561 562 FileData *read_ahead_fd; 563 ImageLoader *read_ahead_il; 564 565 gint prev_color_row; 566 567 gboolean auto_refresh; 568 569 gboolean delay_flip; 570 gint orientation; 571 gboolean desaturate; 572 gboolean overunderexposed; 573 gint user_stereo; 574 575 gboolean mouse_wheel_mode; 576 }; 577 578 #define FILEDATA_MARKS_SIZE 10 579 580 struct _FileDataChangeInfo { 581 FileDataChangeType type; 582 gchar *source; 583 gchar *dest; 584 gint error; 585 gboolean regroup_when_finished; 586 }; 587 588 struct _FileData { 589 guint magick; 590 gint type; 591 gchar *original_path; /* key to file_data_pool hash table */ 592 gchar *path; 593 const gchar *name; 594 const gchar *extension; 595 gchar *extended_extension; 596 FileFormatClass format_class; 597 gchar *collate_key_name; 598 gchar *collate_key_name_nocase; 599 gint64 size; 600 time_t date; 601 time_t cdate; 602 mode_t mode; /* this is needed at least for notification in view_dir because it is preserved after the file/directory is deleted */ 603 gint sidecar_priority; 604 605 guint marks; /* each bit represents one mark */ 606 guint valid_marks; /* zero bit means that the corresponding mark needs to be reread */ 607 608 609 GList *sidecar_files; 610 FileData *parent; /* parent file if this is a sidecar file, NULL otherwise */ 611 FileDataChangeInfo *change; /* for rename, move ... */ 612 GdkPixbuf *thumb_pixbuf; 613 614 GdkPixbuf *pixbuf; /* full-size image, only complete images, NULL during loading 615 all FileData with non-NULL pixbuf are referenced by image_cache */ 616 617 HistMap *histmap; 618 619 gboolean locked; 620 gint ref; 621 gint version; /* increased when any field in this structure is changed */ 622 gboolean disable_grouping; 623 624 gint user_orientation; 625 gint exif_orientation; 626 627 ExifData *exif; 628 time_t exifdate; 629 time_t exifdate_digitized; 630 GHashTable *modified_xmp; // hash table which contains unwritten xmp metadata in format: key->list of string values 631 GList *cached_metadata; 632 gint rating; 633 gboolean metadata_in_idle_loaded; 634 635 gchar *owner; 636 gchar *group; 637 gchar *sym_link; 638 639 SelectionType selected; // Used by view_file_icon. 640 641 gint page_num; 642 gint page_total; 643 }; 644 645 struct _LayoutOptions 646 { 647 gchar *id; 648 649 gchar *order; 650 gint style; 651 652 DirViewType dir_view_type; 653 FileViewType file_view_type; 654 655 struct { 656 SortType method; 657 gboolean ascend; 658 } dir_view_list_sort; 659 660 gboolean show_thumbnails; 661 gboolean show_marks; 662 gboolean show_file_filter; 663 gboolean show_directory_date; 664 gboolean show_info_pixel; 665 gboolean split_pane_sync; 666 gboolean ignore_alpha; 667 668 struct { 669 gint w; 670 gint h; 671 gint x; 672 gint y; 673 gboolean maximized; 674 gint hdivider_pos; 675 gint vdivider_pos; 676 } main_window; 677 678 struct { 679 gint w; 680 gint h; 681 gint x; 682 gint y; 683 gint vdivider_pos; 684 } float_window; 685 686 struct { 687 gint vdivider_pos; 688 } folder_window; 689 690 struct { 691 gint w; 692 gint h; 693 } properties_window; 694 695 struct { 696 guint state; 697 gint histogram_channel; 698 gint histogram_mode; 699 } image_overlay; 700 701 struct { 702 gint w; 703 gint h; 704 gint x; 705 gint y; 706 } log_window; 707 708 struct { 709 gint w; 710 gint h; 711 gint x; 712 gint y; 713 } search_window; 714 715 struct { 716 gint w; 717 gint h; 718 gint x; 719 gint y; 720 } dupe_window; 721 722 gboolean tools_float; 723 gboolean tools_hidden; 724 gboolean toolbar_hidden; 725 726 struct { 727 gboolean info; 728 gboolean sort; 729 gboolean tools_float; 730 gboolean tools_hidden; 731 gboolean hidden; 732 } bars_state; 733 734 gchar *home_path; 735 gchar *last_path; 736 737 StartUpPath startup_path; 738 739 gboolean animate; 740 gint workspace; 741 742 SortActionType action; 743 SortModeType mode; 744 SortSelectionType selection; 745 gchar *filter_key; 746 }; 747 748 struct _LayoutWindow 749 { 750 LayoutOptions options; 751 752 FileData *dir_fd; 753 754 /* base */ 755 756 GtkWidget *window; 757 758 GtkWidget *main_box; 759 760 GtkWidget *group_box; 761 GtkWidget *h_pane; 762 GtkWidget *v_pane; 763 764 /* menus, path selector */ 765 766 GtkActionGroup *action_group; 767 GtkActionGroup *action_group_editors; 768 guint ui_editors_id; 769 GtkUIManager *ui_manager; 770 guint toolbar_merge_id[TOOLBAR_COUNT]; 771 GList *toolbar_actions[TOOLBAR_COUNT]; 772 773 GtkWidget *path_entry; 774 775 /* image */ 776 777 LayoutLocation image_location; 778 779 ImageWindow *image; 780 781 ImageWindow *split_images[MAX_SPLIT_IMAGES]; 782 ImageSplitMode split_mode; 783 gint active_split_image; 784 785 GtkWidget *split_image_widget; 786 GtkSizeGroup *split_image_sizegroup; 787 788 /* tools window (float) */ 789 790 GtkWidget *tools; 791 GtkWidget *tools_pane; 792 793 // gint tools_float; 794 // gint tools_hidden; 795 GtkWidget *menu_tool_bar; /*Combined menu and toolbar box */ 796 GtkWidget *menu_bar; /* referenced by lw, exist during whole lw lifetime */ 797 /* toolbar */ 798 799 GtkWidget *toolbar[TOOLBAR_COUNT]; /* referenced by lw, exist during whole lw lifetime */ 800 // gint toolbar_hidden; 801 802 // GtkWidget *thumb_button; 803 // gint thumbs_enabled; 804 // gint marks_enabled; 805 806 GtkWidget *back_button; 807 808 /* dir view */ 809 810 LayoutLocation dir_location; 811 812 ViewDir *vd; 813 GtkWidget *dir_view; 814 815 // DirViewType dir_view_type; 816 817 /* file view */ 818 819 LayoutLocation file_location; 820 821 ViewFile *vf; 822 // FileViewType file_view_type; 823 824 GtkWidget *file_view; 825 826 SortType sort_method; 827 gboolean sort_ascend; 828 829 /* status bar */ 830 831 GtkWidget *info_box; 832 GtkWidget *info_progress_bar; 833 GtkWidget *info_sort; 834 GtkWidget *info_status; 835 GtkWidget *info_details; 836 GtkWidget *info_zoom; 837 GtkWidget *info_pixel; 838 839 /* slide show */ 840 841 SlideShowData *slideshow; 842 843 /* full screen */ 844 845 FullScreenData *full_screen; 846 847 /* dividers */ 848 849 // gint div_h; 850 // gint div_v; 851 // gint div_float; 852 853 /* misc */ 854 855 GtkWidget *utility_box; /* referenced by lw, exist during whole lw lifetime */ 856 GtkWidget *utility_paned; /* between image and bar */ 857 GtkWidget *bar_sort; 858 GtkWidget *bar; 859 860 gboolean bar_sort_enabled; /* Set during start-up, and checked when the editors have loaded */ 861 // gint bar_enabled; 862 863 // gint bar_width; 864 865 GtkWidget *exif_window; 866 GtkWidget *sar_window; /* Search and Run window */ 867 868 AnimationData *animation; 869 870 GtkWidget *log_window; 871 }; 872 873 struct _ViewDir 874 { 875 DirViewType type; 876 gpointer info; 877 878 GtkWidget *widget; 879 GtkWidget *view; 880 881 FileData *dir_fd; 882 883 FileData *click_fd; 884 885 FileData *drop_fd; 886 GList *drop_list; 887 guint drop_scroll_id; /* event source id */ 888 889 /* func list */ 890 void (*select_func)(ViewDir *vd, FileData *fd, gpointer data); 891 gpointer select_data; 892 893 void (*dnd_drop_update_func)(ViewDir *vd); 894 void (*dnd_drop_leave_func)(ViewDir *vd); 895 896 LayoutWindow *layout; 897 898 GtkWidget *popup; 899 900 PixmapFolders *pf; 901 }; 902 903 struct _ViewDirInfoList 904 { 905 GList *list; 906 }; 907 908 struct _ViewDirInfoTree 909 { 910 guint drop_expand_id; /* event source id */ 911 gint busy_ref; 912 }; 913 914 915 struct _ViewFile 916 { 917 FileViewType type; 918 // TODO(xsdg): Turn this into a union (see VFLIST and VFICON from view_file.h). 919 gpointer info; 920 921 GtkWidget *widget; 922 GtkWidget *listview; 923 GtkWidget *scrolled; 924 GtkWidget *filter; 925 GtkWidget *filter_check[FILEDATA_MARKS_SIZE]; 926 927 struct { 928 GtkWidget *combo; 929 GtkWidget *frame; 930 gint count; 931 gint last_selected; 932 gboolean case_sensitive; 933 } file_filter; 934 935 FileData *dir_fd; 936 GList *list; 937 938 SortType sort_method; 939 gboolean sort_ascend; 940 941 /* func list */ 942 void (*func_thumb_status)(ViewFile *vf, gdouble val, const gchar *text, gpointer data); 943 gpointer data_thumb_status; 944 945 void (*func_status)(ViewFile *vf, gpointer data); 946 gpointer data_status; 947 948 LayoutWindow *layout; 949 950 GtkWidget *popup; 951 952 /* thumbs updates*/ 953 gboolean thumbs_running; 954 ThumbLoader *thumbs_loader; 955 FileData *thumbs_filedata; 956 957 /* marks */ 958 gboolean marks_enabled; 959 gint active_mark; 960 gint clicked_mark; 961 962 /* stars */ 963 FileData *stars_filedata; 964 guint stars_id; 965 966 /* refresh */ 967 guint refresh_idle_id; /* event source id */ 968 time_t time_refresh_set; /* time when refresh_idle_id was set */ 969 970 /* file list for edit menu */ 971 GList *editmenu_fd_list; 972 973 guint read_metadata_in_idle_id; 974 }; 975 976 struct _ViewFileInfoList 977 { 978 FileData *click_fd; 979 FileData *select_fd; 980 981 gboolean thumbs_enabled; 982 983 guint select_idle_id; /* event source id */ 984 }; 985 986 struct _ViewFileInfoIcon 987 { 988 /* table stuff */ 989 gint columns; 990 gint rows; 991 992 GList *selection; 993 FileData *prev_selection; 994 995 GtkWidget *tip_window; 996 guint tip_delay_id; /* event source id */ 997 FileData *tip_fd; 998 999 FileData *click_fd; 1000 1001 FileData *focus_fd; 1002 gint focus_row; 1003 gint focus_column; 1004 1005 gboolean show_text; 1006 }; 1007 1008 struct _SlideShowData 1009 { 1010 LayoutWindow *lw; /* use this window to display the slideshow */ 1011 ImageWindow *imd; /* use this window only if lw is not available, 1012 FIXME: it is probably required only by img-view.c and should be dropped with it */ 1013 1014 GList *filelist; 1015 CollectionData *cd; 1016 FileData *dir_fd; 1017 1018 GList *list; 1019 GList *list_done; 1020 1021 FileData *slide_fd; 1022 1023 guint slide_count; 1024 guint timeout_id; /* event source id */ 1025 1026 gboolean from_selection; 1027 1028 void (*stop_func)(SlideShowData *, gpointer); 1029 gpointer stop_data; 1030 1031 gboolean paused; 1032 }; 1033 1034 struct _FullScreenData 1035 { 1036 GtkWidget *window; 1037 ImageWindow *imd; 1038 1039 GtkWidget *normal_window; 1040 ImageWindow *normal_imd; 1041 1042 guint hide_mouse_id; /* event source id */ 1043 guint busy_mouse_id; /* event source id */ 1044 1045 gint cursor_state; 1046 1047 guint saver_block_id; /* event source id */ 1048 1049 void (*stop_func)(FullScreenData *, gpointer); 1050 gpointer stop_data; 1051 1052 gboolean same_region; /* the returned region will overlap the current location of widget. */ 1053 }; 1054 1055 struct _PixmapFolders 1056 { 1057 GdkPixbuf *close; 1058 GdkPixbuf *open; 1059 GdkPixbuf *deny; 1060 GdkPixbuf *parent; 1061 GdkPixbuf *link; 1062 }; 1063 1064 struct _SecureSaveInfo { 1065 FILE *fp; /**< file stream pointer */ 1066 gchar *file_name; /**< final file name */ 1067 gchar *tmp_file_name; /**< temporary file name */ 1068 gint err; /**< set to non-zero value in case of error */ 1069 gboolean secure_save; /**< use secure save for this file, internal use only */ 1070 gboolean preserve_perms; /**< whether to preserve perms, TRUE by default */ 1071 gboolean preserve_mtime; /**< whether to preserve mtime, FALSE by default */ 1072 gboolean unlink_on_error; /**< whether to remove temporary file on save failure, TRUE by default */ 1073 }; 1074 1075 struct _CommandLine 1076 { 1077 int argc; 1078 gchar **argv; 1079 gboolean startup_blank; 1080 gboolean startup_full_screen; 1081 gboolean startup_in_slideshow; 1082 gboolean startup_command_line_collection; 1083 gboolean tools_hide; 1084 gboolean tools_show; 1085 gboolean log_window_show; 1086 gchar *path; 1087 gchar *file; 1088 GList *cmd_list; 1089 GList *collection_list; 1090 gchar *geometry; 1091 gchar *regexp; 1092 gchar *log_file; 1093 SecureSaveInfo *ssi; 1094 gboolean new_instance; 1095 }; 1096 1097 #endif 1098 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ 1099