annotate src/editors.c @ 2745:86dad5529aed

Merge with upstream changes.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 13 Apr 2018 19:06:23 +0300
parents 10ca4efb9d48 0b612372e82c
children 49bd0d974e88
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
2 * Copyright (C) 2006 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
4 *
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
5 * Author: John Ellis
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
6 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
7 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
8 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
10 * (at your option) any later version.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
11 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
12 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
15 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
16 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
17 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
18 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2225
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
20 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
21
281
b1c2c2cf19d4 gqview.h -> main.h
Laurent Monin <geeqie@norz.org>
parents: 261
diff changeset
22 #include "main.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
23 #include "editors.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
24
669
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
25 #include "filedata.h"
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
26 #include "filefilter.h"
1022
d09059a8b243 Move miscellaneous functions to their own files (new misc.[ch]).
Laurent Monin <geeqie@norz.org>
parents: 1000
diff changeset
27 #include "misc.h"
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
28 #include "pixbuf_util.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
29 #include "ui_fileops.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
30 #include "ui_spinner.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
31 #include "ui_utildlg.h"
1022
d09059a8b243 Move miscellaneous functions to their own files (new misc.[ch]).
Laurent Monin <geeqie@norz.org>
parents: 1000
diff changeset
32 #include "utilops.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
33
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
34 #include <errno.h>
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
35
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
36
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
37 #define EDITOR_WINDOW_WIDTH 500
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
38 #define EDITOR_WINDOW_HEIGHT 300
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
39
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
40
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
41
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
42 typedef struct _EditorVerboseData EditorVerboseData;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
43 struct _EditorVerboseData {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
44 GenericDialog *gd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
45 GtkWidget *button_close;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
46 GtkWidget *button_stop;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
47 GtkWidget *text;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
48 GtkWidget *progress;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
49 GtkWidget *spinner;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
50 };
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
51
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
52 typedef struct _EditorData EditorData;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
53 struct _EditorData {
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
54 EditorFlags flags;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
55 GPid pid;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
56 GList *list;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
57 gint count;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
58 gint total;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
59 gboolean stopping;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
60 EditorVerboseData *vd;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
61 EditorCallback callback;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
62 gpointer data;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
63 const EditorDescription *editor;
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
64 gchar *working_directory; /* fallback if no files are given (editor_no_param) */
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
65 };
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
66
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
67
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
68 static void editor_verbose_window_progress(EditorData *ed, const gchar *text);
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
69 static EditorFlags editor_command_next_start(EditorData *ed);
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
70 static EditorFlags editor_command_next_finish(EditorData *ed, gint status);
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
71 static EditorFlags editor_command_done(EditorData *ed);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
72
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
73 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
74 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
75 * external editor routines
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
76 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
77 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
78
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
79 GHashTable *editors = NULL;
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
80 GtkListStore *desktop_file_list;
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
81 gboolean editors_finished = FALSE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
82
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
83 #ifdef G_KEY_FILE_DESKTOP_GROUP
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
84 #define DESKTOP_GROUP G_KEY_FILE_DESKTOP_GROUP
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
85 #else
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
86 #define DESKTOP_GROUP "Desktop Entry"
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
87 #endif
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
88
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
89 void editor_description_free(EditorDescription *editor)
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
90 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
91 if (!editor) return;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
92
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
93 g_free(editor->key);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
94 g_free(editor->name);
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
95 g_free(editor->icon);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
96 g_free(editor->exec);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
97 g_free(editor->menu_path);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
98 g_free(editor->hotkey);
1468
ad29b90e41f5 added tooltips to external editors on toolbar
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1463
diff changeset
99 g_free(editor->comment);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
100 string_list_free(editor->ext_list);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
101 g_free(editor->file);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
102 g_free(editor);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
103 }
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
104
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
105 static GList *editor_mime_types_to_extensions(gchar **mime_types)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
106 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
107 /* FIXME: this should be rewritten to use the shared mime database, as soon as we switch to gio */
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
108
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
109 static const gchar *conv_table[][2] = {
1486
316e77c2511a added UfRaw ID files to known filetypes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1479
diff changeset
110 {"application/x-ufraw", ".ufraw"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
111 {"image/*", "*"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
112 {"image/bmp", ".bmp"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
113 {"image/gif", ".gif"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
114 {"image/jpeg", ".jpeg;.jpg;.mpo"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
115 {"image/jpg", ".jpg;.jpeg"},
2402
e8439b3f9831 Initial implementation of BPG image support.
Matti Hamalainen <ccr@tnsp.org>
parents: 2350
diff changeset
116 {"image/bpg", ".bpg"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
117 {"image/pcx", ".pcx"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
118 {"image/png", ".png"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
119 {"image/svg", ".svg"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
120 {"image/svg+xml", ".svg"},
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
121 {"image/svg+xml-compressed", ".svg"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
122 {"image/tiff", ".tiff;.tif;.mef"},
2742
1618f87e1ae8 Additional loader for DDS file format
Wolfgang Lieff <>
parents: 2735
diff changeset
123 {"image/vnd-ms.dds", ".dds"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
124 {"image/x-adobe-dng", ".dng"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
125 {"image/x-bmp", ".bmp"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
126 {"image/x-canon-crw", ".crw"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
127 {"image/x-canon-cr2", ".cr2"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
128 {"image/x-cr2", ".cr2"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
129 {"image/x-dcraw", "%raw;.mos"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
130 {"image/x-epson-erf", "%erf"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
131 {"image/x-ico", ".ico"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
132 {"image/x-kodak-kdc", ".kdc"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
133 {"image/x-mrw", ".mrw"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
134 {"image/x-minolta-mrw", ".mrw"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
135 {"image/x-MS-bmp", ".bmp"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
136 {"image/x-nef", ".nef"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
137 {"image/x-nikon-nef", ".nef"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
138 {"image/x-panasonic-raw", ".raw"},
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
139 {"image/x-panasonic-rw2", ".rw2"},
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
140 {"image/x-pentax-pef", ".pef"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
141 {"image/x-orf", ".orf"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
142 {"image/x-olympus-orf", ".orf"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
143 {"image/x-pcx", ".pcx"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
144 {"image/xpm", ".xpm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
145 {"image/x-png", ".png"},
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
146 {"image/x-portable-anymap", ".pam"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
147 {"image/x-portable-bitmap", ".pbm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
148 {"image/x-portable-graymap", ".pgm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
149 {"image/x-portable-pixmap", ".ppm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
150 {"image/x-psd", ".psd"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
151 {"image/x-raf", ".raf"},
2613
e9026a22ed21 Fix #518: [raw file] -> External Editor -> RawTerapee can't be started
Colin Clark <colin.clark@cclark.uk>
parents: 2587
diff changeset
152 {"image/x-fuji-raf", ".raf"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
153 {"image/x-sgi", ".sgi"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
154 {"image/x-sony-arw", ".arw"},
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
155 {"image/x-sony-sr2", ".sr2"},
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
156 {"image/x-sony-srf", ".srf"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
157 {"image/x-tga", ".tga"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
158 {"image/x-xbitmap", ".xbm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
159 {"image/x-xcf", ".xcf"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
160 {"image/x-xpixmap", ".xpm"},
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
161 {"image/x-x3f", ".x3f"},
2735
63589debf388 Fix #535: Include additional mime types
Colin Clark <colin.clark@cclark.uk>
parents: 2676
diff changeset
162 {"application/x-navi-animation", ".ani"},
1919
fb342cf7ce3a added panorama .pto file to the list of known files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1802
diff changeset
163 {"application/x-ptoptimizer-script", ".pto"},
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
164 {NULL, NULL}};
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
165
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
166 gint i, j;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
167 GList *list = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
168
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
169 for (i = 0; mime_types[i]; i++)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
170 for (j = 0; conv_table[j][0]; j++)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
171 if (strcmp(mime_types[i], conv_table[j][0]) == 0)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
172 list = g_list_concat(list, filter_to_list(conv_table[j][1]));
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
173
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
174 return list;
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
175 }
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
176
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
177 gboolean editor_read_desktop_file(const gchar *path)
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
178 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
179 GKeyFile *key_file;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
180 EditorDescription *editor;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
181 gchar *extensions;
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
182 gchar *type;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
183 const gchar *key = filename_from_path(path);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
184 gchar **categories, **only_show_in, **not_show_in;
1274
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
185 gchar *try_exec;
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
186 GtkTreeIter iter;
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
187 gboolean category_geeqie = FALSE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
188
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
189 if (g_hash_table_lookup(editors, key)) return FALSE; /* the file found earlier wins */
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
190
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
191 key_file = g_key_file_new();
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
192 if (!g_key_file_load_from_file(key_file, path, 0, NULL))
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
193 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
194 g_key_file_free(key_file);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
195 return FALSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
196 }
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
197
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
198 type = g_key_file_get_string(key_file, DESKTOP_GROUP, "Type", NULL);
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
199 if (!type || strcmp(type, "Application") != 0)
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
200 {
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
201 /* We only consider desktop entries of Application type */
1409
97fc99dc6d97 Add missing g_key_file_free() call.
Laurent Monin <geeqie@norz.org>
parents: 1408
diff changeset
202 g_key_file_free(key_file);
1463
7031da014d97 added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1409
diff changeset
203 g_free(type);
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
204 return FALSE;
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
205 }
1463
7031da014d97 added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1409
diff changeset
206 g_free(type);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
207
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
208 editor = g_new0(EditorDescription, 1);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
209
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
210 editor->key = g_strdup(key);
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
211 editor->file = g_strdup(path);
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
212
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
213 g_hash_table_insert(editors, editor->key, editor);
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
214
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
215 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "Hidden", NULL)
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
216 || g_key_file_get_boolean(key_file, DESKTOP_GROUP, "NoDisplay", NULL))
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
217 {
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
218 editor->hidden = TRUE;
1278
bcf1b663929b Add support for NoDisplay (entry is then hidden) and Type (only Application type is valid here) keys.
Laurent Monin <geeqie@norz.org>
parents: 1276
diff changeset
219 }
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
220
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
221 categories = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "Categories", NULL, NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
222 if (categories)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
223 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
224 gboolean found = FALSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
225 gint i;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
226 for (i = 0; categories[i]; i++)
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
227 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
228 /* IMHO "Graphics" is exactly the category that we are interested in, so this does not have to be configurable */
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
229 if (strcmp(categories[i], "Graphics") == 0)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
230 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
231 found = TRUE;
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
232 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
233 if (strcmp(categories[i], "X-Geeqie") == 0)
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
234 {
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
235 found = TRUE;
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
236 category_geeqie = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
237 break;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
238 }
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
239 }
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
240 if (!found) editor->ignored = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
241 g_strfreev(categories);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
242 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
243 else
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
244 {
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
245 editor->ignored = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
246 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
247
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
248 only_show_in = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "OnlyShowIn", NULL, NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
249 if (only_show_in)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
250 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
251 gboolean found = FALSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
252 gint i;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
253 for (i = 0; only_show_in[i]; i++)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
254 if (strcmp(only_show_in[i], "X-Geeqie") == 0)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
255 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
256 found = TRUE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
257 break;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
258 }
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
259 if (!found) editor->ignored = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
260 g_strfreev(only_show_in);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
261 }
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
262
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
263 not_show_in = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "NotShowIn", NULL, NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
264 if (not_show_in)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
265 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
266 gboolean found = FALSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
267 gint i;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
268 for (i = 0; not_show_in[i]; i++)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
269 if (strcmp(not_show_in[i], "X-Geeqie") == 0)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
270 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
271 found = TRUE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
272 break;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
273 }
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
274 if (found) editor->ignored = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
275 g_strfreev(not_show_in);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
276 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
277
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
278
1274
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
279 try_exec = g_key_file_get_string(key_file, DESKTOP_GROUP, "TryExec", NULL);
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
280 if (try_exec && !editor->hidden && !editor->ignored)
1274
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
281 {
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
282 gchar *try_exec_res = g_find_program_in_path(try_exec);
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
283 if (!try_exec_res) editor->hidden = TRUE;
1274
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
284 g_free(try_exec_res);
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
285 g_free(try_exec);
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
286 }
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
287
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
288 if (editor->ignored)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
289 {
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
290 /* ignored editors will be deleted, no need to parse the rest */
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
291 g_key_file_free(key_file);
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
292 return TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
293 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
294
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
295 editor->name = g_key_file_get_locale_string(key_file, DESKTOP_GROUP, "Name", NULL, NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
296 editor->icon = g_key_file_get_string(key_file, DESKTOP_GROUP, "Icon", NULL);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
297
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
298 /* Icon key can be either a full path (absolute with file name extension) or an icon name (without extension) */
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
299 if (editor->icon && !g_path_is_absolute(editor->icon))
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
300 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
301 gchar *ext = strrchr(editor->icon, '.');
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
302
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
303 if (ext && strlen(ext) == 4 &&
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
304 (!strcmp(ext, ".png") || !strcmp(ext, ".xpm") || !strcmp(ext, ".svg")))
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
305 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
306 log_printf(_("Desktop file '%s' should not include extension in Icon key: '%s'\n"),
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
307 editor->file, editor->icon);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
308
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
309 // drop extension
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
310 *ext = '\0';
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
311 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
312 }
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
313 if (editor->icon && !register_theme_icon_as_stock(editor->key, editor->icon))
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
314 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
315 g_free(editor->icon);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
316 editor->icon = NULL;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
317 }
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
318
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
319 editor->exec = g_key_file_get_string(key_file, DESKTOP_GROUP, "Exec", NULL);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
320
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
321 editor->menu_path = g_key_file_get_string(key_file, DESKTOP_GROUP, "X-Geeqie-Menu-Path", NULL);
2627
6863ac66a10b Rename External Editors to Plugins
Colin Clark <colin.clark@cclark.uk>
parents: 2613
diff changeset
322 if (!editor->menu_path) editor->menu_path = g_strdup("PluginsMenu");
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
323
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
324 editor->hotkey = g_key_file_get_string(key_file, DESKTOP_GROUP, "X-Geeqie-Hotkey", NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
325
1468
ad29b90e41f5 added tooltips to external editors on toolbar
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1463
diff changeset
326 editor->comment = g_key_file_get_string(key_file, DESKTOP_GROUP, "Comment", NULL);
ad29b90e41f5 added tooltips to external editors on toolbar
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1463
diff changeset
327
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
328 extensions = g_key_file_get_string(key_file, DESKTOP_GROUP, "X-Geeqie-File-Extensions", NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
329 if (extensions)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
330 editor->ext_list = filter_to_list(extensions);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
331 else
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
332 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
333 gchar **mime_types = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "MimeType", NULL, NULL);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
334 if (mime_types)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
335 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
336 editor->ext_list = editor_mime_types_to_extensions(mime_types);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
337 g_strfreev(mime_types);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
338 if (!editor->ext_list) editor->hidden = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
339 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
340 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
341
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
342 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Keep-Fullscreen", NULL)) editor->flags |= EDITOR_KEEP_FS;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
343 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Verbose", NULL)) editor->flags |= EDITOR_VERBOSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
344 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Verbose-Multi", NULL)) editor->flags |= EDITOR_VERBOSE_MULTI;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
345 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "X-Geeqie-Filter", NULL)) editor->flags |= EDITOR_DEST;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
346 if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "Terminal", NULL)) editor->flags |= EDITOR_TERMINAL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
347
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
348 editor->flags |= editor_command_parse(editor, NULL, FALSE, NULL);
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
349
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
350 if ((editor->flags & EDITOR_NO_PARAM) && !category_geeqie) editor->hidden = TRUE;
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
351
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
352 g_key_file_free(key_file);
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
353
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
354 if (editor->ignored) return TRUE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
355
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
356 gtk_list_store_append(desktop_file_list, &iter);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
357 gtk_list_store_set(desktop_file_list, &iter,
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
358 DESKTOP_FILE_COLUMN_KEY, key,
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
359 DESKTOP_FILE_COLUMN_NAME, editor->name,
1765
9f1610c5db54 use text renderer for editor->hidden
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1753
diff changeset
360 DESKTOP_FILE_COLUMN_HIDDEN, editor->hidden ? _("yes") : _("no"),
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
361 DESKTOP_FILE_COLUMN_WRITABLE, access_file(path, W_OK),
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
362 DESKTOP_FILE_COLUMN_PATH, path, -1);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
363
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
364 return TRUE;
768
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
365 }
11eadcaeb207 Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents: 766
diff changeset
366
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
367 static gboolean editor_remove_desktop_file_cb(gpointer key, gpointer value, gpointer user_data)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
368 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
369 EditorDescription *editor = value;
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
370 return editor->hidden || editor->ignored;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
371 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
372
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
373 void editor_table_finish(void)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
374 {
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
375 g_hash_table_foreach_remove(editors, editor_remove_desktop_file_cb, NULL);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
376 editors_finished = TRUE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
377 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
378
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
379 void editor_table_clear(void)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
380 {
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
381 if (desktop_file_list)
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
382 {
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
383 gtk_list_store_clear(desktop_file_list);
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
384 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
385 else
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
386 {
1765
9f1610c5db54 use text renderer for editor->hidden
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1753
diff changeset
387 desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING);
1479
e6db8d80a785 added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1478
diff changeset
388 }
1463
7031da014d97 added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1409
diff changeset
389 if (editors)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
390 {
1463
7031da014d97 added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1409
diff changeset
391 g_hash_table_destroy(editors);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
392 }
1463
7031da014d97 added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1409
diff changeset
393 editors = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, (GDestroyNotify)editor_description_free);
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
394 editors_finished = FALSE;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
395 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
396
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
397 static GList *editor_add_desktop_dir(GList *list, const gchar *path)
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
398 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
399 DIR *dp;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
400 struct dirent *dir;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
401 gchar *pathl;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
402
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
403 pathl = path_from_utf8(path);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
404 dp = opendir(pathl);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
405 g_free(pathl);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
406 if (!dp)
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
407 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
408 /* dir not found */
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
409 return list;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
410 }
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
411 while ((dir = readdir(dp)) != NULL)
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
412 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
413 gchar *namel = dir->d_name;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
414
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
415 if (g_str_has_suffix(namel, ".desktop"))
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
416 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
417 gchar *name = path_to_utf8(namel);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
418 gchar *dpath = g_build_filename(path, name, NULL);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
419 list = g_list_prepend(list, dpath);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
420 g_free(name);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
421 }
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
422 }
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
423 closedir(dp);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
424 return list;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
425 }
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
426
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
427 GList *editor_get_desktop_files(void)
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
428 {
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
429 gchar *path;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
430 gchar *xdg_data_dirs;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
431 gchar *all_dirs;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
432 gchar **split_dirs;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
433 gint i;
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
434 GList *list = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
435
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
436 xdg_data_dirs = getenv("XDG_DATA_DIRS");
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
437 if (xdg_data_dirs && xdg_data_dirs[0])
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
438 xdg_data_dirs = path_to_utf8(xdg_data_dirs);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
439 else
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
440 xdg_data_dirs = g_strdup("/usr/share");
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
441
1274
a71ea6846b0e test TryExec,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1272
diff changeset
442 all_dirs = g_strconcat(get_rc_dir(), ":", GQ_APP_DIR, ":", xdg_data_home_get(), ":", xdg_data_dirs, NULL);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
443
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
444 g_free(xdg_data_dirs);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
445
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
446 split_dirs = g_strsplit(all_dirs, ":", 0);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
447
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
448 g_free(all_dirs);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
449
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
450 for (i = 0; split_dirs[i]; i++);
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
451 for (--i; i >= 0; i--)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
452 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
453 path = g_build_filename(split_dirs[i], "applications", NULL);
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
454 list = editor_add_desktop_dir(list, path);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
455 g_free(path);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
456 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
457
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
458 g_strfreev(split_dirs);
1746
e7d79da01596 editor fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1743
diff changeset
459 return list;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
460 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
461
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
462 static void editor_list_add_cb(gpointer key, gpointer value, gpointer data)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
463 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
464 GList **listp = data;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
465 EditorDescription *editor = value;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
466
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
467 /* do not show the special commands in any list, they are called explicitly */
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
468 if (strcmp(editor->key, CMD_COPY) == 0 ||
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2021
diff changeset
469 strcmp(editor->key, CMD_MOVE) == 0 ||
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
470 strcmp(editor->key, CMD_RENAME) == 0 ||
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
471 strcmp(editor->key, CMD_DELETE) == 0 ||
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
472 strcmp(editor->key, CMD_FOLDER) == 0) return;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
473
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
474 *listp = g_list_prepend(*listp, editor);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
475 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
476
1276
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
477 static gint editor_sort(gconstpointer a, gconstpointer b)
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
478 {
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
479 const EditorDescription *ea = a;
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
480 const EditorDescription *eb = b;
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
481 gint ret;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
482
1276
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
483 ret = strcmp(ea->menu_path, eb->menu_path);
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
484 if (ret != 0) return ret;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
485
1276
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
486 return g_utf8_collate(ea->name, eb->name);
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
487 }
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
488
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
489 GList *editor_list_get(void)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
490 {
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
491 GList *editors_list = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
492
1736
7179fa22dc1b load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1652
diff changeset
493 if (!editors_finished) return NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
494
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
495 g_hash_table_foreach(editors, editor_list_add_cb, &editors_list);
1276
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
496 editors_list = g_list_sort(editors_list, editor_sort);
2bfa3bce4b3e editor_list_get() now returns a sorted list, this way items appear in the same order in all menus.
Laurent Monin <geeqie@norz.org>
parents: 1274
diff changeset
497
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
498 return editors_list;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
499 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
500
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
501 /* ------------------------------ */
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
502
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
503
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
504 static void editor_verbose_data_free(EditorData *ed)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
505 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
506 if (!ed->vd) return;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
507 g_free(ed->vd);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
508 ed->vd = NULL;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
509 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
510
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
511 static void editor_data_free(EditorData *ed)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
512 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
513 editor_verbose_data_free(ed);
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
514 g_free(ed->working_directory);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
515 g_free(ed);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
516 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
517
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
518 static void editor_verbose_window_close(GenericDialog *gd, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
519 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
520 EditorData *ed = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
521
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
522 generic_dialog_close(gd);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
523 editor_verbose_data_free(ed);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
524 if (ed->pid == -1) editor_data_free(ed); /* the process has already terminated */
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
525 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
526
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
527 static void editor_verbose_window_stop(GenericDialog *gd, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
528 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
529 EditorData *ed = data;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
530 ed->stopping = TRUE;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
531 ed->count = 0;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
532 editor_verbose_window_progress(ed, _("stopping..."));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
533 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
534
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
535 static void editor_verbose_window_enable_close(EditorVerboseData *vd)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
536 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
537 vd->gd->cancel_cb = editor_verbose_window_close;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
538
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
539 spinner_set_interval(vd->spinner, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
540 gtk_widget_set_sensitive(vd->button_stop, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
541 gtk_widget_set_sensitive(vd->button_close, TRUE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
542 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
543
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
544 static EditorVerboseData *editor_verbose_window(EditorData *ed, const gchar *text)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
545 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
546 EditorVerboseData *vd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
547 GtkWidget *scrolled;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
548 GtkWidget *hbox;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
549 gchar *buf;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
550
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
551 vd = g_new0(EditorVerboseData, 1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
552
1174
f809d57aed0c Drop useless wmclass stuff. Gtk will take care of it and as said in the documentation using gtk_window_set_wmclass() is sort of pointless.
Laurent Monin <geeqie@norz.org>
parents: 1055
diff changeset
553 vd->gd = file_util_gen_dlg(_("Edit command results"), "editor_results",
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
554 NULL, FALSE,
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
555 NULL, ed);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
556 buf = g_strdup_printf(_("Output of %s"), text);
2744
0b612372e82c Fix #600: Window "Edit command results" with GTK3 has disproportionate spacing (OK with GTK2)
Colin Clark <colin.clark@cclark.uk>
parents: 2742
diff changeset
557 generic_dialog_add_message(vd->gd, NULL, buf, NULL, FALSE);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
558 g_free(buf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
559 vd->button_stop = generic_dialog_add_button(vd->gd, GTK_STOCK_STOP, NULL,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
560 editor_verbose_window_stop, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
561 gtk_widget_set_sensitive(vd->button_stop, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
562 vd->button_close = generic_dialog_add_button(vd->gd, GTK_STOCK_CLOSE, NULL,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
563 editor_verbose_window_close, TRUE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
564 gtk_widget_set_sensitive(vd->button_close, FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
565
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
566 scrolled = gtk_scrolled_window_new(NULL, NULL);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
567 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
568 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
569 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
570 gtk_box_pack_start(GTK_BOX(vd->gd->vbox), scrolled, TRUE, TRUE, 5);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
571 gtk_widget_show(scrolled);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
572
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
573 vd->text = gtk_text_view_new();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
574 gtk_text_view_set_editable(GTK_TEXT_VIEW(vd->text), FALSE);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
575 gtk_widget_set_size_request(vd->text, EDITOR_WINDOW_WIDTH, EDITOR_WINDOW_HEIGHT);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
576 gtk_container_add(GTK_CONTAINER(scrolled), vd->text);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
577 gtk_widget_show(vd->text);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
578
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
579 hbox = gtk_hbox_new(FALSE, 0);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
580 gtk_box_pack_start(GTK_BOX(vd->gd->vbox), hbox, FALSE, FALSE, 0);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
581 gtk_widget_show(hbox);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
582
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
583 vd->progress = gtk_progress_bar_new();
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
584 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(vd->progress), 0.0);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
585 gtk_box_pack_start(GTK_BOX(hbox), vd->progress, TRUE, TRUE, 0);
2439
f48a3335c672 Fix progress bar text
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
586 #if GTK_CHECK_VERSION(3,0,0)
f48a3335c672 Fix progress bar text
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
587 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(vd->progress), "");
f48a3335c672 Fix progress bar text
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
588 gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(vd->progress), TRUE);
f48a3335c672 Fix progress bar text
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
589 #endif
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
590 gtk_widget_show(vd->progress);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
591
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
592 vd->spinner = spinner_new(NULL, SPINNER_SPEED);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
593 gtk_box_pack_start(GTK_BOX(hbox), vd->spinner, FALSE, FALSE, 0);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
594 gtk_widget_show(vd->spinner);
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
595
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
596 gtk_widget_show(vd->gd->dialog);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
597
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
598 ed->vd = vd;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
599 return vd;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
600 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
601
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
602 static void editor_verbose_window_fill(EditorVerboseData *vd, gchar *text, gint len)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
603 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
604 GtkTextBuffer *buffer;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
605 GtkTextIter iter;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
606
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
607 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(vd->text));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
608 gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
609 gtk_text_buffer_insert(buffer, &iter, text, len);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
610 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
611
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
612 static void editor_verbose_window_progress(EditorData *ed, const gchar *text)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
613 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
614 if (!ed->vd) return;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
615
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
616 if (ed->total)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
617 {
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 995
diff changeset
618 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ed->vd->progress), (gdouble)ed->count / ed->total);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
619 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
620
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
621 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ed->vd->progress), (text) ? text : "");
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
622 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
623
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
624 static gboolean editor_verbose_io_cb(GIOChannel *source, GIOCondition condition, gpointer data)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
625 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
626 EditorData *ed = data;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
627 gchar buf[512];
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
628 gsize count;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
629
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
630 if (condition & G_IO_IN)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
631 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
632 while (g_io_channel_read_chars(source, buf, sizeof(buf), &count, NULL) == G_IO_STATUS_NORMAL)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
633 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
634 if (!g_utf8_validate(buf, count, NULL))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
635 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
636 gchar *utf8;
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
637
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
638 utf8 = g_locale_to_utf8(buf, count, NULL, NULL, NULL);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
639 if (utf8)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
640 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
641 editor_verbose_window_fill(ed->vd, utf8, -1);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
642 g_free(utf8);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
643 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
644 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
645 {
288
e675073bcca0 Replace occurences of Geeqie / geeqie by constants defined in main.h.
Laurent Monin <geeqie@norz.org>
parents: 283
diff changeset
646 editor_verbose_window_fill(ed->vd, "Error converting text to valid utf8\n", -1);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
647 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
648 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
649 else
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
650 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
651 editor_verbose_window_fill(ed->vd, buf, count);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
652 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
653 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
654 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
655
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
656 if (condition & (G_IO_ERR | G_IO_HUP))
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
657 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
658 g_io_channel_shutdown(source, TRUE, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
659 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
660 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
661
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
662 return TRUE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
663 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
664
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
665 typedef enum {
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
666 PATH_FILE,
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
667 PATH_FILE_URL,
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
668 PATH_DEST
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
669 } PathType;
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
670
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
671
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
672 static gchar *editor_command_path_parse(const FileData *fd, gboolean consider_sidecars, PathType type, const EditorDescription *editor)
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
673 {
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
674 GString *string;
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
675 gchar *pathl;
1408
f43ccf81f20d Fix editor_command_path_parse().
Laurent Monin <geeqie@norz.org>
parents: 1407
diff changeset
676 const gchar *p = NULL;
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
677
1753
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
678 DEBUG_2("editor_command_path_parse: %s %d %d %s", fd->path, consider_sidecars, type, editor->key);
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
679
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
680 string = g_string_new("");
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
681
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
682 if (type == PATH_FILE || type == PATH_FILE_URL)
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
683 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
684 GList *work = editor->ext_list;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
685
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
686 if (!work)
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
687 p = fd->path;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
688 else
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
689 {
516
768d10237b88 Convert the minority of while() to while ().
Laurent Monin <geeqie@norz.org>
parents: 475
diff changeset
690 while (work)
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
691 {
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
692 GList *work2;
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
693 gchar *ext = work->data;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
694 work = work->next;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
695
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
696 if (strcmp(ext, "*") == 0 ||
1307
5b9e8cde0f8b Glibification again.
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
697 g_ascii_strcasecmp(ext, fd->extension) == 0)
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
698 {
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
699 p = fd->path;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
700 break;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
701 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
702
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
703 work2 = consider_sidecars ? fd->sidecar_files : NULL;
516
768d10237b88 Convert the minority of while() to while ().
Laurent Monin <geeqie@norz.org>
parents: 475
diff changeset
704 while (work2)
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
705 {
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
706 FileData *sfd = work2->data;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
707 work2 = work2->next;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
708
1307
5b9e8cde0f8b Glibification again.
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
709 if (g_ascii_strcasecmp(ext, sfd->extension) == 0)
147
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
710 {
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
711 p = sfd->path;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
712 break;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
713 }
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
714 }
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
715 if (p) break;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
716 }
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
717 if (!p) return NULL;
ca7e5f3ff449 added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 140
diff changeset
718 }
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
719 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
720 else if (type == PATH_DEST)
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
721 {
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
722 if (fd->change && fd->change->dest)
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
723 p = fd->change->dest;
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
724 else
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
725 p = "";
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
726 }
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
727
1407
5e8c6d6813da Revert changeset 1502. It brokes the spec: hidden desktop files from user directory should hide files from system directory with the same name.
Laurent Monin <geeqie@norz.org>
parents: 1406
diff changeset
728 g_assert(p);
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
729 string = g_string_append(string, p);
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
730
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
731 if (type == PATH_FILE_URL) g_string_prepend(string, "file://");
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
732 pathl = path_from_utf8(string->str);
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
733 g_string_free(string, TRUE);
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
734
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
735 if (pathl && !pathl[0]) /* empty string case */
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
736 {
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
737 g_free(pathl);
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
738 pathl = NULL;
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
739 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
740
1753
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
741 DEBUG_2("editor_command_path_parse: return %s", pathl);
123
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
742 return pathl;
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
743 }
0f334ba8cbc6 Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 60
diff changeset
744
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
745 static GString *append_quoted(GString *str, const char *s, gboolean single_quotes, gboolean double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
746 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
747 const char *p;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
748
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
749 if (!single_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
750 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
751 if (!double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
752 g_string_append_c(str, '\'');
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
753 else
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
754 g_string_append(str, "\"'");
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
755 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
756
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
757 for (p = s; *p != '\0'; p++)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
758 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
759 if (*p == '\'')
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
760 g_string_append(str, "'\\''");
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
761 else
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
762 g_string_append_c(str, *p);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
763 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
764
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
765 if (!single_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
766 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
767 if (!double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
768 g_string_append_c(str, '\'');
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
769 else
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
770 g_string_append(str, "'\"");
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
771 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
772
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
773 return str;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
774 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
775
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
776
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
777 EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, gboolean consider_sidecars, gchar **output)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
778 {
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
779 EditorFlags flags = 0;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
780 const gchar *p;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
781 GString *result = NULL;
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
782 gboolean escape = FALSE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
783 gboolean single_quotes = FALSE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
784 gboolean double_quotes = FALSE;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
785
1753
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
786 DEBUG_2("editor_command_parse: %s %d %d", editor->key, consider_sidecars, !!output);
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
787
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
788 if (output)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
789 result = g_string_new("");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
790
2225
4617e1d83e9b Fix a segfault caused by .desktop file with no exec= line.
Vedran Rodic <vrodic@gmail.com>
parents: 2185
diff changeset
791 if (editor->exec == NULL || editor->exec[0] == '\0')
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
792 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
793 flags |= EDITOR_ERROR_EMPTY;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
794 goto err;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
795 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
796
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
797 p = editor->exec;
669
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
798 /* skip leading whitespaces if any */
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
799 while (g_ascii_isspace(*p)) p++;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
800
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
801 /* command */
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
802
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
803 while (*p)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
804 {
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
805 if (escape)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
806 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
807 escape = FALSE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
808 if (output) result = g_string_append_c(result, *p);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
809 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
810 else if (*p == '\\')
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
811 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
812 if (!single_quotes) escape = TRUE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
813 if (output) result = g_string_append_c(result, *p);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
814 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
815 else if (*p == '\'')
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
816 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
817 if (output) result = g_string_append_c(result, *p);
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
818 if (!single_quotes && !double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
819 single_quotes = TRUE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
820 else if (single_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
821 single_quotes = FALSE;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
822 }
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
823 else if (*p == '"')
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
824 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
825 if (output) result = g_string_append_c(result, *p);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
826 if (!single_quotes && !double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
827 double_quotes = TRUE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
828 else if (double_quotes)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
829 double_quotes = FALSE;
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
830 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
831 else if (*p == '%' && p[1])
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
832 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
833 gchar *pathl = NULL;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
834
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
835 p++;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
836
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
837 switch (*p)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
838 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
839 case 'f': /* single file */
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
840 case 'u': /* single url */
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
841 flags |= EDITOR_FOR_EACH;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
842 if (flags & EDITOR_SINGLE_COMMAND)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
843 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
844 flags |= EDITOR_ERROR_INCOMPATIBLE;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
845 goto err;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
846 }
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
847 if (list)
1397
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
848 {
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
849 /* use the first file from the list */
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
850 if (!list->data)
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
851 {
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
852 flags |= EDITOR_ERROR_NO_FILE;
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
853 goto err;
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
854 }
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
855 pathl = editor_command_path_parse((FileData *)list->data,
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
856 consider_sidecars,
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
857 (*p == 'f') ? PATH_FILE : PATH_FILE_URL,
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
858 editor);
1753
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
859 if (!output)
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
860 {
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
861 /* just testing, check also the rest of the list (like with F and U)
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
862 any matching file is OK */
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
863 GList *work = list->next;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
864
1753
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
865 while (!pathl && work)
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
866 {
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
867 FileData *fd = work->data;
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
868 pathl = editor_command_path_parse(fd,
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
869 consider_sidecars,
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
870 (*p == 'f') ? PATH_FILE : PATH_FILE_URL,
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
871 editor);
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
872 work = work->next;
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
873 }
c9f46eb0f680 fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1746
diff changeset
874 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
875
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
876 if (!pathl)
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
877 {
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
878 flags |= EDITOR_ERROR_NO_FILE;
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
879 goto err;
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
880 }
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
881 if (output)
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
882 {
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
883 result = append_quoted(result, pathl, single_quotes, double_quotes);
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
884 }
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
885 g_free(pathl);
1397
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
886 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
887 break;
60
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
888
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
889 case 'F':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
890 case 'U':
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
891 flags |= EDITOR_SINGLE_COMMAND;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
892 if (flags & (EDITOR_FOR_EACH | EDITOR_DEST))
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
893 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
894 flags |= EDITOR_ERROR_INCOMPATIBLE;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
895 goto err;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
896 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
897
1399
c7b91cd7701b Fix up editor execution.
Laurent Monin <geeqie@norz.org>
parents: 1397
diff changeset
898 if (list)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
899 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
900 /* use whole list */
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
901 GList *work = list;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
902 gboolean ok = FALSE;
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
903
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
904 while (work)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
905 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
906 FileData *fd = work->data;
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
907 pathl = editor_command_path_parse(fd, consider_sidecars, (*p == 'F') ? PATH_FILE : PATH_FILE_URL, editor);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
908 if (pathl)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
909 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
910 ok = TRUE;
1397
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
911
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
912 if (output)
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
913 {
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
914 ok = TRUE;
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
915 if (work != list) g_string_append_c(result, ' ');
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
916 result = append_quoted(result, pathl, single_quotes, double_quotes);
1397
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
917 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
918 g_free(pathl);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
919 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
920 work = work->next;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
921 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
922 if (!ok)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
923 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
924 flags |= EDITOR_ERROR_NO_FILE;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
925 goto err;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
926 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
927 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
928 break;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
929 case 'i':
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
930 if (editor->icon && *editor->icon)
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
931 {
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
932 if (output)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
933 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
934 result = g_string_append(result, "--icon ");
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
935 result = append_quoted(result, editor->icon, single_quotes, double_quotes);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
936 }
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
937 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
938 break;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
939 case 'c':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
940 if (output)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
941 {
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
942 result = append_quoted(result, editor->name, single_quotes, double_quotes);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
943 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
944 break;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
945 case 'k':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
946 if (output)
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
947 {
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
948 result = append_quoted(result, editor->file, single_quotes, double_quotes);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
949 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
950 break;
669
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
951 case '%':
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
952 /* %% = % escaping */
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
953 if (output) result = g_string_append_c(result, *p);
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
954 break;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
955 case 'd':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
956 case 'D':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
957 case 'n':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
958 case 'N':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
959 case 'v':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
960 case 'm':
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
961 /* deprecated according to spec, ignore */
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
962 break;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
963 default:
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
964 flags |= EDITOR_ERROR_SYNTAX;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
965 goto err;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
966 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
967 }
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
968 else
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
969 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
970 if (output) result = g_string_append_c(result, *p);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
971 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
972 p++;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
973 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
974
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
975 if (!(flags & (EDITOR_FOR_EACH | EDITOR_SINGLE_COMMAND))) flags |= EDITOR_NO_PARAM;
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
976
1478
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
977 if (output)
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
978 {
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
979 *output = g_string_free(result, FALSE);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
980 DEBUG_3("Editor cmd: %s", *output);
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
981 }
54fe1d2403d8 Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents: 1468
diff changeset
982
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
983 return flags;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
984
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
985
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
986 err:
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
987 if (output)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
988 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
989 g_string_free(result, TRUE);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
990 *output = NULL;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
991 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
992 return flags;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
993 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
994
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
995
1397
db1b3d950a8c In various Edit context menus, only display editors that match the file types in the selection.
Laurent Monin <geeqie@norz.org>
parents: 1367
diff changeset
996 static void editor_child_exit_cb(GPid pid, gint status, gpointer data)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
997 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
998 EditorData *ed = data;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
999 g_spawn_close_pid(pid);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1000 ed->pid = -1;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1001
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1002 editor_command_next_finish(ed, status);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1003 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1004
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1005
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1006 static EditorFlags editor_command_one(const EditorDescription *editor, GList *list, EditorData *ed)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1007 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1008 gchar *command;
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1009 FileData *fd = (ed->flags & EDITOR_NO_PARAM) ? NULL : list->data;;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1010 GPid pid;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1011 gint standard_output;
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1012 gint standard_error;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1013 gboolean ok;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1014
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1015 ed->pid = -1;
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1016 ed->flags = editor->flags;
1742
b3626c54e20e fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1736
diff changeset
1017 ed->flags |= editor_command_parse(editor, list, TRUE, &command);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1018
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1019 ok = !EDITOR_ERRORS(ed->flags);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1020
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1021 if (ok)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1022 {
737
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1023 ok = (options->shell.path && *options->shell.path);
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1024 if (!ok) log_printf("ERROR: empty shell command\n");
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1025
737
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1026 if (ok)
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1027 {
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1028 ok = (access(options->shell.path, X_OK) == 0);
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1029 if (!ok) log_printf("ERROR: cannot execute shell command '%s'\n", options->shell.path);
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1030 }
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1031
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1032 if (!ok) ed->flags |= EDITOR_ERROR_CANT_EXEC;
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1033 }
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1034
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1035 if (ok)
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1036 {
443
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1037 gchar *working_directory;
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1038 gchar *args[4];
737
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1039 guint n = 0;
443
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1040
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1041 working_directory = fd ? remove_level_from_path(fd->path) : g_strdup(ed->working_directory);
737
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1042 args[n++] = options->shell.path;
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1043 if (options->shell.options && *options->shell.options)
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1044 args[n++] = options->shell.options;
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1045 args[n++] = command;
7c3a287e2922 Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents: 731
diff changeset
1046 args[n] = NULL;
443
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1047
2676
7c02cad43a45 Fix #553:Desktop file without %f or %F crashes Geeqie
Colin Clark <colin.clark@cclark.uk>
parents: 2627
diff changeset
1048 if ((ed->flags & EDITOR_DEST) && fd && fd->change && fd->change->dest) /* FIXME: error handling */
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1049 {
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1050 g_setenv("GEEQIE_DESTINATION", fd->change->dest, TRUE);
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1051 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1052 else
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1053 {
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1054 g_unsetenv("GEEQIE_DESTINATION");
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1055 }
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1056
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1057 ok = g_spawn_async_with_pipes(working_directory, args, NULL,
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1058 G_SPAWN_DO_NOT_REAP_CHILD, /* GSpawnFlags */
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1059 NULL, NULL,
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1060 &pid,
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1061 NULL,
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1062 ed->vd ? &standard_output : NULL,
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1063 ed->vd ? &standard_error : NULL,
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1064 NULL);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1065
443
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1066 g_free(working_directory);
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1067
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1068 if (!ok) ed->flags |= EDITOR_ERROR_CANT_EXEC;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1069 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1070
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1071 if (ok)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1072 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1073 g_child_watch_add(pid, editor_child_exit_cb, ed);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1074 ed->pid = pid;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1075 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1076
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1077 if (ed->vd)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1078 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1079 if (!ok)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1080 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1081 gchar *buf;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1082
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1083 buf = g_strdup_printf(_("Failed to run command:\n%s\n"), editor->file);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1084 editor_verbose_window_fill(ed->vd, buf, strlen(buf));
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1085 g_free(buf);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1086
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1087 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1088 else
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1089 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1090 GIOChannel *channel_output;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1091 GIOChannel *channel_error;
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
1092
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1093 channel_output = g_io_channel_unix_new(standard_output);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1094 g_io_channel_set_flags(channel_output, G_IO_FLAG_NONBLOCK, NULL);
926
06070888eff5 Set GIO channels to binary encoding.
Laurent Monin <geeqie@norz.org>
parents: 911
diff changeset
1095 g_io_channel_set_encoding(channel_output, NULL, NULL);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1096
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1097 g_io_add_watch_full(channel_output, G_PRIORITY_HIGH, G_IO_IN | G_IO_ERR | G_IO_HUP,
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1098 editor_verbose_io_cb, ed, NULL);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1099 g_io_channel_unref(channel_output);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1100
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1101 channel_error = g_io_channel_unix_new(standard_error);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1102 g_io_channel_set_flags(channel_error, G_IO_FLAG_NONBLOCK, NULL);
926
06070888eff5 Set GIO channels to binary encoding.
Laurent Monin <geeqie@norz.org>
parents: 911
diff changeset
1103 g_io_channel_set_encoding(channel_error, NULL, NULL);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1104
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1105 g_io_add_watch_full(channel_error, G_PRIORITY_HIGH, G_IO_IN | G_IO_ERR | G_IO_HUP,
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1106 editor_verbose_io_cb, ed, NULL);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1107 g_io_channel_unref(channel_error);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1108 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1109 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1110
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1111 g_free(command);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1112
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1113 return EDITOR_ERRORS(ed->flags);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1114 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1115
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1116 static EditorFlags editor_command_next_start(EditorData *ed)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1117 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1118 if (ed->vd) editor_verbose_window_fill(ed->vd, "\n", 1);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1119
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1120 if ((ed->list || (ed->flags & EDITOR_NO_PARAM)) && ed->count < ed->total)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1121 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1122 FileData *fd;
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1123 EditorFlags error;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1124
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1125 fd = (ed->flags & EDITOR_NO_PARAM) ? NULL : ed->list->data;
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1126
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1127 if (ed->vd)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1128 {
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1129 if ((ed->flags & EDITOR_FOR_EACH) && fd)
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1130 editor_verbose_window_progress(ed, fd->path);
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1131 else
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1132 editor_verbose_window_progress(ed, _("running..."));
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1133 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1134 ed->count++;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1135
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1136 error = editor_command_one(ed->editor, ed->list, ed);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1137 if (!error && ed->vd)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1138 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1139 gtk_widget_set_sensitive(ed->vd->button_stop, (ed->list != NULL) );
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1140 if ((ed->flags & EDITOR_FOR_EACH) && fd)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1141 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1142 editor_verbose_window_fill(ed->vd, fd->path, strlen(fd->path));
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1143 editor_verbose_window_fill(ed->vd, "\n", 1);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1144 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1145 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1146
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1147 if (!error)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1148 return 0;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1149
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1150 /* command was not started, call the finish immediately */
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1151 return editor_command_next_finish(ed, 0);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1152 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1153
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1154 /* everything is done */
237
d45bcad026e3 Add missing return at the end of editor_command_next_start().
Laurent Monin <geeqie@norz.org>
parents: 196
diff changeset
1155 return editor_command_done(ed);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1156 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1157
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1158 static EditorFlags editor_command_next_finish(EditorData *ed, gint status)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1159 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1160 gint cont = ed->stopping ? EDITOR_CB_SKIP : EDITOR_CB_CONTINUE;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1161
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1162 if (status)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1163 ed->flags |= EDITOR_ERROR_STATUS;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1164
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1165 if (ed->flags & EDITOR_FOR_EACH)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1166 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1167 /* handle the first element from the list */
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1168 GList *fd_element = ed->list;
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
1169
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1170 ed->list = g_list_remove_link(ed->list, fd_element);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1171 if (ed->callback)
911
85b7a4ca15e2 fixed stop button in editor dialog
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 768
diff changeset
1172 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1173 cont = ed->callback(ed->list ? ed : NULL, ed->flags, fd_element, ed->data);
911
85b7a4ca15e2 fixed stop button in editor dialog
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 768
diff changeset
1174 if (ed->stopping && cont == EDITOR_CB_CONTINUE) cont = EDITOR_CB_SKIP;
85b7a4ca15e2 fixed stop button in editor dialog
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 768
diff changeset
1175 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1176 filelist_free(fd_element);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1177 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1178 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1179 {
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1180 /* handle whole list */
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1181 if (ed->callback)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1182 cont = ed->callback(NULL, ed->flags, ed->list, ed->data);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1183 filelist_free(ed->list);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1184 ed->list = NULL;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1185 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1186
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1187 switch (cont)
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1188 {
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1189 case EDITOR_CB_SUSPEND:
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1190 return EDITOR_ERRORS(ed->flags);
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1191 case EDITOR_CB_SKIP:
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1192 return editor_command_done(ed);
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1193 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1194
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1195 return editor_command_next_start(ed);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1196 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1197
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1198 static EditorFlags editor_command_done(EditorData *ed)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1199 {
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1200 EditorFlags flags;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1201
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1202 if (ed->vd)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1203 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1204 if (ed->count == ed->total)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1205 {
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1206 editor_verbose_window_progress(ed, _("done"));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1207 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1208 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1209 {
1402
db64892cb2b1 Cleanup and minor fixes.
Laurent Monin <geeqie@norz.org>
parents: 1400
diff changeset
1210 editor_verbose_window_progress(ed, _("stopped by user"));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1211 }
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1212 editor_verbose_window_enable_close(ed->vd);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1213 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1214
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1215 /* free the not-handled items */
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1216 if (ed->list)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1217 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1218 ed->flags |= EDITOR_ERROR_SKIPPED;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1219 if (ed->callback) ed->callback(NULL, ed->flags, ed->list, ed->data);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1220 filelist_free(ed->list);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1221 ed->list = NULL;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1222 }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1223
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1224 ed->count = 0;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1225
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1226 flags = EDITOR_ERRORS(ed->flags);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1227
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1228 if (!ed->vd) editor_data_free(ed);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1229
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1230 return flags;
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1231 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1232
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1233 void editor_resume(gpointer ed)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1234 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1235 editor_command_next_start(ed);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1236 }
443
dc200d04664f editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents: 442
diff changeset
1237
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1238 void editor_skip(gpointer ed)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1239 {
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1240 editor_command_done(ed);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1241 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1242
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1243 static EditorFlags editor_command_start(const EditorDescription *editor, const gchar *text, GList *list, const gchar *working_directory, EditorCallback cb, gpointer data)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1244 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1245 EditorData *ed;
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1246 EditorFlags flags = editor->flags;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1247
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1248 if (EDITOR_ERRORS(flags)) return EDITOR_ERRORS(flags);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1249
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1250 ed = g_new0(EditorData, 1);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1251 ed->list = filelist_copy(list);
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1252 ed->flags = flags;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1253 ed->editor = editor;
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1254 ed->total = (flags & (EDITOR_SINGLE_COMMAND | EDITOR_NO_PARAM)) ? 1 : g_list_length(list);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1255 ed->callback = cb;
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1256 ed->data = data;
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1257 ed->working_directory = g_strdup(working_directory);
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1258
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1259 if ((flags & EDITOR_VERBOSE_MULTI) && list && list->next)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1260 flags |= EDITOR_VERBOSE;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1261
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1262 if (flags & EDITOR_VERBOSE)
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1263 editor_verbose_window(ed, text);
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1264
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 440
diff changeset
1265 editor_command_next_start(ed);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1266 /* errors from editor_command_next_start will be handled via callback */
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1267 return EDITOR_ERRORS(flags);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1268 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1269
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1270 gboolean is_valid_editor_command(const gchar *key)
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
1271 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1272 if (!key) return FALSE;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1273 return g_hash_table_lookup(editors, key) != NULL;
444
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
1274 }
5bc532bbe6bf Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents: 443
diff changeset
1275
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1276 EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list, const gchar *working_directory, EditorCallback cb, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1277 {
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1278 EditorFlags error;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1279 EditorDescription *editor;
1743
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1280 if (!key) return EDITOR_ERROR_EMPTY;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1281
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1282 editor = g_hash_table_lookup(editors, key);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1283
1743
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1284 if (!editor) return EDITOR_ERROR_EMPTY;
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1285 if (!list && !(editor->flags & EDITOR_NO_PARAM)) return EDITOR_ERROR_NO_FILE;
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1286
1743
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1287 error = editor_command_parse(editor, list, TRUE, NULL);
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1288
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1289 if (EDITOR_ERRORS(error)) return error;
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1290
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1291 error |= editor_command_start(editor, editor->name, list, working_directory, cb, data);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1292
1400
560108ea2466 Add helper macros EDITOR_ERRORS() and EDITOR_ERRORS_BUT_SKIPPED() to clean up the code a bit. Minor tidy up.
Laurent Monin <geeqie@norz.org>
parents: 1399
diff changeset
1293 if (EDITOR_ERRORS(error))
669
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1294 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1295 gchar *text = g_strdup_printf(_("%s\n\"%s\""), editor_get_error_str(error), editor->file);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1296
669
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1297 file_util_warning_dialog(_("Invalid editor command"), text, GTK_STOCK_DIALOG_ERROR, NULL);
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1298 g_free(text);
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1299 }
b208689466d1 Improve editors a bit:
Laurent Monin <geeqie@norz.org>
parents: 586
diff changeset
1300
1743
5d4633f002b2 start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1742
diff changeset
1301 return EDITOR_ERRORS(error);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1302 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1303
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1304 EditorFlags start_editor_from_filelist(const gchar *key, GList *list)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1305 {
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1306 return start_editor_from_filelist_full(key, list, NULL, NULL, NULL);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1307 }
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1308
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1309 EditorFlags start_editor_from_file_full(const gchar *key, FileData *fd, EditorCallback cb, gpointer data)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1310 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1311 GList *list;
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1312 EditorFlags error;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1313
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
1314 if (!fd) return FALSE;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1315
138
5be5d1c53016 replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 136
diff changeset
1316 list = g_list_append(NULL, fd);
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1317 error = start_editor_from_filelist_full(key, list, NULL, cb, data);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1318 g_list_free(list);
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1319 return error;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1320 }
60
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
1321
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1322 EditorFlags start_editor_from_file(const gchar *key, FileData *fd)
136
2f6f77e0675a more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 135
diff changeset
1323 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1324 return start_editor_from_file_full(key, fd, NULL, NULL);
136
2f6f77e0675a more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 135
diff changeset
1325 }
2f6f77e0675a more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 135
diff changeset
1326
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1327 EditorFlags start_editor(const gchar *key, const gchar *working_directory)
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1328 {
1652
b544063ff6c5 run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1618
diff changeset
1329 return start_editor_from_filelist_full(key, NULL, working_directory, NULL, NULL);
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1330 }
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1331
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1332 gboolean editor_window_flag_set(const gchar *key)
60
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
1333 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1334 EditorDescription *editor;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1335 if (!key) return TRUE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1336
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1337 editor = g_hash_table_lookup(editors, key);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1338 if (!editor) return TRUE;
60
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
1339
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1340 return !!(editor->flags & EDITOR_KEEP_FS);
60
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
1341 }
15ab9630b61a Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 9
diff changeset
1342
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1343 gboolean editor_is_filter(const gchar *key)
753
cffccbff200a rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 737
diff changeset
1344 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1345 EditorDescription *editor;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1346 if (!key) return TRUE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1347
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1348 editor = g_hash_table_lookup(editors, key);
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1349 if (!editor) return TRUE;
753
cffccbff200a rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 737
diff changeset
1350
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1351 return !!(editor->flags & EDITOR_DEST);
753
cffccbff200a rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 737
diff changeset
1352 }
cffccbff200a rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 737
diff changeset
1353
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1354 gboolean editor_no_param(const gchar *key)
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1355 {
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1356 EditorDescription *editor;
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1357 if (!key) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1358
1581
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1359 editor = g_hash_table_lookup(editors, key);
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1360 if (!editor) return FALSE;
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1361
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1362 return !!(editor->flags & EDITOR_NO_PARAM);
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1363 }
73d2e9ac0248 allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1486
diff changeset
1364
1618
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1365 gboolean editor_blocks_file(const gchar *key)
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1366 {
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1367 EditorDescription *editor;
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1368 if (!key) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1369
1618
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1370 editor = g_hash_table_lookup(editors, key);
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1371 if (!editor) return FALSE;
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1372
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1373 /* Decide if the image file should be blocked during editor execution
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1374 Editors like gimp can be used long time after the original file was
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1375 saved, for editing unrelated files.
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1376 %f vs. %F seems to be a good heuristic to detect this kind of editors.
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1377 */
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1378
1618
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1379 return !(editor->flags & EDITOR_SINGLE_COMMAND);
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1380 }
aa1476183236 do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1581
diff changeset
1381
1405
eb76f4bcf474 Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1402
diff changeset
1382 const gchar *editor_get_error_str(EditorFlags flags)
140
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1383 {
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1384 if (flags & EDITOR_ERROR_EMPTY) return _("Editor template is empty.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1385 if (flags & EDITOR_ERROR_SYNTAX) return _("Editor template has incorrect syntax.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1386 if (flags & EDITOR_ERROR_INCOMPATIBLE) return _("Editor template uses incompatible macros.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1387 if (flags & EDITOR_ERROR_NO_FILE) return _("Can't find matching file type.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1388 if (flags & EDITOR_ERROR_CANT_EXEC) return _("Can't execute external editor.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1389 if (flags & EDITOR_ERROR_STATUS) return _("External editor returned error status.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1390 if (flags & EDITOR_ERROR_SKIPPED) return _("File was skipped.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1391 return _("Unknown error.");
36ec74dabb76 editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
1392 }
731
4d7d4787dafb Introduce an helper function that returns the name of an editor.
Laurent Monin <geeqie@norz.org>
parents: 730
diff changeset
1393
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1394 const gchar *editor_get_name(const gchar *key)
731
4d7d4787dafb Introduce an helper function that returns the name of an editor.
Laurent Monin <geeqie@norz.org>
parents: 730
diff changeset
1395 {
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1396 EditorDescription *editor = g_hash_table_lookup(editors, key);
731
4d7d4787dafb Introduce an helper function that returns the name of an editor.
Laurent Monin <geeqie@norz.org>
parents: 730
diff changeset
1397
1272
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1398 if (!editor) return NULL;
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1399
661e170bf4f7 read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1229
diff changeset
1400 return editor->name;
731
4d7d4787dafb Introduce an helper function that returns the name of an editor.
Laurent Monin <geeqie@norz.org>
parents: 730
diff changeset
1401 }
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1022
diff changeset
1402 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */