Revision: 1409
http://geeqie.svn.sourceforge.net/geeqie/?rev=1409&view=rev
Author: nadvornik
Date: 2009-02-23 21:21:15 +0000 (Mon, 23 Feb 2009)
Log Message:
-----------
enabled commandline again
Modified Paths:
--------------
trunk/src/layout.c
trunk/src/layout.h
trunk/src/main.c
trunk/src/options.c
trunk/src/options.h
trunk/src/rcfile.c
trunk/src/rcfile.h
trunk/src/typedefs.h
Modified: trunk/src/layout.c
===================================================================
--- trunk/src/layout.c 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/layout.c 2009-02-23 21:21:15 UTC (rev 1409)
@@ -2108,6 +2108,8 @@
gtk_widget_show(lw->window);
layout_tools_hide(lw, lw->options.tools_hidden);
+ image_osd_set(lw->image, options->image_overlay.common.state |
(options->image_overlay.common.show_at_startup ? OSD_SHOW_INFO :
OSD_SHOW_NOTHING));
+
layout_window_list = g_list_append(layout_window_list, lw);
file_data_register_notify_func(layout_image_notify_cb, lw,
NOTIFY_PRIORITY_LOW);
@@ -2247,19 +2249,73 @@
}
+static void layout_config_commandline(LayoutOptions *lop, gchar **path)
+{
+ if (command_line->startup_blank)
+ {
+ *path = NULL;
+ }
+ else if (command_line->file)
+ {
+ *path = g_strdup(command_line->file);
+ }
+ else if (command_line->path)
+ {
+ *path = g_strdup(command_line->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();
+ }
+
+ if (command_line->tools_show)
+ {
+ lop->tools_float = FALSE;
+ lop->tools_hidden = FALSE;
+ }
+ else if (command_line->tools_hide)
+ {
+ lop->tools_hidden = TRUE;
+ }
+}
-LayoutWindow *layout_new_from_config(const gchar **attribute_names, const
gchar **attribute_values)
+LayoutWindow *layout_new_from_config(const gchar **attribute_names, const
gchar **attribute_values, gboolean use_commandline)
{
LayoutOptions lop;
LayoutWindow *lw;
+ gchar *path = NULL;
+
memset(&lop, 0, sizeof(LayoutOptions));
copy_layout_options(&lop, &options->layout);
- layout_load_attributes(&lop, attribute_names, attribute_values);
- lw = layout_new(NULL, &lop);
+ if (attribute_names) layout_load_attributes(&lop, attribute_names,
attribute_values);
+
+ if (use_commandline)
+ {
+ layout_config_commandline(&lop, &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();
+ }
+
+ lw = layout_new_with_geometry(NULL, &lop, use_commandline ?
command_line->geometry : NULL);
layout_sort_set(lw, options->file_sort.method,
options->file_sort.ascending);
- layout_set_path(lw, get_current_dir()); // FIXME: use options / cmdline
-
+ layout_set_path(lw, path);
+
+ if (use_commandline && command_line->startup_full_screen)
layout_image_full_screen_start(lw);
+ if (use_commandline && command_line->startup_in_slideshow)
layout_image_slideshow_start(lw);
+
+
+ g_free(path);
free_layout_options_content(&lop);
return lw;
}
Modified: trunk/src/layout.h
===================================================================
--- trunk/src/layout.h 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/layout.h 2009-02-23 21:21:15 UTC (rev 1409)
@@ -20,7 +20,7 @@
LayoutWindow *layout_new(FileData *dir_fd, LayoutOptions *lop);
LayoutWindow *layout_new_with_geometry(FileData *dir_fd, LayoutOptions *lop,
const gchar *geometry);
-LayoutWindow *layout_new_from_config(const gchar **attribute_names, const
gchar **attribute_values);
+LayoutWindow *layout_new_from_config(const gchar **attribute_names, const
gchar **attribute_values, gboolean use_commandline);
void layout_close(LayoutWindow *lw);
void layout_free(LayoutWindow *lw);
Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/main.c 2009-02-23 21:21:15 UTC (rev 1409)
@@ -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,19 +371,31 @@
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;
+ }
}
static void parse_command_line_for_debug_option(gint argc, gchar *argv[])
@@ -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;
+ /* broken or no config file */
+ layout_new_from_config(NULL, NULL, TRUE);
}
- 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();
- }
- 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)
+ else if (first_collection)
{
- layout_set_path(lw, cmd_file);
+ layout_image_set_collection(NULL, first_collection,
+
collection_get_first(first_collection));
}
- else
- {
- layout_set_path(lw, path);
- if (first_collection)
- {
- layout_image_set_collection(lw, 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);
Modified: trunk/src/options.c
===================================================================
--- trunk/src/options.c 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/options.c 2009-02-23 21:21:15 UTC (rev 1409)
@@ -258,7 +258,7 @@
g_free(rc_path);
}
-void load_options(ConfOptions *options)
+gboolean load_options(ConfOptions *options)
{
gboolean success;
gchar *rc_path;
@@ -266,14 +266,15 @@
if (isdir(GQ_SYSTEM_WIDE_DIR))
{
rc_path = g_build_filename(GQ_SYSTEM_WIDE_DIR, RC_FILE_NAME,
NULL);
- success = load_options_from(rc_path, options);
+ success = load_options_from(rc_path, options, TRUE);
DEBUG_1("Loading options from %s ... %s", rc_path, success ?
"done" : "failed");
g_free(rc_path);
}
rc_path = g_build_filename(get_rc_dir(), RC_FILE_NAME, NULL);
- success = load_options_from(rc_path, options);
+ success = load_options_from(rc_path, options, TRUE);
DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" :
"failed");
g_free(rc_path);
+ return(success);
}
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
Modified: trunk/src/options.h
===================================================================
--- trunk/src/options.h 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/options.h 2009-02-23 21:21:15 UTC (rev 1409)
@@ -209,11 +209,12 @@
};
ConfOptions *options;
+CommandLine *command_line;
ConfOptions *init_options(ConfOptions *options);
void setup_default_options(ConfOptions *options);
void save_options(ConfOptions *options);
-void load_options(ConfOptions *options);
+gboolean load_options(ConfOptions *options);
void copy_layout_options(LayoutOptions *dest, const LayoutOptions *src);
void free_layout_options_content(LayoutOptions *dest);
Modified: trunk/src/rcfile.c
===================================================================
--- trunk/src/rcfile.c 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/rcfile.c 2009-02-23 21:21:15 UTC (rev 1409)
@@ -773,6 +773,12 @@
* xml file structure (private)
*-----------------------------------------------------------------------------
*/
+struct _GQParserData
+{
+ GList *parse_func_stack;
+ gboolean startup; /* reading config for the first time - add
commandline and call init_after_global_options() */
+ gboolean global_found;
+};
void options_parse_leaf(GQParserData *parser_data, GMarkupParseContext
*context, const gchar *element_name, const gchar **attribute_names, const gchar
**attribute_values, gpointer data, GError **error)
@@ -839,12 +845,6 @@
}
}
-static void options_parse_global_end(GQParserData *parser_data,
GMarkupParseContext *context, const gchar *element_name, gpointer data, GError
**error)
-{
- DEBUG_1(" global end");
- init_after_global_options();
-}
-
static void options_parse_bar(GQParserData *parser_data, GMarkupParseContext
*context, const gchar *element_name, const gchar **attribute_names, const gchar
**attribute_values, gpointer data, GError **error)
{
GtkWidget *bar = data;
@@ -901,12 +901,21 @@
if (g_ascii_strcasecmp(element_name, "global") == 0)
{
load_global_params(attribute_names, attribute_values);
- options_parse_func_push(parser_data, options_parse_global,
options_parse_global_end, NULL);
+ options_parse_func_push(parser_data, options_parse_global,
NULL, NULL);
+ return;
}
- else if (g_ascii_strcasecmp(element_name, "layout") == 0)
+
+ if (parser_data->startup && !parser_data->global_found)
{
+ DEBUG_1(" global end");
+ parser_data->global_found = TRUE;
+ init_after_global_options();
+ }
+
+ if (g_ascii_strcasecmp(element_name, "layout") == 0)
+ {
LayoutWindow *lw;
- lw = layout_new_from_config(attribute_names, attribute_values);
+ lw = layout_new_from_config(attribute_names, attribute_values,
parser_data->startup);
options_parse_func_push(parser_data, options_parse_layout,
NULL, lw);
}
else
@@ -935,11 +944,6 @@
gpointer data;
};
-struct _GQParserData
-{
- GList *parse_func_stack;
-};
-
void options_parse_func_push(GQParserData *parser_data, GQParserStartFunc
start_func, GQParserEndFunc end_func, gpointer data)
{
GQParserFuncData *func_data = g_new0(GQParserFuncData, 1);
@@ -1007,7 +1011,7 @@
*-----------------------------------------------------------------------------
*/
-gboolean load_options_from(const gchar *utf8_path, ConfOptions *options)
+gboolean load_options_from(const gchar *utf8_path, ConfOptions *options,
gboolean startup)
{
gsize size;
gchar *buf;
@@ -1021,6 +1025,8 @@
}
parser_data = g_new0(GQParserData, 1);
+
+ parser_data->startup = startup;
options_parse_func_push(parser_data, options_parse_toplevel, NULL,
NULL);
context = g_markup_parse_context_new(&parser, 0, parser_data, NULL);
Modified: trunk/src/rcfile.h
===================================================================
--- trunk/src/rcfile.h 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/rcfile.h 2009-02-23 21:21:15 UTC (rev 1409)
@@ -73,7 +73,7 @@
gboolean save_options_to(const gchar *utf8_path, ConfOptions *options);
-gboolean load_options_from(const gchar *utf8_path, ConfOptions *options);
+gboolean load_options_from(const gchar *utf8_path, ConfOptions *options,
gboolean startup);
#endif
Modified: trunk/src/typedefs.h
===================================================================
--- trunk/src/typedefs.h 2009-02-23 17:20:40 UTC (rev 1408)
+++ trunk/src/typedefs.h 2009-02-23 21:21:15 UTC (rev 1409)
@@ -209,6 +209,8 @@
typedef struct _EditorDescription EditorDescription;
+typedef struct _CommandLine CommandLine;
+
struct _EditorDescription {
gchar *key; /* desktop file name, not including path,
including extension */
gchar *name; /* Name, localized name presented to user */
@@ -831,5 +833,22 @@
gint unlink_on_error; /**< whether to remove temporary file on save
failure, TRUE by default */
};
+struct _CommandLine
+{
+ int argc;
+ gchar **argv;
+ gboolean startup_blank;
+ gboolean startup_full_screen;
+ gboolean startup_in_slideshow;
+ gboolean startup_command_line_collection;
+ gboolean tools_hide;
+ gboolean tools_show;
+ gchar *path;
+ gchar *file;
+ GList *cmd_list;
+ GList *collection_list;
+ gchar *geometry;
+};
+
#endif
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn