Mercurial > geeqie
annotate src/main.c @ 506:fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
in each debug message string.
| author | zas_ |
|---|---|
| date | Thu, 24 Apr 2008 00:15:03 +0000 |
| parents | c7a2471e5c4e |
| children | 135570a8bd96 |
| rev | line source |
|---|---|
| 1 | 1 /* |
| 196 | 2 * Geeqie |
|
79
528e3432e0c0
Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents:
76
diff
changeset
|
3 * (C) 2006 John Ellis |
| 475 | 4 * Copyright (C) 2008 The Geeqie Team |
| 1 | 5 * |
| 6 * Author: John Ellis | |
| 7 * | |
| 9 | 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! | |
| 1 | 11 */ |
| 12 | |
| 9 | 13 |
| 281 | 14 #include "main.h" |
| 9 | 15 |
| 16 #include "cache.h" | |
| 17 #include "collect.h" | |
| 18 #include "collect-io.h" | |
| 19 #include "dnd.h" | |
| 20 #include "editors.h" | |
| 21 #include "filelist.h" | |
|
354
5c82855feba7
Add a button to reset fullscreen info string to default value.
zas_
parents:
341
diff
changeset
|
22 #include "fullscreen.h" |
|
218
f4a0555794a9
Customizable info overlay in fullscreen, based on the patch posted to gqview-devel list by Timo on 2007-09-10.
zas_
parents:
214
diff
changeset
|
23 #include "image-overlay.h" |
| 9 | 24 #include "img-view.h" |
| 25 #include "layout.h" | |
| 26 #include "layout_image.h" | |
| 27 #include "menu.h" | |
|
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
28 #include "pixbuf_util.h" |
| 9 | 29 #include "preferences.h" |
| 30 #include "rcfile.h" | |
| 31 #include "remote.h" | |
| 32 #include "similar.h" | |
| 33 #include "slideshow.h" | |
| 34 #include "utilops.h" | |
| 35 #include "ui_bookmark.h" | |
| 36 #include "ui_help.h" | |
| 37 #include "ui_fileops.h" | |
| 38 #include "ui_tabcomp.h" | |
| 39 #include "ui_utildlg.h" | |
| 40 | |
| 1 | 41 #include <gdk/gdkkeysyms.h> /* for keyboard values */ |
| 42 | |
| 9 | 43 |
| 44 #include <math.h> | |
| 45 | |
| 46 | |
| 279 | 47 static RemoteConnection *remote_connection = NULL; |
| 48 static CollectionData *command_collection = NULL; | |
| 9 | 49 |
| 1 | 50 |
| 51 /* | |
| 52 *----------------------------------------------------------------------------- | |
| 9 | 53 * misc (public) |
| 1 | 54 *----------------------------------------------------------------------------- |
| 442 | 55 */ |
| 1 | 56 |
|
289
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
57 GtkWidget *window_new(GtkWindowType type, const gchar *name, const gchar *icon, |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
58 const gchar *icon_file, const gchar *subtitle) |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
59 { |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
60 gchar *title; |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
61 GtkWidget *window; |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
62 |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
63 window = gtk_window_new(type); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
64 if (!window) return NULL; |
| 442 | 65 |
|
289
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
66 if (subtitle) |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
67 { |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
68 title = g_strdup_printf("%s - %s", subtitle, GQ_APPNAME); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
69 } |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
70 else |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
71 { |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
72 title = g_strdup_printf("%s", GQ_APPNAME); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
73 } |
| 442 | 74 |
|
289
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
75 gtk_window_set_title(GTK_WINDOW(window), title); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
76 g_free(title); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
77 |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
78 window_set_icon(window, icon, icon_file); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
79 gtk_window_set_role(GTK_WINDOW(window), name); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
80 gtk_window_set_wmclass(GTK_WINDOW(window), name, GQ_WMCLASS); |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
81 |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
82 return window; |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
83 } |
|
6a7298988a7a
Simplify and unify gtk_window creation with the help of
zas_
parents:
288
diff
changeset
|
84 |
|
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
85 void window_set_icon(GtkWidget *window, const gchar *icon, const gchar *file) |
| 1 | 86 { |
|
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
87 if (!icon && !file) icon = PIXBUF_INLINE_ICON; |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
88 |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
89 if (icon) |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
90 { |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
91 GdkPixbuf *pixbuf; |
| 1 | 92 |
|
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
93 pixbuf = pixbuf_inline(icon); |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
94 if (pixbuf) |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
95 { |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
96 gtk_window_set_icon(GTK_WINDOW(window), pixbuf); |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
97 g_object_unref(pixbuf); |
|
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
98 } |
| 9 | 99 } |
| 100 else | |
| 101 { | |
|
91
d063f97503b7
Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
gqview
parents:
81
diff
changeset
|
102 gtk_window_set_icon_from_file(GTK_WINDOW(window), file, NULL); |
| 9 | 103 } |
| 104 } | |
| 1 | 105 |
| 9 | 106 gint window_maximized(GtkWidget *window) |
| 107 { | |
| 108 GdkWindowState state; | |
| 109 | |
| 110 if (!window || !window->window) return FALSE; | |
| 111 | |
| 112 state = gdk_window_get_state(window->window); | |
| 113 return (state & GDK_WINDOW_STATE_MAXIMIZED); | |
| 114 } | |
| 115 | |
| 116 gdouble get_zoom_increment(void) | |
| 117 { | |
| 334 | 118 return ((options->image.zoom_increment != 0) ? (gdouble)options->image.zoom_increment / 10.0 : 1.0); |
| 1 | 119 } |
| 120 | |
|
412
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
121 static gint timeval_delta(struct timeval *result, struct timeval *x, struct timeval *y) |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
122 { |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
123 if (x->tv_usec < y->tv_usec) |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
124 { |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
125 gint nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
126 y->tv_usec -= 1000000 * nsec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
127 y->tv_sec += nsec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
128 } |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
129 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
130 if (x->tv_usec - y->tv_usec > 1000000) |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
131 { |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
132 gint nsec = (x->tv_usec - y->tv_usec) / 1000000; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
133 y->tv_usec += 1000000 * nsec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
134 y->tv_sec -= nsec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
135 } |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
136 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
137 result->tv_sec = x->tv_sec - y->tv_sec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
138 result->tv_usec = x->tv_usec - y->tv_usec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
139 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
140 return x->tv_sec < y->tv_sec; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
141 } |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
142 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
143 const gchar *get_exec_time() |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
144 { |
|
412
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
145 static gchar timestr[30]; |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
146 static struct timeval start_tv = {0, 0}; |
|
412
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
147 static struct timeval previous = {0, 0}; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
148 static gint started = 0; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
149 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
150 struct timeval tv = {0, 0}; |
|
412
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
151 static struct timeval delta = {0, 0}; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
152 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
153 gettimeofday(&tv, NULL); |
| 442 | 154 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
155 if (start_tv.tv_sec == 0) start_tv = tv; |
| 442 | 156 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
157 tv.tv_sec -= start_tv.tv_sec; |
| 442 | 158 if (tv.tv_usec >= start_tv.tv_usec) |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
159 tv.tv_usec -= start_tv.tv_usec; |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
160 else |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
161 { |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
162 tv.tv_usec += 1000000 - start_tv.tv_usec; |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
163 tv.tv_sec -= 1; |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
164 } |
|
412
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
165 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
166 if (started) timeval_delta(&delta, &tv, &previous); |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
167 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
168 previous = tv; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
169 started = 1; |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
170 |
|
eb5ae19a62f6
Display elapsed time since previous get_exec_time() call (debug only).
zas_
parents:
403
diff
changeset
|
171 g_snprintf(timestr, sizeof(timestr), "%5d.%06d (+%05d.%06d)", (int)tv.tv_sec, (int)tv.tv_usec, (int)delta.tv_sec, (int)delta.tv_usec); |
| 442 | 172 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
173 return timestr; |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
174 } |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
175 |
| 1 | 176 /* |
| 177 *----------------------------------------------------------------------------- | |
| 9 | 178 * Open browser with the help Documentation |
| 179 *----------------------------------------------------------------------------- | |
| 180 */ | |
| 181 | |
| 182 static gchar *command_result(const gchar *binary, const gchar *command) | |
| 183 { | |
| 184 gchar *result = NULL; | |
| 185 FILE *f; | |
| 186 char buf[2048]; | |
| 187 int l; | |
| 188 | |
| 189 if (!binary) return NULL; | |
| 190 if (!file_in_path(binary)) return NULL; | |
| 191 | |
| 192 if (!command) return g_strdup(binary); | |
| 193 if (command[0] == '!') return g_strdup(command + 1); | |
| 194 | |
| 195 f = popen(command, "r"); | |
| 196 if (!f) return NULL; | |
| 197 | |
| 198 while ((l = fread(buf, sizeof(char), sizeof(buf), f)) > 0) | |
| 199 { | |
| 200 if (!result) | |
| 201 { | |
| 202 int n = 0; | |
| 203 | |
| 204 while (n < l && buf[n] != '\n' && buf[n] != '\r') n++; | |
| 205 if (n > 0) result = g_strndup(buf, n); | |
| 206 } | |
| 207 } | |
| 208 | |
| 209 pclose(f); | |
| 210 | |
| 211 return result; | |
| 212 } | |
| 213 | |
| 214 static void help_browser_command(const gchar *command, const gchar *path) | |
| 215 { | |
| 216 gchar *result; | |
| 217 gchar *buf; | |
| 218 gchar *begin; | |
| 219 gchar *end; | |
| 220 | |
| 221 if (!command || !path) return; | |
| 222 | |
|
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
223 DEBUG_1("Help command pre \"%s\", \"%s\"", command, path); |
| 9 | 224 |
| 225 buf = g_strdup(command); | |
| 226 begin = strstr(buf, "%s"); | |
| 227 if (begin) | |
| 228 { | |
| 229 *begin = '\0'; | |
| 230 end = begin + 2; | |
| 231 begin = buf; | |
| 232 | |
| 233 result = g_strdup_printf("%s%s%s &", begin, path, end); | |
| 234 } | |
| 235 else | |
| 236 { | |
| 237 result = g_strdup_printf("%s \"%s\" &", command, path); | |
| 238 } | |
| 239 g_free(buf); | |
| 240 | |
|
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
241 DEBUG_1("Help command post [%s]", result); |
| 9 | 242 |
| 243 system(result); | |
| 244 | |
| 245 g_free(result); | |
| 246 } | |
| 247 | |
| 248 /* | |
| 249 * each set of 2 strings is one browser: | |
| 250 * the 1st is the binary to look for in the path | |
| 251 * the 2nd has 3 capabilities: | |
| 252 * NULL exec binary with html file path as command line | |
| 253 * string exec string and use results for command line | |
| 254 * !string use text following ! as command line, replacing optional %s with html file path | |
| 255 */ | |
| 256 static gchar *html_browsers[] = | |
| 257 { | |
| 258 /* Redhat has a nifty htmlview script to start the user's preferred browser */ | |
| 259 "htmlview", NULL, | |
| 260 /* GNOME 2 */ | |
| 261 "gconftool-2", "gconftool-2 -g /desktop/gnome/url-handlers/http/command", | |
| 262 /* KDE */ | |
| 263 "kfmclient", "!kfmclient exec \"%s\"", | |
| 264 /* use fallbacks */ | |
| 265 "firefox", NULL, | |
| 266 "mozilla", NULL, | |
| 267 "konqueror", NULL, | |
| 268 "netscape", NULL, | |
| 269 NULL, NULL | |
| 270 }; | |
| 271 | |
| 272 static void help_browser_run(void) | |
| 273 { | |
| 274 gchar *result = NULL; | |
| 275 gint i; | |
| 276 | |
| 277 i = 0; | |
| 278 while (!result && html_browsers[i]) | |
| 279 { | |
| 280 result = command_result(html_browsers[i], html_browsers[i+1]); | |
| 281 i += 2; | |
| 282 } | |
| 283 | |
| 284 if (!result) | |
| 285 { | |
| 286 printf("Unable to detect an installed browser.\n"); | |
| 287 return; | |
| 288 } | |
| 289 | |
| 283 | 290 help_browser_command(result, GQ_HTMLDIR "/index.html"); |
| 9 | 291 |
| 292 g_free(result); | |
| 293 } | |
| 294 | |
| 295 /* | |
| 296 *----------------------------------------------------------------------------- | |
| 297 * help window | |
| 1 | 298 *----------------------------------------------------------------------------- |
| 442 | 299 */ |
| 1 | 300 |
| 9 | 301 static GtkWidget *help_window = NULL; |
| 302 | |
| 303 static void help_window_destroy_cb(GtkWidget *window, gpointer data) | |
| 1 | 304 { |
| 9 | 305 help_window = NULL; |
| 1 | 306 } |
| 307 | |
| 9 | 308 void help_window_show(const gchar *key) |
| 1 | 309 { |
| 9 | 310 if (key && strcmp(key, "html_contents") == 0) |
| 311 { | |
| 312 help_browser_run(); | |
| 313 return; | |
| 314 } | |
| 315 | |
| 316 if (help_window) | |
| 1 | 317 { |
| 9 | 318 gtk_window_present(GTK_WINDOW(help_window)); |
| 319 if (key) help_window_set_key(help_window, key); | |
| 320 return; | |
| 1 | 321 } |
| 9 | 322 |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
323 { |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
324 gchar *title = g_strdup_printf("%s - %s", _("Help"), GQ_APPNAME); |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
325 help_window = help_window_new(title, GQ_WMCLASS, "help", |
| 442 | 326 GQ_HELPDIR "/README", key); |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
327 g_free(title); |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
328 } |
| 9 | 329 g_signal_connect(G_OBJECT(help_window), "destroy", |
| 330 G_CALLBACK(help_window_destroy_cb), NULL); | |
| 1 | 331 } |
| 332 | |
| 9 | 333 |
| 1 | 334 /* |
| 335 *----------------------------------------------------------------------------- | |
| 336 * keyboard functions | |
| 337 *----------------------------------------------------------------------------- | |
| 338 */ | |
| 339 | |
| 340 void keyboard_scroll_calc(gint *x, gint *y, GdkEventKey *event) | |
| 341 { | |
| 342 static gint delta = 0; | |
| 343 static guint32 time_old = 0; | |
| 344 static guint keyval_old = 0; | |
| 345 | |
| 9 | 346 if (event->state & GDK_CONTROL_MASK) |
| 347 { | |
| 348 if (*x < 0) *x = G_MININT / 2; | |
| 349 if (*x > 0) *x = G_MAXINT / 2; | |
| 350 if (*y < 0) *y = G_MININT / 2; | |
| 351 if (*y > 0) *y = G_MAXINT / 2; | |
| 352 | |
| 353 return; | |
| 354 } | |
| 355 | |
| 318 | 356 if (options->progressive_key_scrolling) |
| 1 | 357 { |
| 358 guint32 time_diff; | |
| 359 | |
| 360 time_diff = event->time - time_old; | |
| 361 | |
| 362 /* key pressed within 125ms ? (1/8 second) */ | |
| 363 if (time_diff > 125 || event->keyval != keyval_old) delta = 0; | |
| 364 | |
| 365 time_old = event->time; | |
| 366 keyval_old = event->keyval; | |
| 367 | |
| 368 delta += 2; | |
| 369 } | |
| 370 else | |
| 371 { | |
| 372 delta = 8; | |
| 373 } | |
| 374 | |
| 375 *x = *x * delta; | |
| 376 *y = *y * delta; | |
| 377 } | |
| 378 | |
| 9 | 379 |
| 380 /* | |
| 381 *----------------------------------------------------------------------------- | |
| 382 * remote functions | |
| 383 *----------------------------------------------------------------------------- | |
| 384 */ | |
| 385 | |
| 386 static void gr_image_next(const gchar *text, gpointer data) | |
| 387 { | |
| 388 layout_image_next(NULL); | |
| 389 } | |
| 390 | |
| 391 static void gr_image_prev(const gchar *text, gpointer data) | |
| 392 { | |
| 393 layout_image_prev(NULL); | |
| 394 } | |
| 395 | |
| 396 static void gr_image_first(const gchar *text, gpointer data) | |
| 397 { | |
| 398 layout_image_first(NULL); | |
| 399 } | |
| 400 | |
| 401 static void gr_image_last(const gchar *text, gpointer data) | |
| 402 { | |
| 403 layout_image_last(NULL); | |
| 404 } | |
| 405 | |
| 406 static void gr_fullscreen_toggle(const gchar *text, gpointer data) | |
| 407 { | |
| 408 layout_image_full_screen_toggle(NULL); | |
| 409 } | |
| 410 | |
| 411 static void gr_fullscreen_start(const gchar *text, gpointer data) | |
| 1 | 412 { |
| 9 | 413 layout_image_full_screen_start(NULL); |
| 414 } | |
| 415 | |
| 416 static void gr_fullscreen_stop(const gchar *text, gpointer data) | |
| 417 { | |
| 418 layout_image_full_screen_stop(NULL); | |
| 419 } | |
| 420 | |
| 421 static void gr_slideshow_start_rec(const gchar *text, gpointer data) | |
| 422 { | |
| 423 GList *list; | |
| 424 | |
| 425 list = path_list_recursive(text); | |
| 426 if (!list) return; | |
| 214 | 427 //printf("length: %d\n", g_list_length(list)); |
| 9 | 428 layout_image_slideshow_stop(NULL); |
| 429 layout_image_slideshow_start_from_list(NULL, list); | |
| 430 } | |
| 1 | 431 |
| 9 | 432 static void gr_slideshow_toggle(const gchar *text, gpointer data) |
| 433 { | |
| 434 layout_image_slideshow_toggle(NULL); | |
| 435 } | |
| 436 | |
| 437 static void gr_slideshow_start(const gchar *text, gpointer data) | |
| 438 { | |
| 439 layout_image_slideshow_start(NULL); | |
| 440 } | |
| 441 | |
| 442 static void gr_slideshow_stop(const gchar *text, gpointer data) | |
| 443 { | |
| 444 layout_image_slideshow_stop(NULL); | |
| 445 } | |
| 446 | |
| 447 static void gr_slideshow_delay(const gchar *text, gpointer data) | |
| 448 { | |
| 449 gdouble n; | |
| 450 | |
| 451 n = strtod(text, NULL); | |
| 452 if (n < SLIDESHOW_MIN_SECONDS || n > SLIDESHOW_MAX_SECONDS) | |
| 1 | 453 { |
| 403 | 454 printf_term("Remote slideshow delay out of range (%.1f to %.1f)\n", |
| 455 SLIDESHOW_MIN_SECONDS, SLIDESHOW_MAX_SECONDS); | |
| 9 | 456 return; |
| 457 } | |
| 326 | 458 options->slideshow.delay = (gint)(n * 10.0 + 0.01); |
| 9 | 459 } |
| 460 | |
| 461 static void gr_tools_show(const gchar *text, gpointer data) | |
| 462 { | |
| 463 gint popped; | |
| 464 gint hidden; | |
| 465 | |
| 466 if (layout_tools_float_get(NULL, &popped, &hidden) && hidden) | |
| 467 { | |
| 468 layout_tools_float_set(NULL, popped, FALSE); | |
| 1 | 469 } |
| 9 | 470 } |
| 1 | 471 |
| 9 | 472 static void gr_tools_hide(const gchar *text, gpointer data) |
| 473 { | |
| 474 gint popped; | |
| 475 gint hidden; | |
| 476 | |
| 477 if (layout_tools_float_get(NULL, &popped, &hidden) && !hidden) | |
| 1 | 478 { |
| 9 | 479 layout_tools_float_set(NULL, popped, TRUE); |
| 480 } | |
| 481 } | |
| 482 | |
| 483 static gint gr_quit_idle_cb(gpointer data) | |
| 484 { | |
| 278 | 485 exit_program(); |
| 9 | 486 |
| 487 return FALSE; | |
| 488 } | |
| 489 | |
| 490 static void gr_quit(const gchar *text, gpointer data) | |
| 491 { | |
| 492 /* schedule exit when idle, if done from within a | |
| 493 * remote handler remote_close will crash | |
| 494 */ | |
| 495 g_idle_add(gr_quit_idle_cb, NULL); | |
| 496 } | |
| 497 | |
| 498 static void gr_file_load(const gchar *text, gpointer data) | |
| 499 { | |
| 500 if (isfile(text)) | |
| 501 { | |
| 502 if (file_extension_match(text, ".gqv")) | |
| 1 | 503 { |
| 9 | 504 collection_window_new(text); |
| 505 } | |
| 506 else | |
| 507 { | |
| 508 layout_set_path(NULL, text); | |
| 1 | 509 } |
| 510 } | |
| 9 | 511 else if (isdir(text)) |
| 512 { | |
| 513 layout_set_path(NULL, text); | |
| 514 } | |
| 515 else | |
| 516 { | |
| 517 printf("remote sent filename that does not exist:\"%s\"\n", text); | |
| 518 } | |
| 519 } | |
| 520 | |
| 521 static void gr_file_view(const gchar *text, gpointer data) | |
| 522 { | |
| 138 | 523 view_window_new(file_data_new_simple(text)); |
| 9 | 524 } |
| 525 | |
| 526 static void gr_list_clear(const gchar *text, gpointer data) | |
| 527 { | |
| 279 | 528 if (command_collection) collection_unref(command_collection); |
| 529 command_collection = NULL; | |
| 9 | 530 } |
| 531 | |
| 532 static void gr_list_add(const gchar *text, gpointer data) | |
| 533 { | |
| 534 gint new = TRUE; | |
| 535 | |
| 279 | 536 if (!command_collection) |
| 9 | 537 { |
| 538 CollectionData *cd; | |
| 539 | |
| 540 cd = collection_new(""); | |
| 541 | |
| 542 g_free(cd->path); | |
| 543 cd->path = NULL; | |
| 544 g_free(cd->name); | |
| 545 cd->name = g_strdup(_("Command line")); | |
| 546 | |
| 279 | 547 command_collection = cd; |
| 9 | 548 } |
| 549 else | |
| 550 { | |
| 279 | 551 new = (!collection_get_first(command_collection)); |
| 9 | 552 } |
| 1 | 553 |
| 279 | 554 if (collection_add(command_collection, file_data_new_simple(text), FALSE) && new) |
| 9 | 555 { |
| 279 | 556 layout_image_set_collection(NULL, command_collection, |
| 557 collection_get_first(command_collection)); | |
| 9 | 558 } |
| 559 } | |
| 560 | |
| 561 static void gr_raise(const gchar *text, gpointer data) | |
| 562 { | |
| 563 LayoutWindow *lw = NULL; | |
| 564 | |
| 565 if (layout_valid(&lw)) | |
| 566 { | |
| 567 gtk_window_present(GTK_WINDOW(lw->window)); | |
| 568 } | |
| 569 } | |
| 570 | |
| 571 typedef struct _RemoteCommandEntry RemoteCommandEntry; | |
| 572 struct _RemoteCommandEntry { | |
| 573 gchar *opt_s; | |
| 574 gchar *opt_l; | |
| 575 void (*func)(const gchar *text, gpointer data); | |
| 576 gint needs_extra; | |
| 577 gint prefer_command_line; | |
| 578 gchar *description; | |
| 579 }; | |
| 580 | |
| 581 static RemoteCommandEntry remote_commands[] = { | |
| 582 /* short, long callback, extra, prefer,description */ | |
| 583 { "-n", "--next", gr_image_next, FALSE, FALSE, N_("next image") }, | |
| 584 { "-b", "--back", gr_image_prev, FALSE, FALSE, N_("previous image") }, | |
| 585 { NULL, "--first", gr_image_first, FALSE, FALSE, N_("first image") }, | |
| 442 | 586 { NULL, "--last", gr_image_last, FALSE, FALSE, N_("last image") }, |
| 9 | 587 { "-f", "--fullscreen", gr_fullscreen_toggle, FALSE, TRUE, N_("toggle full screen") }, |
| 588 { "-fs","--fullscreen-start", gr_fullscreen_start, FALSE, FALSE, N_("start full screen") }, | |
| 589 { "-fS","--fullscreen-stop", gr_fullscreen_stop, FALSE, FALSE, N_("stop full screen") }, | |
| 590 { "-s", "--slideshow", gr_slideshow_toggle, FALSE, TRUE, N_("toggle slide show") }, | |
| 591 { "-ss","--slideshow-start", gr_slideshow_start, FALSE, FALSE, N_("start slide show") }, | |
| 592 { "-sS","--slideshow-stop", gr_slideshow_stop, FALSE, FALSE, N_("stop slide show") }, | |
| 593 { "-sr","--slideshow-recurse", gr_slideshow_start_rec, TRUE, FALSE, N_("start recursive slide show") }, | |
| 594 { "-d", "--delay=", gr_slideshow_delay, TRUE, FALSE, N_("set slide show delay in seconds") }, | |
| 595 { "+t", "--tools-show", gr_tools_show, FALSE, TRUE, N_("show tools") }, | |
| 596 { "-t", "--tools-hide", gr_tools_hide, FALSE, TRUE, N_("hide tools") }, | |
| 597 { "-q", "--quit", gr_quit, FALSE, FALSE, N_("quit") }, | |
| 598 { NULL, "file:", gr_file_load, TRUE, FALSE, N_("open file") }, | |
| 599 { NULL, "view:", gr_file_view, TRUE, FALSE, N_("open file in new window") }, | |
| 600 { NULL, "--list-clear", gr_list_clear, FALSE, FALSE, NULL }, | |
| 601 { NULL, "--list-add:", gr_list_add, TRUE, FALSE, NULL }, | |
| 602 { NULL, "raise", gr_raise, FALSE, FALSE, NULL }, | |
| 603 { NULL, NULL, NULL, FALSE, FALSE, NULL } | |
| 604 }; | |
| 605 | |
| 279 | 606 static RemoteCommandEntry *remote_command_find(const gchar *text, const gchar **offset) |
| 9 | 607 { |
| 608 gint match = FALSE; | |
| 609 gint i; | |
| 610 | |
| 611 i = 0; | |
| 612 while (!match && remote_commands[i].func != NULL) | |
| 1 | 613 { |
| 9 | 614 if (remote_commands[i].needs_extra) |
| 615 { | |
| 616 if (remote_commands[i].opt_s && | |
| 617 strncmp(remote_commands[i].opt_s, text, strlen(remote_commands[i].opt_s)) == 0) | |
| 618 { | |
| 619 if (offset) *offset = text + strlen(remote_commands[i].opt_s); | |
| 620 return &remote_commands[i]; | |
| 621 } | |
| 622 else if (remote_commands[i].opt_l && | |
| 623 strncmp(remote_commands[i].opt_l, text, strlen(remote_commands[i].opt_l)) == 0) | |
| 624 { | |
| 625 if (offset) *offset = text + strlen(remote_commands[i].opt_l); | |
| 626 return &remote_commands[i]; | |
| 627 } | |
| 628 } | |
| 629 else | |
| 630 { | |
| 631 if ((remote_commands[i].opt_s && strcmp(remote_commands[i].opt_s, text) == 0) || | |
| 632 (remote_commands[i].opt_l && strcmp(remote_commands[i].opt_l, text) == 0)) | |
| 1 | 633 { |
| 9 | 634 if (offset) *offset = text; |
| 635 return &remote_commands[i]; | |
| 1 | 636 } |
| 9 | 637 } |
| 638 | |
| 639 i++; | |
| 640 } | |
| 641 | |
| 642 return NULL; | |
| 643 } | |
| 644 | |
| 279 | 645 static void remote_cb(RemoteConnection *rc, const gchar *text, gpointer data) |
| 9 | 646 { |
| 647 RemoteCommandEntry *entry; | |
| 648 const gchar *offset; | |
| 649 | |
| 279 | 650 entry = remote_command_find(text, &offset); |
| 9 | 651 if (entry && entry->func) |
| 652 { | |
| 653 entry->func(offset, data); | |
| 654 } | |
| 655 else | |
| 656 { | |
| 657 printf("unknown remote command:%s\n", text); | |
| 658 } | |
| 659 } | |
| 660 | |
| 279 | 661 static void remote_help(void) |
| 9 | 662 { |
| 663 gint i; | |
| 664 | |
| 665 print_term(_("Remote command list:\n")); | |
| 666 | |
| 667 i = 0; | |
| 668 while (remote_commands[i].func != NULL) | |
| 669 { | |
| 670 if (remote_commands[i].description) | |
| 671 { | |
| 403 | 672 printf_term(" %-3s%s %-20s %s\n", |
| 673 (remote_commands[i].opt_s) ? remote_commands[i].opt_s : "", | |
| 674 (remote_commands[i].opt_s && remote_commands[i].opt_l) ? "," : " ", | |
| 675 (remote_commands[i].opt_l) ? remote_commands[i].opt_l : "", | |
| 676 _(remote_commands[i].description)); | |
| 9 | 677 } |
| 678 i++; | |
| 679 } | |
| 680 } | |
| 681 | |
| 279 | 682 static GList *remote_build_list(GList *list, int argc, char *argv[]) |
| 9 | 683 { |
| 684 gint i; | |
| 685 | |
| 686 i = 1; | |
| 687 while (i < argc) | |
| 688 { | |
| 689 RemoteCommandEntry *entry; | |
| 690 | |
| 279 | 691 entry = remote_command_find(argv[i], NULL); |
| 9 | 692 if (entry) |
| 693 { | |
| 694 list = g_list_append(list, argv[i]); | |
| 695 } | |
| 696 i++; | |
| 1 | 697 } |
| 698 | |
| 9 | 699 return list; |
| 700 } | |
| 701 | |
| 279 | 702 static void remote_control(const gchar *arg_exec, GList *remote_list, const gchar *path, |
| 9 | 703 GList *cmd_list, GList *collection_list) |
| 704 { | |
| 705 RemoteConnection *rc; | |
| 706 gint started = FALSE; | |
| 707 gchar *buf; | |
| 708 | |
| 283 | 709 buf = g_strconcat(homedir(), "/", GQ_RC_DIR, "/.command", NULL); |
| 9 | 710 rc = remote_client_open(buf); |
| 711 if (!rc) | |
| 712 { | |
| 713 GString *command; | |
| 714 GList *work; | |
| 715 gint retry_count = 12; | |
| 716 gint blank = FALSE; | |
| 717 | |
| 403 | 718 printf_term(_("Remote %s not running, starting..."), GQ_APPNAME); |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
719 |
| 9 | 720 command = g_string_new(arg_exec); |
| 721 | |
| 722 work = remote_list; | |
| 723 while (work) | |
| 724 { | |
| 725 gchar *text; | |
| 726 RemoteCommandEntry *entry; | |
| 727 | |
| 728 text = work->data; | |
| 729 work = work->next; | |
| 730 | |
| 279 | 731 entry = remote_command_find(text, NULL); |
| 9 | 732 if (entry) |
| 733 { | |
| 734 if (entry->prefer_command_line) | |
| 735 { | |
| 736 remote_list = g_list_remove(remote_list, text); | |
| 737 g_string_append(command, " "); | |
| 738 g_string_append(command, text); | |
| 739 } | |
| 740 if (entry->opt_l && strcmp(entry->opt_l, "file:") == 0) | |
| 741 { | |
| 742 blank = TRUE; | |
| 743 } | |
| 744 } | |
| 745 } | |
| 746 | |
| 747 if (blank || cmd_list || path) g_string_append(command, " --blank"); | |
| 748 if (debug) g_string_append(command, " --debug"); | |
| 749 | |
| 750 g_string_append(command, " &"); | |
| 751 system(command->str); | |
| 752 g_string_free(command, TRUE); | |
| 753 | |
| 754 while (!rc && retry_count > 0) | |
| 755 { | |
| 756 usleep((retry_count > 10) ? 500000 : 1000000); | |
| 757 rc = remote_client_open(buf); | |
| 758 if (!rc) print_term("."); | |
| 759 retry_count--; | |
| 760 } | |
| 761 | |
| 762 print_term("\n"); | |
| 763 | |
| 764 started = TRUE; | |
| 765 } | |
| 766 g_free(buf); | |
| 767 | |
| 768 if (rc) | |
| 1 | 769 { |
| 9 | 770 GList *work; |
| 771 const gchar *prefix; | |
| 772 gint use_path = TRUE; | |
| 773 gint sent = FALSE; | |
| 774 | |
| 775 work = remote_list; | |
| 776 while (work) | |
| 777 { | |
| 778 gchar *text; | |
| 779 RemoteCommandEntry *entry; | |
| 780 | |
| 781 text = work->data; | |
| 782 work = work->next; | |
| 783 | |
| 279 | 784 entry = remote_command_find(text, NULL); |
| 9 | 785 if (entry && |
| 786 entry->opt_l && | |
| 787 strcmp(entry->opt_l, "file:") == 0) use_path = FALSE; | |
| 788 | |
| 789 remote_client_send(rc, text); | |
| 790 | |
| 791 sent = TRUE; | |
| 792 } | |
| 793 | |
| 794 if (cmd_list && cmd_list->next) | |
| 795 { | |
| 796 prefix = "--list-add:"; | |
| 797 remote_client_send(rc, "--list-clear"); | |
| 798 } | |
| 799 else | |
| 800 { | |
| 801 prefix = "file:"; | |
| 802 } | |
| 803 | |
| 804 work = cmd_list; | |
| 805 while (work) | |
| 806 { | |
| 807 const gchar *name; | |
| 808 gchar *text; | |
| 809 | |
| 810 name = work->data; | |
| 811 work = work->next; | |
| 812 | |
| 813 text = g_strconcat(prefix, name, NULL); | |
| 814 remote_client_send(rc, text); | |
| 815 g_free(text); | |
| 816 | |
| 817 sent = TRUE; | |
| 818 } | |
| 819 | |
| 820 if (path && !cmd_list && use_path) | |
| 821 { | |
| 822 gchar *text; | |
| 823 | |
| 824 text = g_strdup_printf("file:%s", path); | |
| 825 remote_client_send(rc, text); | |
| 826 g_free(text); | |
| 827 | |
| 828 sent = TRUE; | |
| 829 } | |
| 830 | |
| 831 work = collection_list; | |
| 832 while (work) | |
| 833 { | |
| 834 const gchar *name; | |
| 835 gchar *text; | |
| 836 | |
| 837 name = work->data; | |
| 838 work = work->next; | |
| 839 | |
| 840 text = g_strdup_printf("file:%s", name); | |
| 841 remote_client_send(rc, text); | |
| 842 g_free(text); | |
| 843 | |
| 844 sent = TRUE; | |
| 845 } | |
| 846 | |
| 847 if (!started && !sent) | |
| 848 { | |
| 849 remote_client_send(rc, "raise"); | |
| 850 } | |
| 851 } | |
| 852 else | |
| 853 { | |
| 854 print_term(_("Remote not available\n")); | |
| 1 | 855 } |
| 856 | |
| 9 | 857 _exit(0); |
| 1 | 858 } |
| 859 | |
| 860 /* | |
| 861 *----------------------------------------------------------------------------- | |
| 3 | 862 * command line parser (private) hehe, who needs popt anyway? |
| 1 | 863 *----------------------------------------------------------------------------- |
| 442 | 864 */ |
| 1 | 865 |
| 9 | 866 static gint startup_blank = FALSE; |
| 3 | 867 static gint startup_full_screen = FALSE; |
| 868 static gint startup_in_slideshow = FALSE; | |
| 9 | 869 static gint startup_command_line_collection = FALSE; |
| 3 | 870 |
| 9 | 871 |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
872 static void parse_command_line_add_file(const gchar *file_path, gchar **path, gchar **file, |
| 442 | 873 GList **list, GList **collection_list) |
| 1 | 874 { |
| 9 | 875 gchar *path_parsed; |
| 876 | |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
877 path_parsed = g_strdup(file_path); |
| 9 | 878 parse_out_relatives(path_parsed); |
| 879 | |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
880 if (file_extension_match(path_parsed, ".gqv")) |
| 9 | 881 { |
| 882 *collection_list = g_list_append(*collection_list, path_parsed); | |
| 883 } | |
| 884 else | |
| 885 { | |
| 886 if (!*path) *path = remove_level_from_path(path_parsed); | |
| 887 if (!*file) *file = g_strdup(path_parsed); | |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
888 *list = g_list_prepend(*list, path_parsed); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
889 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
890 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
891 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
892 static void parse_command_line_add_dir(const gchar *dir, gchar **path, gchar **file, |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
893 GList **list) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
894 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
895 GList *files = NULL; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
896 gchar *path_parsed; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
897 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
898 path_parsed = g_strdup(dir); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
899 parse_out_relatives(path_parsed); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
900 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
901 if (path_list(path_parsed, &files, NULL)) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
902 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
903 GList *work; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
904 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
905 files = path_list_filter(files, FALSE); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
906 files = path_list_sort(files); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
907 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
908 work = files; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
909 while (work) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
910 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
911 gchar *p; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
912 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
913 p = work->data; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
914 if (!*path) *path = remove_level_from_path(p); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
915 if (!*file) *file = g_strdup(p); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
916 *list = g_list_prepend(*list, p); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
917 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
918 work = work->next; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
919 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
920 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
921 g_list_free(files); |
| 9 | 922 } |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
923 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
924 g_free(path_parsed); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
925 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
926 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
927 static void parse_command_line_process_dir(const gchar *dir, gchar **path, gchar **file, |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
928 GList **list, gchar **first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
929 { |
| 442 | 930 |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
931 if (!*list && !*first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
932 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
933 *first_dir = g_strdup(dir); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
934 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
935 else |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
936 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
937 if (*first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
938 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
939 parse_command_line_add_dir(*first_dir, path, file, list); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
940 g_free(*first_dir); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
941 *first_dir = NULL; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
942 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
943 parse_command_line_add_dir(dir, path, file, list); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
944 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
945 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
946 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
947 static void parse_command_line_process_file(const gchar *file_path, gchar **path, gchar **file, |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
948 GList **list, GList **collection_list, gchar **first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
949 { |
| 442 | 950 |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
951 if (*first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
952 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
953 parse_command_line_add_dir(*first_dir, path, file, list); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
954 g_free(*first_dir); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
955 *first_dir = NULL; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
956 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
957 parse_command_line_add_file(file_path, path, file, list, collection_list); |
| 9 | 958 } |
| 959 | |
| 960 static void parse_command_line(int argc, char *argv[], gchar **path, gchar **file, | |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
961 GList **cmd_list, GList **collection_list, |
|
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
962 gchar **geometry) |
| 9 | 963 { |
| 964 GList *list = NULL; | |
| 965 GList *remote_list = NULL; | |
| 966 gint remote_do = FALSE; | |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
967 gchar *first_dir = NULL; |
| 9 | 968 |
| 1 | 969 if (argc > 1) |
| 970 { | |
| 971 gint i; | |
| 972 gchar *base_dir = get_current_dir(); | |
| 973 i = 1; | |
| 974 while (i < argc) | |
| 975 { | |
| 9 | 976 const gchar *cmd_line = argv[i]; |
| 977 gchar *cmd_all = concat_dir_and_file(base_dir, cmd_line); | |
| 1 | 978 |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
979 if (cmd_line[0] == '/' && isdir(cmd_line)) |
| 1 | 980 { |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
981 parse_command_line_process_dir(cmd_line, path, file, &list, &first_dir); |
| 1 | 982 } |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
983 else if (isdir(cmd_all)) |
| 1 | 984 { |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
985 parse_command_line_process_dir(cmd_all, path, file, &list, &first_dir); |
| 1 | 986 } |
| 9 | 987 else if (cmd_line[0] == '/' && isfile(cmd_line)) |
| 1 | 988 { |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
989 parse_command_line_process_file(cmd_line, path, file, |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
990 &list, collection_list, &first_dir); |
| 1 | 991 } |
| 9 | 992 else if (isfile(cmd_all)) |
| 1 | 993 { |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
994 parse_command_line_process_file(cmd_all, path, file, |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
995 &list, collection_list, &first_dir); |
| 1 | 996 } |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
997 else if (strncmp(cmd_line, "--debug", 7) == 0 && (cmd_line[7] == '\0' || cmd_line[7] == '=')) |
| 1 | 998 { |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
999 /* do nothing but do not produce warnings */ |
| 1 | 1000 } |
| 1001 else if (strcmp(cmd_line, "+t") == 0 || | |
| 3 | 1002 strcmp(cmd_line, "--with-tools") == 0) |
| 1 | 1003 { |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1004 options->layout.tools_float = FALSE; |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1005 options->layout.tools_hidden = FALSE; |
| 9 | 1006 |
| 1007 remote_list = g_list_append(remote_list, "+t"); | |
| 1 | 1008 } |
| 1009 else if (strcmp(cmd_line, "-t") == 0 || | |
| 3 | 1010 strcmp(cmd_line, "--without-tools") == 0) |
| 1 | 1011 { |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1012 options->layout.tools_hidden = TRUE; |
| 9 | 1013 |
| 1014 remote_list = g_list_append(remote_list, "-t"); | |
| 1 | 1015 } |
| 3 | 1016 else if (strcmp(cmd_line, "-f") == 0 || |
| 1017 strcmp(cmd_line, "--fullscreen") == 0) | |
| 1018 { | |
| 1019 startup_full_screen = TRUE; | |
| 1020 } | |
| 1021 else if (strcmp(cmd_line, "-s") == 0 || | |
| 1022 strcmp(cmd_line, "--slideshow") == 0) | |
| 1023 { | |
| 1024 startup_in_slideshow = TRUE; | |
| 1025 } | |
| 9 | 1026 else if (strcmp(cmd_line, "-l") == 0 || |
| 1027 strcmp(cmd_line, "--list") == 0) | |
| 1028 { | |
| 1029 startup_command_line_collection = TRUE; | |
| 1030 } | |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1031 else if (strncmp(cmd_line, "--geometry=", 11) == 0) |
|
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1032 { |
|
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1033 if (!*geometry) *geometry = g_strdup(cmd_line + 11); |
|
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1034 } |
| 9 | 1035 else if (strcmp(cmd_line, "-r") == 0 || |
| 1036 strcmp(cmd_line, "--remote") == 0) | |
| 1037 { | |
| 1038 if (!remote_do) | |
| 1039 { | |
| 1040 remote_do = TRUE; | |
| 279 | 1041 remote_list = remote_build_list(remote_list, argc, argv); |
| 9 | 1042 } |
| 1043 } | |
| 1044 else if (strcmp(cmd_line, "-rh") == 0 || | |
| 1045 strcmp(cmd_line, "--remote-help") == 0) | |
| 1046 { | |
| 279 | 1047 remote_help(); |
| 9 | 1048 exit (0); |
| 1049 } | |
| 1050 else if (strcmp(cmd_line, "--blank") == 0) | |
| 1051 { | |
| 1052 startup_blank = TRUE; | |
| 1053 } | |
| 1054 else if (strcmp(cmd_line, "-v") == 0 || | |
| 1055 strcmp(cmd_line, "--version") == 0) | |
| 1056 { | |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1057 printf("%s %s\n", GQ_APPNAME, VERSION); |
| 9 | 1058 exit (0); |
| 1059 } | |
| 1060 else if (strcmp(cmd_line, "--alternate") == 0) | |
| 1061 { | |
| 1062 /* enable faster experimental algorithm */ | |
| 1063 printf("Alternate similarity algorithm enabled\n"); | |
| 1064 image_sim_alternate_set(TRUE); | |
| 1065 } | |
| 3 | 1066 else if (strcmp(cmd_line, "-h") == 0 || |
| 1067 strcmp(cmd_line, "--help") == 0) | |
| 1 | 1068 { |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1069 printf("%s %s\n", GQ_APPNAME, VERSION); |
| 403 | 1070 printf_term(_("Usage: %s [options] [path]\n\n"), GQ_APPNAME_LC); |
| 9 | 1071 print_term(_("valid options are:\n")); |
| 1072 print_term(_(" +t, --with-tools force show of tools\n")); | |
| 1073 print_term(_(" -t, --without-tools force hide of tools\n")); | |
| 1074 print_term(_(" -f, --fullscreen start in full screen mode\n")); | |
| 1075 print_term(_(" -s, --slideshow start in slideshow mode\n")); | |
| 1076 print_term(_(" -l, --list open collection window for command line\n")); | |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1077 print_term(_(" --geometry=GEOMETRY set main window location\n")); |
| 9 | 1078 print_term(_(" -r, --remote send following commands to open window\n")); |
| 1079 print_term(_(" -rh,--remote-help print remote command list\n")); | |
|
227
41fc4bfc8b25
Add a debug level spinner at the end of Preferences > Advanced.
zas_
parents:
218
diff
changeset
|
1080 #ifdef DEBUG |
| 379 | 1081 print_term(_(" --debug[=level] turn on debug output\n")); |
|
227
41fc4bfc8b25
Add a debug level spinner at the end of Preferences > Advanced.
zas_
parents:
218
diff
changeset
|
1082 #endif |
| 9 | 1083 print_term(_(" -v, --version print version info\n")); |
| 1084 print_term(_(" -h, --help show this message\n\n")); | |
| 442 | 1085 |
| 9 | 1086 #if 0 |
| 1087 /* these options are not officially supported! | |
| 1088 * only for testing new features, no need to translate them */ | |
| 1089 print_term( " --alternate use alternate similarity algorithm\n"); | |
| 1090 #endif | |
| 442 | 1091 |
| 1 | 1092 exit (0); |
| 1093 } | |
| 9 | 1094 else if (!remote_do) |
| 1 | 1095 { |
| 403 | 1096 printf_term(_("invalid or ignored: %s\nUse --help for options\n"), cmd_line); |
| 1 | 1097 } |
| 9 | 1098 |
| 1 | 1099 g_free(cmd_all); |
| 1100 i++; | |
| 1101 } | |
| 1102 g_free(base_dir); | |
| 1103 parse_out_relatives(*path); | |
| 1104 parse_out_relatives(*file); | |
| 1105 } | |
| 9 | 1106 |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1107 list = g_list_reverse(list); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1108 |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1109 if (!*path && first_dir) |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1110 { |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1111 *path = first_dir; |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1112 first_dir = NULL; |
|
79
528e3432e0c0
Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents:
76
diff
changeset
|
1113 |
|
528e3432e0c0
Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents:
76
diff
changeset
|
1114 parse_out_relatives(*path); |
|
76
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1115 } |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1116 g_free(first_dir); |
|
07773a3c5b29
Sun Oct 15 04:03:41 2006 John Ellis <johne@verizon.net>
gqview
parents:
21
diff
changeset
|
1117 |
| 9 | 1118 if (remote_do) |
| 1119 { | |
| 279 | 1120 remote_control(argv[0], remote_list, *path, list, *collection_list); |
| 9 | 1121 } |
| 1122 g_list_free(remote_list); | |
| 1123 | |
| 1124 if (list && list->next) | |
| 1125 { | |
| 1126 *cmd_list = list; | |
| 1127 } | |
| 1128 else | |
| 1129 { | |
| 1130 path_list_free(list); | |
| 1131 *cmd_list = NULL; | |
| 1132 } | |
| 1 | 1133 } |
| 1134 | |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1135 static void parse_command_line_for_debug_option(int argc, char *argv[]) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1136 { |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1137 #ifdef DEBUG |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1138 const gchar *debug_option = "--debug"; |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1139 gint len = strlen(debug_option); |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1140 |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1141 if (argc > 1) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1142 { |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1143 gint i; |
| 442 | 1144 |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1145 for (i = 1; i < argc; i++) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1146 { |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1147 const gchar *cmd_line = argv[i]; |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1148 if (strncmp(cmd_line, debug_option, len) == 0) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1149 { |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1150 gint cmd_line_len = strlen(cmd_line); |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1151 |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1152 /* we now increment the debug state for verbosity */ |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1153 if (cmd_line_len == len) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1154 debug++; |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1155 else if (cmd_line[len] == '=' && g_ascii_isdigit(cmd_line[len+1])) |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1156 { |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1157 gint n = atoi(cmd_line + len + 1); |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1158 if (n < 0) n = 1; |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1159 debug += n; |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1160 } |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1161 } |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1162 } |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1163 } |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1164 |
|
506
fc9c8a3e1a8b
Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents:
495
diff
changeset
|
1165 DEBUG_1("debugging output enabled (level %d)", debug); |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1166 #endif |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1167 } |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1168 |
| 1 | 1169 /* |
| 1170 *----------------------------------------------------------------------------- | |
| 1171 * startup, init, and exit | |
| 1172 *----------------------------------------------------------------------------- | |
| 442 | 1173 */ |
| 1 | 1174 |
| 9 | 1175 #define RC_HISTORY_NAME "history" |
| 1176 | |
| 1177 static void keys_load(void) | |
| 1178 { | |
| 1179 gchar *path; | |
| 1180 | |
| 283 | 1181 path = g_strconcat(homedir(), "/", GQ_RC_DIR, "/", RC_HISTORY_NAME, NULL); |
| 9 | 1182 history_list_load(path); |
| 1183 g_free(path); | |
| 1184 } | |
| 1185 | |
| 1186 static void keys_save(void) | |
| 1187 { | |
| 1188 gchar *path; | |
| 1189 | |
| 283 | 1190 path = g_strconcat(homedir(), "/", GQ_RC_DIR, "/", RC_HISTORY_NAME, NULL); |
| 9 | 1191 history_list_save(path); |
| 1192 g_free(path); | |
| 1193 } | |
| 1194 | |
| 1195 static void check_for_home_path(gchar *path) | |
| 1 | 1196 { |
| 9 | 1197 gchar *buf; |
| 1198 | |
| 1199 buf = g_strconcat(homedir(), "/", path, NULL); | |
| 1200 if (!isdir(buf)) | |
| 1201 { | |
| 403 | 1202 printf_term(_("Creating %s dir:%s\n"), GQ_APPNAME, buf); |
| 442 | 1203 |
| 9 | 1204 if (!mkdir_utf8(buf, 0755)) |
| 1205 { | |
| 403 | 1206 printf_term(_("Could not create dir:%s\n"), buf); |
| 9 | 1207 } |
| 1208 } | |
| 1209 g_free(buf); | |
| 1210 } | |
| 1211 | |
| 1212 static void setup_default_options(void) | |
| 1213 { | |
| 1214 gchar *path; | |
| 1 | 1215 gint i; |
| 1216 | |
| 283 | 1217 for (i = 0; i < GQ_EDITOR_SLOTS; i++) |
| 1 | 1218 { |
| 318 | 1219 options->editor_name[i] = NULL; |
| 1220 options->editor_command[i] = NULL; | |
| 1 | 1221 } |
| 1222 | |
| 9 | 1223 editor_reset_defaults(); |
| 1 | 1224 |
| 9 | 1225 bookmark_add_default(_("Home"), homedir()); |
| 1226 path = concat_dir_and_file(homedir(), "Desktop"); | |
| 1227 bookmark_add_default(_("Desktop"), path); | |
| 1228 g_free(path); | |
| 283 | 1229 path = concat_dir_and_file(homedir(), GQ_RC_DIR_COLLECTIONS); |
| 9 | 1230 bookmark_add_default(_("Collections"), path); |
| 1231 g_free(path); | |
| 1 | 1232 |
|
341
15c6b94545a2
Move safe_delete* and in place rename options to file_ops
zas_
parents:
340
diff
changeset
|
1233 g_free(options->file_ops.safe_delete_path); |
|
15c6b94545a2
Move safe_delete* and in place rename options to file_ops
zas_
parents:
340
diff
changeset
|
1234 options->file_ops.safe_delete_path = concat_dir_and_file(homedir(), GQ_RC_DIR_TRASH); |
|
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1235 |
|
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1236 for (i = 0; i < COLOR_PROFILE_INPUTS; i++) |
|
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1237 { |
| 327 | 1238 options->color_profile.input_file[i] = NULL; |
| 1239 options->color_profile.input_name[i] = NULL; | |
|
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1240 } |
|
189
deea9e11f1d4
fixed reading sidecar extensions from config file
nadvornik
parents:
145
diff
changeset
|
1241 |
|
469
a05c72927e23
Rename few functions and replace fullscreen info with image overlay template string.
zas_
parents:
468
diff
changeset
|
1242 set_default_image_overlay_template_string(options); |
|
189
deea9e11f1d4
fixed reading sidecar extensions from config file
nadvornik
parents:
145
diff
changeset
|
1243 sidecar_ext_add_defaults(); |
|
367
3556cc825e59
Move layout.order default init to setup_default_options().
zas_
parents:
358
diff
changeset
|
1244 options->layout.order = g_strdup("123"); |
| 1 | 1245 } |
| 1246 | |
| 278 | 1247 static void exit_program_final(void) |
| 1 | 1248 { |
| 9 | 1249 gchar *path; |
| 1250 gchar *pathl; | |
| 1251 LayoutWindow *lw = NULL; | |
| 1252 | |
| 279 | 1253 remote_close(remote_connection); |
| 9 | 1254 |
| 1255 collect_manager_flush(); | |
| 1 | 1256 |
| 9 | 1257 if (layout_valid(&lw)) |
| 1258 { | |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1259 options->layout.main_window.maximized = window_maximized(lw->window); |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1260 if (!options->layout.main_window.maximized) |
| 9 | 1261 { |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1262 layout_geometry_get(NULL, &options->layout.main_window.x, &options->layout.main_window.y, |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1263 &options->layout.main_window.w, &options->layout.main_window.h); |
| 9 | 1264 } |
|
468
2df505c60459
Replace fullscreen.info and fullscreen.show_info options by:
zas_
parents:
446
diff
changeset
|
1265 options->image_overlay.common.enabled = image_osd_get(lw->image, NULL, NULL); |
| 9 | 1266 } |
| 1 | 1267 |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1268 layout_geometry_get_dividers(NULL, &options->layout.main_window.hdivider_pos, &options->layout.main_window.vdivider_pos); |
| 9 | 1269 |
|
380
5afe77bb563a
Introduce a new struct ViewDir to handle directory views common
zas_
parents:
379
diff
changeset
|
1270 layout_views_get(NULL, &options->layout.dir_view_type, &options->layout.view_as_icons); |
| 9 | 1271 |
|
340
77103f3f2cb1
Rename option thumbnails.enabled to layout.show_thumbnails as it makes
zas_
parents:
338
diff
changeset
|
1272 options->layout.show_thumbnails = layout_thumb_get(NULL); |
|
433
5ddcf93278c7
Save Show Marks state to rc file and display current state in menu.
zas_
parents:
412
diff
changeset
|
1273 options->layout.show_marks = layout_marks_get(NULL); |
|
5ddcf93278c7
Save Show Marks state to rc file and display current state in menu.
zas_
parents:
412
diff
changeset
|
1274 |
| 329 | 1275 layout_sort_get(NULL, &options->file_sort.method, &options->file_sort.ascending); |
| 9 | 1276 |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1277 layout_geometry_get_tools(NULL, &options->layout.float_window.x, &options->layout.float_window.y, |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1278 &options->layout.float_window.w, &options->layout.float_window.h, &options->layout.float_window.vdivider_pos); |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1279 layout_tools_float_get(NULL, &options->layout.tools_float, &options->layout.tools_hidden); |
|
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1280 options->layout.toolbar_hidden = layout_toolbar_hidden(NULL); |
| 9 | 1281 |
| 327 | 1282 options->color_profile.enabled = layout_image_color_profile_get_use(NULL); |
|
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1283 layout_image_color_profile_get(NULL, |
| 327 | 1284 &options->color_profile.input_type, |
| 1285 &options->color_profile.screen_type, | |
| 1286 &options->color_profile.use_image); | |
|
113
55166d93498d
Fri Nov 24 21:37:01 2006 John Ellis <johne@verizon.net>
gqview
parents:
91
diff
changeset
|
1287 |
| 1 | 1288 save_options(); |
| 9 | 1289 keys_save(); |
| 1290 | |
| 283 | 1291 path = g_strconcat(homedir(), "/", GQ_RC_DIR, "/accels", NULL); |
| 9 | 1292 pathl = path_from_utf8(path); |
| 1293 gtk_accel_map_save(pathl); | |
| 1294 g_free(pathl); | |
| 1295 g_free(path); | |
| 1 | 1296 |
| 1297 gtk_main_quit(); | |
| 1298 } | |
| 1299 | |
| 9 | 1300 static GenericDialog *exit_dialog = NULL; |
| 1301 | |
| 1302 static void exit_confirm_cancel_cb(GenericDialog *gd, gpointer data) | |
| 1303 { | |
| 1304 exit_dialog = NULL; | |
| 1305 generic_dialog_close(gd); | |
| 1306 } | |
| 1307 | |
| 1308 static void exit_confirm_exit_cb(GenericDialog *gd, gpointer data) | |
| 1309 { | |
| 1310 exit_dialog = NULL; | |
| 1311 generic_dialog_close(gd); | |
| 278 | 1312 exit_program_final(); |
| 9 | 1313 } |
| 1314 | |
| 1315 static gint exit_confirm_dlg(void) | |
| 1316 { | |
| 1317 GtkWidget *parent; | |
| 1318 LayoutWindow *lw; | |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1319 gchar *msg; |
| 9 | 1320 |
| 1321 if (exit_dialog) | |
| 1322 { | |
| 1323 gtk_window_present(GTK_WINDOW(exit_dialog->dialog)); | |
| 1324 return TRUE; | |
| 1325 } | |
| 1326 | |
| 1327 if (!collection_window_modified_exists()) return FALSE; | |
| 1328 | |
| 1329 parent = NULL; | |
| 1330 lw = NULL; | |
| 1331 if (layout_valid(&lw)) | |
| 1332 { | |
| 1333 parent = lw->window; | |
| 1334 } | |
| 1335 | |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1336 msg = g_strdup_printf("%s - %s", GQ_APPNAME, _("exit")); |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1337 exit_dialog = generic_dialog_new(msg, |
|
254
9faf34f047b1
Make the wmclass value unique among the code by defining
zas_
parents:
227
diff
changeset
|
1338 GQ_WMCLASS, "exit", parent, FALSE, |
| 9 | 1339 exit_confirm_cancel_cb, NULL); |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1340 g_free(msg); |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1341 msg = g_strdup_printf(_("Quit %s"), GQ_APPNAME); |
| 9 | 1342 generic_dialog_add_message(exit_dialog, GTK_STOCK_DIALOG_QUESTION, |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1343 msg, _("Collections have been modified. Quit anyway?")); |
|
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1344 g_free(msg); |
| 9 | 1345 generic_dialog_add_button(exit_dialog, GTK_STOCK_QUIT, NULL, exit_confirm_exit_cb, TRUE); |
| 1346 | |
| 1347 gtk_widget_show(exit_dialog->dialog); | |
| 1348 | |
| 1349 return TRUE; | |
| 1350 } | |
| 1351 | |
| 278 | 1352 void exit_program(void) |
| 9 | 1353 { |
| 1354 layout_image_full_screen_stop(NULL); | |
| 1355 | |
| 1356 if (exit_confirm_dlg()) return; | |
| 1357 | |
| 278 | 1358 exit_program_final(); |
| 9 | 1359 } |
| 1360 | |
| 1 | 1361 int main (int argc, char *argv[]) |
| 1362 { | |
| 9 | 1363 LayoutWindow *lw; |
| 1364 gchar *path = NULL; | |
| 1 | 1365 gchar *cmd_path = NULL; |
| 1366 gchar *cmd_file = NULL; | |
| 9 | 1367 GList *cmd_list = NULL; |
| 1368 GList *collection_list = NULL; | |
| 1369 CollectionData *first_collection = NULL; | |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1370 gchar *geometry = NULL; |
| 9 | 1371 gchar *buf; |
| 1372 gchar *bufl; | |
| 1 | 1373 |
|
386
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
1374 /* init execution time counter*/ |
|
0226daf8c30b
in debug mode print time information on selected events
nadvornik
parents:
380
diff
changeset
|
1375 get_exec_time(); |
| 442 | 1376 |
| 1 | 1377 /* setup locale, i18n */ |
| 1378 gtk_set_locale(); | |
| 283 | 1379 bindtextdomain(PACKAGE, GQ_LOCALEDIR); |
| 10 | 1380 bind_textdomain_codeset(PACKAGE, "UTF-8"); |
| 1381 textdomain(PACKAGE); | |
| 1 | 1382 |
| 1383 /* setup random seed for random slideshow */ | |
| 442 | 1384 srand(time(NULL)); |
| 1 | 1385 |
|
21
56866f205a68
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
gqview
parents:
10
diff
changeset
|
1386 #if 1 |
|
288
d1f74154463e
Replace occurences of Geeqie / geeqie by constants defined in main.h.
zas_
parents:
283
diff
changeset
|
1387 printf("%s %s, This is an alpha release.\n", GQ_APPNAME, VERSION); |
| 9 | 1388 #endif |
|
378
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1389 parse_command_line_for_debug_option(argc, argv); |
|
f1bdbbdb73ba
Parse command line for --debug option as soon as possible and allow
zas_
parents:
367
diff
changeset
|
1390 |
| 318 | 1391 options = init_options(NULL); |
| 1 | 1392 setup_default_options(); |
| 1393 load_options(); | |
| 1394 | |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1395 parse_command_line(argc, argv, &cmd_path, &cmd_file, &cmd_list, &collection_list, &geometry); |
| 9 | 1396 |
| 1397 gtk_init (&argc, &argv); | |
| 1398 | |
| 1399 if (gtk_major_version < GTK_MAJOR_VERSION || | |
| 1400 (gtk_major_version == GTK_MAJOR_VERSION && gtk_minor_version < GTK_MINOR_VERSION) ) | |
| 1401 { | |
| 403 | 1402 printf_term("!!! This is a friendly warning.\n"); |
| 1403 printf_term("!!! The version of GTK+ in use now is older than when %s was compiled.\n", GQ_APPNAME); | |
| 1404 printf_term("!!! compiled with GTK+-%d.%d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); | |
| 1405 printf_term("!!! running with GTK+-%d.%d\n", gtk_major_version, gtk_minor_version); | |
| 1406 printf_term("!!! %s may quit unexpectedly with a relocation error.\n", GQ_APPNAME); | |
| 9 | 1407 } |
| 1408 | |
| 283 | 1409 check_for_home_path(GQ_RC_DIR); |
| 1410 check_for_home_path(GQ_RC_DIR_COLLECTIONS); | |
| 1411 check_for_home_path(GQ_CACHE_RC_THUMB); | |
| 1412 check_for_home_path(GQ_CACHE_RC_METADATA); | |
| 9 | 1413 |
| 1414 keys_load(); | |
| 1415 filter_add_defaults(); | |
| 1416 filter_rebuild(); | |
| 442 | 1417 |
| 283 | 1418 buf = g_strconcat(homedir(), "/", GQ_RC_DIR, "/accels", NULL); |
| 9 | 1419 bufl = path_from_utf8(buf); |
| 1420 gtk_accel_map_load(bufl); | |
| 1421 g_free(bufl); | |
| 1422 g_free(buf); | |
| 1 | 1423 |
| 9 | 1424 if (startup_blank) |
| 1425 { | |
| 1426 g_free(cmd_path); | |
| 1427 cmd_path = NULL; | |
| 1428 g_free(cmd_file); | |
| 1429 cmd_file = NULL; | |
| 1430 path_list_free(cmd_list); | |
| 1431 cmd_list = NULL; | |
| 1432 path_list_free(collection_list); | |
| 1433 collection_list = NULL; | |
| 1434 | |
| 1435 path = NULL; | |
| 1436 } | |
| 1437 else if (cmd_path) | |
| 1438 { | |
| 1439 path = g_strdup(cmd_path); | |
| 1440 } | |
| 318 | 1441 else if (options->startup_path_enable && options->startup_path && isdir(options->startup_path)) |
| 9 | 1442 { |
| 318 | 1443 path = g_strdup(options->startup_path); |
| 9 | 1444 } |
| 1 | 1445 else |
| 9 | 1446 { |
| 1447 path = get_current_dir(); | |
| 1448 } | |
| 1449 | |
|
338
41c3cb73120f
Rename window options (moved to layout) and re-order rc file.
zas_
parents:
334
diff
changeset
|
1450 lw = layout_new_with_geometry(NULL, options->layout.tools_float, options->layout.tools_hidden, geometry); |
| 329 | 1451 layout_sort_set(lw, options->file_sort.method, options->file_sort.ascending); |
| 9 | 1452 |
| 1453 if (collection_list && !startup_command_line_collection) | |
| 1454 { | |
| 1455 GList *work; | |
| 1456 | |
| 1457 work = collection_list; | |
| 1458 while (work) | |
| 1459 { | |
| 1460 CollectWindow *cw; | |
| 1461 const gchar *path; | |
| 1 | 1462 |
| 9 | 1463 path = work->data; |
| 1464 work = work->next; | |
| 1465 | |
| 1466 cw = collection_window_new(path); | |
| 1467 if (!first_collection && cw) first_collection = cw->cd; | |
| 1468 } | |
| 1469 } | |
| 1470 | |
| 1471 if (cmd_list || | |
| 1472 (startup_command_line_collection && collection_list)) | |
| 1473 { | |
| 1474 CollectionData *cd; | |
| 1475 GList *work; | |
| 1476 | |
| 1477 if (startup_command_line_collection) | |
| 1478 { | |
| 1479 CollectWindow *cw; | |
| 1480 | |
| 1481 cw = collection_window_new(""); | |
| 1482 cd = cw->cd; | |
| 1483 } | |
| 1484 else | |
| 1485 { | |
| 1486 cd = collection_new(""); /* if we pass NULL, untitled counter is falsely increm. */ | |
| 279 | 1487 command_collection = cd; |
| 9 | 1488 } |
| 1489 | |
| 1490 g_free(cd->path); | |
| 1491 cd->path = NULL; | |
| 1492 g_free(cd->name); | |
| 1493 cd->name = g_strdup(_("Command line")); | |
| 1494 | |
| 1495 collection_path_changed(cd); | |
| 1 | 1496 |
| 9 | 1497 work = cmd_list; |
| 1498 while (work) | |
| 1499 { | |
| 138 | 1500 collection_add(cd, file_data_new_simple((gchar *)work->data), FALSE); |
| 9 | 1501 work = work->next; |
| 1502 } | |
| 1503 | |
| 1504 work = collection_list; | |
| 1505 while (work) | |
| 1506 { | |
| 358 | 1507 collection_load(cd, (gchar *)work->data, COLLECTION_LOAD_APPEND); |
| 9 | 1508 work = work->next; |
| 1509 } | |
| 1510 | |
| 1511 layout_set_path(lw, path); | |
| 1512 if (cd->list) layout_image_set_collection(lw, cd, cd->list->data); | |
| 1 | 1513 |
| 9 | 1514 /* mem leak, we never unref this collection when !startup_command_line_collection |
| 1515 * (the image view of the main window does not hold a ref to the collection) | |
| 1516 * this is sort of unavoidable, for if it did hold a ref, next/back | |
| 1517 * may not work as expected when closing collection windows. | |
| 1518 * | |
| 1519 * collection_unref(cd); | |
| 1520 */ | |
| 1521 | |
| 1522 } | |
| 1523 else if (cmd_file) | |
| 1524 { | |
| 1525 layout_set_path(lw, cmd_file); | |
| 1526 } | |
| 1527 else | |
| 1528 { | |
| 1529 layout_set_path(lw, path); | |
| 1530 if (first_collection) | |
| 1531 { | |
| 1532 layout_image_set_collection(lw, first_collection, | |
| 1533 collection_get_first(first_collection)); | |
| 1534 } | |
| 1535 } | |
|
468
2df505c60459
Replace fullscreen.info and fullscreen.show_info options by:
zas_
parents:
446
diff
changeset
|
1536 image_osd_set(lw->image, FALSE, (options->image_overlay.common.show_at_startup || options->image_overlay.common.enabled)); |
| 1 | 1537 |
|
81
0ef72a64930b
Thu Oct 19 09:35:18 2006 John Ellis <johne@verizon.net>
gqview
parents:
79
diff
changeset
|
1538 g_free(geometry); |
| 1 | 1539 g_free(cmd_path); |
| 1540 g_free(cmd_file); | |
| 9 | 1541 path_list_free(cmd_list); |
| 1542 path_list_free(collection_list); | |
| 1543 g_free(path); | |
| 1 | 1544 |
| 9 | 1545 if (startup_full_screen) layout_image_full_screen_start(lw); |
| 1546 if (startup_in_slideshow) layout_image_slideshow_start(lw); | |
| 1547 | |
| 283 | 1548 buf = g_strconcat(homedir(), "/", GQ_RC_DIR, "/.command", NULL); |
| 279 | 1549 remote_connection = remote_server_open(buf); |
| 1550 remote_server_subscribe(remote_connection, remote_cb, NULL); | |
| 9 | 1551 g_free(buf); |
| 3 | 1552 |
| 1 | 1553 gtk_main (); |
| 1554 return 0; | |
| 1555 } |
