Mercurial > geeqie
diff src/main.c @ 1313:1ffa5222dc61
enabled commandline again
author | nadvornik |
---|---|
date | Mon, 23 Feb 2009 21:21:15 +0000 |
parents | 55ea4962887a |
children | 50b325a2386e |
line wrap: on
line diff
--- a/src/main.c Mon Feb 23 17:20:40 2009 +0000 +++ b/src/main.c Mon Feb 23 21:21:15 2009 +0000 @@ -102,12 +102,6 @@ *----------------------------------------------------------------------------- */ -static gint startup_blank = FALSE; -static gint startup_full_screen = FALSE; -static gint startup_in_slideshow = FALSE; -static gint startup_command_line_collection = FALSE; - - static void parse_command_line_add_file(const gchar *file_path, gchar **path, gchar **file, GList **list, GList **collection_list) { @@ -198,15 +192,18 @@ parse_command_line_add_file(file_path, path, file, list, collection_list); } -static void parse_command_line(gint argc, gchar *argv[], gchar **path, gchar **file, - GList **cmd_list, GList **collection_list, - gchar **geometry) +static void parse_command_line(gint argc, gchar *argv[]) { GList *list = NULL; GList *remote_list = NULL; GList *remote_errors = NULL; gint remote_do = FALSE; gchar *first_dir = NULL; + + command_line = g_new0(CommandLine, 1); + + command_line->argc = argc; + command_line->argv = argv; if (argc > 1) { @@ -220,21 +217,21 @@ if (cmd_line[0] == G_DIR_SEPARATOR && isdir(cmd_line)) { - parse_command_line_process_dir(cmd_line, path, file, &list, &first_dir); + parse_command_line_process_dir(cmd_line, &command_line->path, &command_line->file, &list, &first_dir); } else if (isdir(cmd_all)) { - parse_command_line_process_dir(cmd_all, path, file, &list, &first_dir); + parse_command_line_process_dir(cmd_all, &command_line->path, &command_line->file, &list, &first_dir); } else if (cmd_line[0] == G_DIR_SEPARATOR && isfile(cmd_line)) { - parse_command_line_process_file(cmd_line, path, file, - &list, collection_list, &first_dir); + parse_command_line_process_file(cmd_line, &command_line->path, &command_line->file, + &list, &command_line->collection_list, &first_dir); } else if (isfile(cmd_all)) { - parse_command_line_process_file(cmd_all, path, file, - &list, collection_list, &first_dir); + parse_command_line_process_file(cmd_all, &command_line->path, &command_line->file, + &list, &command_line->collection_list, &first_dir); } else if (strncmp(cmd_line, "--debug", 7) == 0 && (cmd_line[7] == '\0' || cmd_line[7] == '=')) { @@ -243,36 +240,35 @@ else if (strcmp(cmd_line, "+t") == 0 || strcmp(cmd_line, "--with-tools") == 0) { - options->layout.tools_float = FALSE; - options->layout.tools_hidden = FALSE; + command_line->tools_show = TRUE; remote_list = g_list_append(remote_list, "+t"); } else if (strcmp(cmd_line, "-t") == 0 || strcmp(cmd_line, "--without-tools") == 0) { - options->layout.tools_hidden = TRUE; + command_line->tools_hide = TRUE; remote_list = g_list_append(remote_list, "-t"); } else if (strcmp(cmd_line, "-f") == 0 || strcmp(cmd_line, "--fullscreen") == 0) { - startup_full_screen = TRUE; + command_line->startup_full_screen = TRUE; } else if (strcmp(cmd_line, "-s") == 0 || strcmp(cmd_line, "--slideshow") == 0) { - startup_in_slideshow = TRUE; + command_line->startup_in_slideshow = TRUE; } else if (strcmp(cmd_line, "-l") == 0 || strcmp(cmd_line, "--list") == 0) { - startup_command_line_collection = TRUE; + command_line->startup_command_line_collection = TRUE; } else if (strncmp(cmd_line, "--geometry=", 11) == 0) { - if (!*geometry) *geometry = g_strdup(cmd_line + 11); + if (!command_line->geometry) command_line->geometry = g_strdup(cmd_line + 11); } else if (strcmp(cmd_line, "-r") == 0 || strcmp(cmd_line, "--remote") == 0) @@ -291,7 +287,7 @@ } else if (strcmp(cmd_line, "--blank") == 0) { - startup_blank = TRUE; + command_line->startup_blank = TRUE; } else if (strcmp(cmd_line, "-v") == 0 || strcmp(cmd_line, "--version") == 0) @@ -342,18 +338,18 @@ i++; } g_free(base_dir); - parse_out_relatives(*path); - parse_out_relatives(*file); + parse_out_relatives(command_line->path); + parse_out_relatives(command_line->file); } list = g_list_reverse(list); - if (!*path && first_dir) + if (!command_line->path && first_dir) { - *path = first_dir; + command_line->path = first_dir; first_dir = NULL; - parse_out_relatives(*path); + parse_out_relatives(command_line->path); } g_free(first_dir); @@ -375,18 +371,30 @@ printf_term(_("\nUse --remote-help for valid remote options.\n")); } - remote_control(argv[0], remote_list, *path, list, *collection_list); + remote_control(argv[0], remote_list, command_line->path, list, command_line->collection_list); } g_list_free(remote_list); if (list && list->next) { - *cmd_list = list; + command_line->cmd_list = list; } else { filelist_free(list); - *cmd_list = NULL; + command_line->cmd_list = NULL; + } + + if (command_line->startup_blank) + { + g_free(command_line->path); + command_line->path = NULL; + g_free(command_line->file); + command_line->file = NULL; + filelist_free(command_line->cmd_list); + command_line->cmd_list = NULL; + string_list_free(command_line->collection_list); + command_line->collection_list = NULL; } } @@ -669,16 +677,6 @@ void init_after_global_options(void) { - if (gtk_major_version < GTK_MAJOR_VERSION || - (gtk_major_version == GTK_MAJOR_VERSION && gtk_minor_version < GTK_MINOR_VERSION) ) - { - log_printf("!!! This is a friendly warning.\n"); - log_printf("!!! The version of GTK+ in use now is older than when %s was compiled.\n", GQ_APPNAME); - log_printf("!!! compiled with GTK+-%d.%d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); - log_printf("!!! running with GTK+-%d.%d\n", gtk_major_version, gtk_minor_version); - log_printf("!!! %s may quit unexpectedly with a relocation error.\n", GQ_APPNAME); - } - mkdir_if_not_exists(get_rc_dir()); mkdir_if_not_exists(get_collections_dir()); mkdir_if_not_exists(get_thumbnails_cache_dir()); @@ -725,14 +723,7 @@ gint main(gint argc, gchar *argv[]) { - LayoutWindow *lw; - gchar *path = NULL; - gchar *cmd_path = NULL; - gchar *cmd_file = NULL; - GList *cmd_list = NULL; - GList *collection_list = NULL; CollectionData *first_collection = NULL; - gchar *geometry = NULL; gchar *buf; CollectionData *cd = NULL; @@ -771,58 +762,41 @@ file_data_register_notify_func(histogram_notify_cb, NULL, NOTIFY_PRIORITY_HIGH); file_data_register_notify_func(collect_manager_notify_cb, NULL, NOTIFY_PRIORITY_LOW); + gtkrc_load(); + gtk_init(&argc, &argv); + + if (gtk_major_version < GTK_MAJOR_VERSION || + (gtk_major_version == GTK_MAJOR_VERSION && gtk_minor_version < GTK_MINOR_VERSION) ) + { + log_printf("!!! This is a friendly warning.\n"); + log_printf("!!! The version of GTK+ in use now is older than when %s was compiled.\n", GQ_APPNAME); + log_printf("!!! compiled with GTK+-%d.%d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); + log_printf("!!! running with GTK+-%d.%d\n", gtk_major_version, gtk_minor_version); + log_printf("!!! %s may quit unexpectedly with a relocation error.\n", GQ_APPNAME); + } + parse_command_line_for_debug_option(argc, argv); + parse_command_line(argc, argv); options = init_options(NULL); setup_default_options(options); - gtkrc_load(); //FIXME: move to init_after_global_options() - gtk_init(&argc, &argv); - load_options(options); - /* ^^^ this calls init_after_global_options(); at the right moment*/ + /* load_options calls init_after_global_options() after it parses global options, we have to call it here if it fails*/ + if (!load_options(options)) init_after_global_options(); if (!layout_window_list) - { // FIXME: commandline handling does not work at all, this is a quick workaround for missing rc file - - init_after_global_options(); - parse_command_line(argc, argv, &cmd_path, &cmd_file, &cmd_list, &collection_list, &geometry); - - if (startup_blank) { - g_free(cmd_path); - cmd_path = NULL; - g_free(cmd_file); - cmd_file = NULL; - filelist_free(cmd_list); - cmd_list = NULL; - string_list_free(collection_list); - collection_list = NULL; - - path = NULL; - } - else if (cmd_path) - { - path = g_strdup(cmd_path); - } - else if (options->startup.restore_path && options->startup.path && isdir(options->startup.path)) - { - path = g_strdup(options->startup.path); - } - else - { - path = get_current_dir(); + /* broken or no config file */ + layout_new_from_config(NULL, NULL, TRUE); } - lw = layout_new_with_geometry(NULL, NULL, geometry); - layout_sort_set(lw, options->file_sort.method, options->file_sort.ascending); - - if (collection_list && !startup_command_line_collection) + if (command_line->collection_list && !command_line->startup_command_line_collection) { GList *work; - work = collection_list; + work = command_line->collection_list; while (work) { CollectWindow *cw; @@ -836,12 +810,12 @@ } } - if (cmd_list || - (startup_command_line_collection && collection_list)) + if (command_line->cmd_list || + (command_line->startup_command_line_collection && command_line->collection_list)) { GList *work; - if (startup_command_line_collection) + if (command_line->startup_command_line_collection) { CollectWindow *cw; @@ -860,22 +834,21 @@ collection_path_changed(cd); - work = cmd_list; + work = command_line->cmd_list; while (work) { collection_add(cd, file_data_new_simple((gchar *)work->data), FALSE); work = work->next; } - work = collection_list; + work = command_line->collection_list; while (work) { collection_load(cd, (gchar *)work->data, COLLECTION_LOAD_APPEND); work = work->next; } - layout_set_path(lw, path); - if (cd->list) layout_image_set_collection(lw, cd, cd->list->data); + if (cd->list) layout_image_set_collection(NULL, cd, cd->list->data); /* mem leak, we never unref this collection when !startup_command_line_collection * (the image view of the main window does not hold a ref to the collection) @@ -886,34 +859,12 @@ */ } - else if (cmd_file) - { - layout_set_path(lw, cmd_file); - } - else + else if (first_collection) { - layout_set_path(lw, path); - if (first_collection) - { - layout_image_set_collection(lw, first_collection, - collection_get_first(first_collection)); - } + layout_image_set_collection(NULL, first_collection, + collection_get_first(first_collection)); } - image_osd_set(lw->image, options->image_overlay.common.state | (options->image_overlay.common.show_at_startup ? OSD_SHOW_INFO : OSD_SHOW_NOTHING)); - - } - - g_free(geometry); - g_free(cmd_path); - g_free(cmd_file); - filelist_free(cmd_list); - string_list_free(collection_list); - g_free(path); - - if (startup_full_screen) layout_image_full_screen_start(lw); - if (startup_in_slideshow) layout_image_slideshow_start(lw); - buf = g_build_filename(get_rc_dir(), ".command", NULL); remote_connection = remote_server_init(buf, cd); g_free(buf);