Mercurial > hg > forks > geeqie
annotate src/editors.c @ 2916:ae6cdcd69d9f default tip
Merge with upstream/master.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 14 May 2019 11:46:50 +0300 |
parents | 49bd0d974e88 |
children |
rev | line source |
---|---|
9 | 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 | 4 * |
5 * Author: John Ellis | |
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 | 20 */ |
21 | |
281 | 22 #include "main.h" |
9 | 23 #include "editors.h" |
24 | |
669 | 25 #include "filedata.h" |
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 | 29 #include "ui_fileops.h" |
30 #include "ui_spinner.h" | |
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 | 33 |
34 #include <errno.h> | |
35 | |
36 | |
37 #define EDITOR_WINDOW_WIDTH 500 | |
38 #define EDITOR_WINDOW_HEIGHT 300 | |
39 | |
40 | |
41 | |
42 typedef struct _EditorVerboseData EditorVerboseData; | |
43 struct _EditorVerboseData { | |
44 GenericDialog *gd; | |
45 GtkWidget *button_close; | |
46 GtkWidget *button_stop; | |
47 GtkWidget *text; | |
48 GtkWidget *progress; | |
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 | 57 gint count; |
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 | 65 }; |
66 | |
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 | 72 |
73 /* | |
74 *----------------------------------------------------------------------------- | |
75 * external editor routines | |
76 *----------------------------------------------------------------------------- | |
77 */ | |
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 | 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 | 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 | 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 | 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 | 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; |
2859
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
188 GList *work; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
189 gboolean disabled; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
190 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
191 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
|
192 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
193 key_file = g_key_file_new(); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
194 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
|
195 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
196 g_key_file_free(key_file); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
197 return FALSE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
198 } |
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
|
199 |
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 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
|
201 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
|
202 { |
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
|
203 /* 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
|
204 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
|
205 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
|
206 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
|
207 } |
1463
7031da014d97
added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1409
diff
changeset
|
208 g_free(type); |
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 = g_new0(EditorDescription, 1); |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
211 |
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
|
212 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
|
213 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
|
214 |
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
|
215 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
|
216 |
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
|
217 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
|
218 || 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
|
219 { |
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
|
220 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
|
221 } |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
222 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
223 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
|
224 if (categories) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
225 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
226 gboolean found = FALSE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
227 gint i; |
2184 | 228 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
|
229 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
230 /* 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
|
231 if (strcmp(categories[i], "Graphics") == 0) |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
232 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
233 found = TRUE; |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
234 } |
2184 | 235 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
|
236 { |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
237 found = TRUE; |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
238 category_geeqie = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
239 break; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
240 } |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
241 } |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
242 if (!found) editor->ignored = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
243 g_strfreev(categories); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
244 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
245 else |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
246 { |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
247 editor->ignored = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
248 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
249 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
250 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
|
251 if (only_show_in) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
252 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
253 gboolean found = FALSE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
254 gint i; |
2184 | 255 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
|
256 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
|
257 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
258 found = TRUE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
259 break; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
260 } |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
261 if (!found) editor->ignored = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
262 g_strfreev(only_show_in); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
263 } |
768
11eadcaeb207
Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents:
766
diff
changeset
|
264 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
265 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
|
266 if (not_show_in) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
267 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
268 gboolean found = FALSE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
269 gint i; |
2184 | 270 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
|
271 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
|
272 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
273 found = TRUE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
274 break; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
275 } |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
276 if (found) editor->ignored = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
277 g_strfreev(not_show_in); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
278 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
279 |
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
280 |
1274 | 281 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
|
282 if (try_exec && !editor->hidden && !editor->ignored) |
1274 | 283 { |
284 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
|
285 if (!try_exec_res) editor->hidden = TRUE; |
1274 | 286 g_free(try_exec_res); |
287 g_free(try_exec); | |
288 } | |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
289 |
2184 | 290 if (editor->ignored) |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
291 { |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
292 /* 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
|
293 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
|
294 return TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
295 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
296 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
297 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
|
298 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
|
299 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
300 /* 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
|
301 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
|
302 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
303 gchar *ext = strrchr(editor->icon, '.'); |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
304 |
2184 | 305 if (ext && strlen(ext) == 4 && |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
306 (!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
|
307 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
308 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
|
309 editor->file, editor->icon); |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
310 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
311 // drop extension |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
312 *ext = '\0'; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
313 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
314 } |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
315 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
|
316 { |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
317 g_free(editor->icon); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
318 editor->icon = NULL; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
319 } |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
320 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
321 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
|
322 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
323 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
|
324 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
|
325 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
326 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
|
327 |
1468
ad29b90e41f5
added tooltips to external editors on toolbar
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1463
diff
changeset
|
328 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
|
329 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
330 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
|
331 if (extensions) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
332 editor->ext_list = filter_to_list(extensions); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
333 else |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
334 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
335 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
|
336 if (mime_types) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
337 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
338 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
|
339 g_strfreev(mime_types); |
2184 | 340 if (!editor->ext_list) editor->hidden = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
341 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
342 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
343 |
1272
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-Keep-Fullscreen", NULL)) editor->flags |= EDITOR_KEEP_FS; |
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-Verbose", NULL)) editor->flags |= EDITOR_VERBOSE; |
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, "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
|
347 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
|
348 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
|
349 |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
350 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
|
351 |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
352 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
|
353 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
354 g_key_file_free(key_file); |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
355 |
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
356 if (editor->ignored) return TRUE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
357 |
2859
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
358 work = options->disabled_plugins; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
359 |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
360 disabled = FALSE; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
361 while (work) |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
362 { |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
363 if (g_strcmp0(path, work->data) == 0) |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
364 { |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
365 disabled = TRUE; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
366 break; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
367 } |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
368 work = work->next; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
369 } |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
370 |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
371 editor->disabled = disabled; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
372 |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
373 gtk_list_store_append(desktop_file_list, &iter); |
2184 | 374 gtk_list_store_set(desktop_file_list, &iter, |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
375 DESKTOP_FILE_COLUMN_KEY, key, |
2859
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
376 DESKTOP_FILE_COLUMN_DISABLED, editor->disabled, |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
377 DESKTOP_FILE_COLUMN_NAME, editor->name, |
1765
9f1610c5db54
use text renderer for editor->hidden
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1753
diff
changeset
|
378 DESKTOP_FILE_COLUMN_HIDDEN, editor->hidden ? _("yes") : _("no"), |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
379 DESKTOP_FILE_COLUMN_WRITABLE, access_file(path, W_OK), |
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
380 DESKTOP_FILE_COLUMN_PATH, path, -1); |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
381 |
2184 | 382 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
|
383 } |
11eadcaeb207
Use functions to set editors name and command and ensure they are
Laurent Monin <geeqie@norz.org>
parents:
766
diff
changeset
|
384 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
385 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
|
386 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
387 EditorDescription *editor = value; |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
388 return editor->hidden || editor->ignored; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
389 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
390 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
391 void editor_table_finish(void) |
9 | 392 { |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
393 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
|
394 editors_finished = TRUE; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
395 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
396 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
397 void editor_table_clear(void) |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
398 { |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
399 if (desktop_file_list) |
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
400 { |
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
401 gtk_list_store_clear(desktop_file_list); |
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
402 } |
2184 | 403 else |
1479
e6db8d80a785
added simple desktop file editor
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1478
diff
changeset
|
404 { |
2859
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
405 desktop_file_list = gtk_list_store_new(DESKTOP_FILE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_BOOLEAN, 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
|
406 } |
1463
7031da014d97
added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1409
diff
changeset
|
407 if (editors) |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
408 { |
1463
7031da014d97
added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1409
diff
changeset
|
409 g_hash_table_destroy(editors); |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
410 } |
1463
7031da014d97
added function to reload external editors at any time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1409
diff
changeset
|
411 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
|
412 editors_finished = FALSE; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
413 } |
9 | 414 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
415 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
|
416 { |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
417 DIR *dp; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
418 struct dirent *dir; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
419 gchar *pathl; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
420 |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
421 pathl = path_from_utf8(path); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
422 dp = opendir(pathl); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
423 g_free(pathl); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
424 if (!dp) |
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 /* dir not found */ |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
427 return list; |
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 while ((dir = readdir(dp)) != NULL) |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
430 { |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
431 gchar *namel = dir->d_name; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
432 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
433 if (g_str_has_suffix(namel, ".desktop")) |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
434 { |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
435 gchar *name = path_to_utf8(namel); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
436 gchar *dpath = g_build_filename(path, name, NULL); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
437 list = g_list_prepend(list, dpath); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
438 g_free(name); |
2184 | 439 } |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
440 } |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
441 closedir(dp); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
442 return list; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
443 } |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
444 |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
445 GList *editor_get_desktop_files(void) |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
446 { |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
447 gchar *path; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
448 gchar *xdg_data_dirs; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
449 gchar *all_dirs; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
450 gchar **split_dirs; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
451 gint i; |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
452 GList *list = NULL; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
453 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
454 xdg_data_dirs = getenv("XDG_DATA_DIRS"); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
455 if (xdg_data_dirs && xdg_data_dirs[0]) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
456 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
|
457 else |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
458 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
|
459 |
1274 | 460 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
|
461 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
462 g_free(xdg_data_dirs); |
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 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
|
465 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
466 g_free(all_dirs); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
467 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
468 for (i = 0; split_dirs[i]; i++); |
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
469 for (--i; i >= 0; i--) |
9 | 470 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
471 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
|
472 list = editor_add_desktop_dir(list, path); |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
473 g_free(path); |
9 | 474 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
475 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
476 g_strfreev(split_dirs); |
1746 | 477 return list; |
9 | 478 } |
479 | |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
480 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
|
481 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
482 GList **listp = data; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
483 EditorDescription *editor = value; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
484 |
2184 | 485 /* 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
|
486 if (strcmp(editor->key, CMD_COPY) == 0 || |
2184 | 487 strcmp(editor->key, CMD_MOVE) == 0 || |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
488 strcmp(editor->key, CMD_RENAME) == 0 || |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
489 strcmp(editor->key, CMD_DELETE) == 0 || |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
490 strcmp(editor->key, CMD_FOLDER) == 0) return; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
491 |
2859
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
492 if (editor->disabled) |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
493 { |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
494 return; |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
495 } |
1656d2341e2f
Eliminate FIXME: enable or disable individual plugins from configure
Colin Clark <colin.clark@cclark.uk>
parents:
2744
diff
changeset
|
496 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
497 *listp = g_list_prepend(*listp, editor); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
498 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
499 |
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
|
500 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
|
501 { |
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
|
502 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
|
503 const EditorDescription *eb = b; |
1402 | 504 gint ret; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
505 |
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
|
506 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
|
507 if (ret != 0) return ret; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
508 |
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
|
509 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
|
510 } |
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
|
511 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
512 GList *editor_list_get(void) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
513 { |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
514 GList *editors_list = NULL; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
515 |
1736
7179fa22dc1b
load desktop files in idle time
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1652
diff
changeset
|
516 if (!editors_finished) return NULL; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
517 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
518 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
|
519 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
|
520 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
521 return editors_list; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
522 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
523 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
524 /* ------------------------------ */ |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
525 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
526 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
527 static void editor_verbose_data_free(EditorData *ed) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
528 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
529 if (!ed->vd) return; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
530 g_free(ed->vd); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
531 ed->vd = NULL; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
532 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
533 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
534 static void editor_data_free(EditorData *ed) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
535 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
536 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
|
537 g_free(ed->working_directory); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
538 g_free(ed); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
539 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
540 |
9 | 541 static void editor_verbose_window_close(GenericDialog *gd, gpointer data) |
542 { | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
543 EditorData *ed = data; |
9 | 544 |
545 generic_dialog_close(gd); | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
546 editor_verbose_data_free(ed); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
547 if (ed->pid == -1) editor_data_free(ed); /* the process has already terminated */ |
9 | 548 } |
549 | |
550 static void editor_verbose_window_stop(GenericDialog *gd, gpointer data) | |
551 { | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
552 EditorData *ed = data; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
553 ed->stopping = TRUE; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
554 ed->count = 0; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
555 editor_verbose_window_progress(ed, _("stopping...")); |
9 | 556 } |
557 | |
558 static void editor_verbose_window_enable_close(EditorVerboseData *vd) | |
559 { | |
560 vd->gd->cancel_cb = editor_verbose_window_close; | |
561 | |
562 spinner_set_interval(vd->spinner, -1); | |
563 gtk_widget_set_sensitive(vd->button_stop, FALSE); | |
564 gtk_widget_set_sensitive(vd->button_close, TRUE); | |
565 } | |
566 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
567 static EditorVerboseData *editor_verbose_window(EditorData *ed, const gchar *text) |
9 | 568 { |
569 EditorVerboseData *vd; | |
570 GtkWidget *scrolled; | |
571 GtkWidget *hbox; | |
572 gchar *buf; | |
573 | |
574 vd = g_new0(EditorVerboseData, 1); | |
575 | |
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
|
576 vd->gd = file_util_gen_dlg(_("Edit command results"), "editor_results", |
9 | 577 NULL, FALSE, |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
578 NULL, ed); |
9 | 579 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
|
580 generic_dialog_add_message(vd->gd, NULL, buf, NULL, FALSE); |
9 | 581 g_free(buf); |
582 vd->button_stop = generic_dialog_add_button(vd->gd, GTK_STOCK_STOP, NULL, | |
583 editor_verbose_window_stop, FALSE); | |
584 gtk_widget_set_sensitive(vd->button_stop, FALSE); | |
585 vd->button_close = generic_dialog_add_button(vd->gd, GTK_STOCK_CLOSE, NULL, | |
586 editor_verbose_window_close, TRUE); | |
587 gtk_widget_set_sensitive(vd->button_close, FALSE); | |
588 | |
589 scrolled = gtk_scrolled_window_new(NULL, NULL); | |
590 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); | |
591 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), | |
592 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
593 gtk_box_pack_start(GTK_BOX(vd->gd->vbox), scrolled, TRUE, TRUE, 5); | |
594 gtk_widget_show(scrolled); | |
595 | |
596 vd->text = gtk_text_view_new(); | |
597 gtk_text_view_set_editable(GTK_TEXT_VIEW(vd->text), FALSE); | |
598 gtk_widget_set_size_request(vd->text, EDITOR_WINDOW_WIDTH, EDITOR_WINDOW_HEIGHT); | |
599 gtk_container_add(GTK_CONTAINER(scrolled), vd->text); | |
600 gtk_widget_show(vd->text); | |
601 | |
602 hbox = gtk_hbox_new(FALSE, 0); | |
603 gtk_box_pack_start(GTK_BOX(vd->gd->vbox), hbox, FALSE, FALSE, 0); | |
604 gtk_widget_show(hbox); | |
605 | |
606 vd->progress = gtk_progress_bar_new(); | |
607 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(vd->progress), 0.0); | |
608 gtk_box_pack_start(GTK_BOX(hbox), vd->progress, TRUE, TRUE, 0); | |
2439 | 609 #if GTK_CHECK_VERSION(3,0,0) |
610 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(vd->progress), ""); | |
611 gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(vd->progress), TRUE); | |
612 #endif | |
9 | 613 gtk_widget_show(vd->progress); |
614 | |
615 vd->spinner = spinner_new(NULL, SPINNER_SPEED); | |
616 gtk_box_pack_start(GTK_BOX(hbox), vd->spinner, FALSE, FALSE, 0); | |
617 gtk_widget_show(vd->spinner); | |
442 | 618 |
9 | 619 gtk_widget_show(vd->gd->dialog); |
620 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
621 ed->vd = vd; |
9 | 622 return vd; |
623 } | |
624 | |
625 static void editor_verbose_window_fill(EditorVerboseData *vd, gchar *text, gint len) | |
626 { | |
627 GtkTextBuffer *buffer; | |
628 GtkTextIter iter; | |
629 | |
630 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(vd->text)); | |
631 gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1); | |
632 gtk_text_buffer_insert(buffer, &iter, text, len); | |
633 } | |
634 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
635 static void editor_verbose_window_progress(EditorData *ed, const gchar *text) |
9 | 636 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
637 if (!ed->vd) return; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
638 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
639 if (ed->total) |
9 | 640 { |
1000
07f6093c1c1a
For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents:
995
diff
changeset
|
641 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ed->vd->progress), (gdouble)ed->count / ed->total); |
9 | 642 } |
643 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
644 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ed->vd->progress), (text) ? text : ""); |
9 | 645 } |
646 | |
647 static gboolean editor_verbose_io_cb(GIOChannel *source, GIOCondition condition, gpointer data) | |
648 { | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
649 EditorData *ed = data; |
9 | 650 gchar buf[512]; |
651 gsize count; | |
652 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
653 if (condition & G_IO_IN) |
9 | 654 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
655 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
|
656 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
657 if (!g_utf8_validate(buf, count, NULL)) |
9 | 658 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
659 gchar *utf8; |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
660 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
661 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
|
662 if (utf8) |
9 | 663 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
664 editor_verbose_window_fill(ed->vd, utf8, -1); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
665 g_free(utf8); |
9 | 666 } |
667 else | |
668 { | |
288
e675073bcca0
Replace occurences of Geeqie / geeqie by constants defined in main.h.
Laurent Monin <geeqie@norz.org>
parents:
283
diff
changeset
|
669 editor_verbose_window_fill(ed->vd, "Error converting text to valid utf8\n", -1); |
9 | 670 } |
671 } | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
672 else |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
673 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
674 editor_verbose_window_fill(ed->vd, buf, count); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
675 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
676 } |
9 | 677 } |
678 | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
679 if (condition & (G_IO_ERR | G_IO_HUP)) |
9 | 680 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
681 g_io_channel_shutdown(source, TRUE, NULL); |
9 | 682 return FALSE; |
683 } | |
684 | |
685 return TRUE; | |
686 } | |
687 | |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
688 typedef enum { |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
689 PATH_FILE, |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
690 PATH_FILE_URL, |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
691 PATH_DEST |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
692 } PathType; |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
693 |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
694 |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
695 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
|
696 { |
0f334ba8cbc6
Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
60
diff
changeset
|
697 GString *string; |
0f334ba8cbc6
Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
60
diff
changeset
|
698 gchar *pathl; |
1408
f43ccf81f20d
Fix editor_command_path_parse().
Laurent Monin <geeqie@norz.org>
parents:
1407
diff
changeset
|
699 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
|
700 |
1753
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
701 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
|
702 |
123
0f334ba8cbc6
Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
60
diff
changeset
|
703 string = g_string_new(""); |
442 | 704 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
705 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
|
706 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
707 GList *work = editor->ext_list; |
442 | 708 |
147
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
709 if (!work) |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
710 p = fd->path; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
711 else |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
712 { |
516
768d10237b88
Convert the minority of while() to while ().
Laurent Monin <geeqie@norz.org>
parents:
475
diff
changeset
|
713 while (work) |
147
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
714 { |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
715 GList *work2; |
147
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
716 gchar *ext = work->data; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
717 work = work->next; |
442 | 718 |
719 if (strcmp(ext, "*") == 0 || | |
1307 | 720 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
|
721 { |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
722 p = fd->path; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
723 break; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
724 } |
442 | 725 |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
726 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
|
727 while (work2) |
147
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
728 { |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
729 FileData *sfd = work2->data; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
730 work2 = work2->next; |
442 | 731 |
1307 | 732 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
|
733 { |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
734 p = sfd->path; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
735 break; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
736 } |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
737 } |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
738 if (p) break; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
739 } |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
740 if (!p) return NULL; |
ca7e5f3ff449
added possibility to specify prefered file type for external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
140
diff
changeset
|
741 } |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
742 } |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
743 else if (type == PATH_DEST) |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
744 { |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
745 if (fd->change && fd->change->dest) |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
746 p = fd->change->dest; |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
747 else |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
748 p = ""; |
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
749 } |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
750 |
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
|
751 g_assert(p); |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
752 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
|
753 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
754 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
|
755 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
|
756 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
|
757 |
1402 | 758 if (pathl && !pathl[0]) /* empty string case */ |
759 { | |
760 g_free(pathl); | |
761 pathl = NULL; | |
762 } | |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
763 |
1753
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
764 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
|
765 return pathl; |
0f334ba8cbc6
Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
60
diff
changeset
|
766 } |
0f334ba8cbc6
Sat Dec 2 20:15:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
60
diff
changeset
|
767 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
768 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
|
769 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
770 const char *p; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
771 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
772 if (!single_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
773 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
774 if (!double_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
775 g_string_append_c(str, '\''); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
776 else |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
777 g_string_append(str, "\"'"); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
778 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
779 |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
780 for (p = s; *p != '\0'; p++) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
781 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
782 if (*p == '\'') |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
783 g_string_append(str, "'\\''"); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
784 else |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
785 g_string_append_c(str, *p); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
786 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
787 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
788 if (!single_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
789 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
790 if (!double_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
791 g_string_append_c(str, '\''); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
792 else |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
793 g_string_append(str, "'\""); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
794 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
795 |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
796 return str; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
797 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
798 |
9 | 799 |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
800 EditorFlags editor_command_parse(const EditorDescription *editor, GList *list, gboolean consider_sidecars, gchar **output) |
9 | 801 { |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
802 EditorFlags flags = 0; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
803 const gchar *p; |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
804 GString *result = NULL; |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
805 gboolean escape = FALSE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
806 gboolean single_quotes = FALSE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
807 gboolean double_quotes = FALSE; |
442 | 808 |
1753
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
809 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
|
810 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
811 if (output) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
812 result = g_string_new(""); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
813 |
2225
4617e1d83e9b
Fix a segfault caused by .desktop file with no exec= line.
Vedran Rodic <vrodic@gmail.com>
parents:
2185
diff
changeset
|
814 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
|
815 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
816 flags |= EDITOR_ERROR_EMPTY; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
817 goto err; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
818 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
819 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
820 p = editor->exec; |
669 | 821 /* skip leading whitespaces if any */ |
822 while (g_ascii_isspace(*p)) p++; | |
442 | 823 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
824 /* command */ |
442 | 825 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
826 while (*p) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
827 { |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
828 if (escape) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
829 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
830 escape = FALSE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
831 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
|
832 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
833 else if (*p == '\\') |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
834 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
835 if (!single_quotes) escape = TRUE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
836 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
|
837 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
838 else if (*p == '\'') |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
839 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
840 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
|
841 if (!single_quotes && !double_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
842 single_quotes = TRUE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
843 else if (single_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
844 single_quotes = FALSE; |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
845 } |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
846 else if (*p == '"') |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
847 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
848 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
|
849 if (!single_quotes && !double_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
850 double_quotes = TRUE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
851 else if (double_quotes) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
852 double_quotes = FALSE; |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
853 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
854 else if (*p == '%' && p[1]) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
855 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
856 gchar *pathl = NULL; |
9 | 857 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
858 p++; |
442 | 859 |
860 switch (*p) | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
861 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
862 case 'f': /* single file */ |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
863 case 'u': /* single url */ |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
864 flags |= EDITOR_FOR_EACH; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
865 if (flags & EDITOR_SINGLE_COMMAND) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
866 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
867 flags |= EDITOR_ERROR_INCOMPATIBLE; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
868 goto err; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
869 } |
1399 | 870 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
|
871 { |
1399 | 872 /* use the first file from the list */ |
873 if (!list->data) | |
874 { | |
875 flags |= EDITOR_ERROR_NO_FILE; | |
876 goto err; | |
877 } | |
878 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
|
879 consider_sidecars, |
1399 | 880 (*p == 'f') ? PATH_FILE : PATH_FILE_URL, |
881 editor); | |
1753
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
882 if (!output) |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
883 { |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
884 /* 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
|
885 any matching file is OK */ |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
886 GList *work = list->next; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
887 |
1753
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
888 while (!pathl && work) |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
889 { |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
890 FileData *fd = work->data; |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
891 pathl = editor_command_path_parse(fd, |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
892 consider_sidecars, |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
893 (*p == 'f') ? PATH_FILE : PATH_FILE_URL, |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
894 editor); |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
895 work = work->next; |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
896 } |
c9f46eb0f680
fixed editor list in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1746
diff
changeset
|
897 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
898 |
1399 | 899 if (!pathl) |
900 { | |
901 flags |= EDITOR_ERROR_NO_FILE; | |
902 goto err; | |
903 } | |
904 if (output) | |
905 { | |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
906 result = append_quoted(result, pathl, single_quotes, double_quotes); |
1399 | 907 } |
908 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
|
909 } |
442 | 910 break; |
60
15ab9630b61a
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
9
diff
changeset
|
911 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
912 case 'F': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
913 case 'U': |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
914 flags |= EDITOR_SINGLE_COMMAND; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
915 if (flags & (EDITOR_FOR_EACH | EDITOR_DEST)) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
916 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
917 flags |= EDITOR_ERROR_INCOMPATIBLE; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
918 goto err; |
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 |
1399 | 921 if (list) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
922 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
923 /* use whole list */ |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
924 GList *work = list; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
925 gboolean ok = FALSE; |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
926 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
927 while (work) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
928 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
929 FileData *fd = work->data; |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
930 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
|
931 if (pathl) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
932 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
933 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
|
934 |
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
|
935 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
|
936 { |
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
|
937 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
|
938 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
|
939 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
|
940 } |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
941 g_free(pathl); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
942 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
943 work = work->next; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
944 } |
442 | 945 if (!ok) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
946 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
947 flags |= EDITOR_ERROR_NO_FILE; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
948 goto err; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
949 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
950 } |
442 | 951 break; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
952 case 'i': |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
953 if (editor->icon && *editor->icon) |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
954 { |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
955 if (output) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
956 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
957 result = g_string_append(result, "--icon "); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
958 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
|
959 } |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
960 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
961 break; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
962 case 'c': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
963 if (output) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
964 { |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
965 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
|
966 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
967 break; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
968 case 'k': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
969 if (output) |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
970 { |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
971 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
|
972 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
973 break; |
669 | 974 case '%': |
975 /* %% = % escaping */ | |
976 if (output) result = g_string_append_c(result, *p); | |
977 break; | |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
978 case 'd': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
979 case 'D': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
980 case 'n': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
981 case 'N': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
982 case 'v': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
983 case 'm': |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
984 /* deprecated according to spec, ignore */ |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
985 break; |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
986 default: |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
987 flags |= EDITOR_ERROR_SYNTAX; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
988 goto err; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
989 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
990 } |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
991 else |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
992 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
993 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
|
994 } |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
995 p++; |
9 | 996 } |
997 | |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
998 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
|
999 |
1478
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1000 if (output) |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1001 { |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1002 *output = g_string_free(result, FALSE); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1003 DEBUG_3("Editor cmd: %s", *output); |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1004 } |
54fe1d2403d8
Improve editors through .desktop files implementation:
Laurent Monin <geeqie@norz.org>
parents:
1468
diff
changeset
|
1005 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1006 return flags; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1007 |
442 | 1008 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1009 err: |
442 | 1010 if (output) |
9 | 1011 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1012 g_string_free(result, TRUE); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1013 *output = NULL; |
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 return flags; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1016 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1017 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1018 |
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
|
1019 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
|
1020 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1021 EditorData *ed = data; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1022 g_spawn_close_pid(pid); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1023 ed->pid = -1; |
442 | 1024 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1025 editor_command_next_finish(ed, status); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1026 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1027 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1028 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1029 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
|
1030 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1031 gchar *command; |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1032 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
|
1033 GPid pid; |
442 | 1034 gint standard_output; |
1035 gint standard_error; | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1036 gboolean ok; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1037 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1038 ed->pid = -1; |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1039 ed->flags = editor->flags; |
1742
b3626c54e20e
fixed list of possible editors in popup menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1736
diff
changeset
|
1040 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
|
1041 |
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
|
1042 ok = !EDITOR_ERRORS(ed->flags); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1043 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1044 if (ok) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1045 { |
737
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1046 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
|
1047 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
|
1048 |
737
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1049 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
|
1050 { |
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1051 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
|
1052 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
|
1053 } |
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1054 |
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1055 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
|
1056 } |
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1057 |
7c3a287e2922
Make shell command and its option rc file options instead of hardcoded strings.
Laurent Monin <geeqie@norz.org>
parents:
731
diff
changeset
|
1058 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
|
1059 { |
443
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1060 gchar *working_directory; |
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1061 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
|
1062 guint n = 0; |
443
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1063 |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1064 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
|
1065 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
|
1066 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
|
1067 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
|
1068 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
|
1069 args[n] = NULL; |
443
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1070 |
2676
7c02cad43a45
Fix #553:Desktop file without %f or %F crashes Geeqie
Colin Clark <colin.clark@cclark.uk>
parents:
2627
diff
changeset
|
1071 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
|
1072 { |
1402 | 1073 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
|
1074 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1075 else |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1076 { |
1402 | 1077 g_unsetenv("GEEQIE_DESTINATION"); |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1078 } |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1079 |
442 | 1080 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
|
1081 G_SPAWN_DO_NOT_REAP_CHILD, /* GSpawnFlags */ |
442 | 1082 NULL, NULL, |
1083 &pid, | |
1084 NULL, | |
1085 ed->vd ? &standard_output : NULL, | |
1086 ed->vd ? &standard_error : NULL, | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1087 NULL); |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1088 |
443
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1089 g_free(working_directory); |
442 | 1090 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1091 if (!ok) ed->flags |= EDITOR_ERROR_CANT_EXEC; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1092 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1093 |
442 | 1094 if (ok) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1095 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1096 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
|
1097 ed->pid = pid; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1098 } |
442 | 1099 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1100 if (ed->vd) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1101 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1102 if (!ok) |
9 | 1103 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1104 gchar *buf; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1105 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1106 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
|
1107 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
|
1108 g_free(buf); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1109 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1110 } |
442 | 1111 else |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1112 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1113 GIOChannel *channel_output; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1114 GIOChannel *channel_error; |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
1115 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1116 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
|
1117 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
|
1118 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
|
1119 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1120 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
|
1121 editor_verbose_io_cb, ed, NULL); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1122 g_io_channel_unref(channel_output); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1123 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1124 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
|
1125 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
|
1126 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
|
1127 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1128 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
|
1129 editor_verbose_io_cb, ed, NULL); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1130 g_io_channel_unref(channel_error); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1131 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1132 } |
442 | 1133 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1134 g_free(command); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1135 |
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
|
1136 return EDITOR_ERRORS(ed->flags); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1137 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1138 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1139 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
|
1140 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1141 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
|
1142 |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1143 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
|
1144 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1145 FileData *fd; |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1146 EditorFlags error; |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1147 |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1148 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
|
1149 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1150 if (ed->vd) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1151 { |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1152 if ((ed->flags & EDITOR_FOR_EACH) && fd) |
1402 | 1153 editor_verbose_window_progress(ed, fd->path); |
1154 else | |
1155 editor_verbose_window_progress(ed, _("running...")); | |
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 ed->count++; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1158 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1159 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
|
1160 if (!error && ed->vd) |
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 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
|
1163 if ((ed->flags & EDITOR_FOR_EACH) && fd) |
9 | 1164 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1165 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
|
1166 editor_verbose_window_fill(ed->vd, "\n", 1); |
9 | 1167 } |
1168 } | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1169 |
442 | 1170 if (!error) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1171 return 0; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1172 |
1402 | 1173 /* command was not started, call the finish immediately */ |
1174 return editor_command_next_finish(ed, 0); | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1175 } |
442 | 1176 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1177 /* 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
|
1178 return editor_command_done(ed); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1179 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1180 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1181 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
|
1182 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1183 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
|
1184 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1185 if (status) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1186 ed->flags |= EDITOR_ERROR_STATUS; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1187 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1188 if (ed->flags & EDITOR_FOR_EACH) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1189 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1190 /* handle the first element from the list */ |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1191 GList *fd_element = ed->list; |
444
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
1192 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1193 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
|
1194 if (ed->callback) |
911
85b7a4ca15e2
fixed stop button in editor dialog
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
768
diff
changeset
|
1195 { |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1196 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
|
1197 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
|
1198 } |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1199 filelist_free(fd_element); |
9 | 1200 } |
1201 else | |
1202 { | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1203 /* handle whole list */ |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1204 if (ed->callback) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1205 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
|
1206 filelist_free(ed->list); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1207 ed->list = NULL; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1208 } |
9 | 1209 |
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
|
1210 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
|
1211 { |
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
|
1212 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
|
1213 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
|
1214 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
|
1215 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
|
1216 } |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1217 |
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
|
1218 return editor_command_next_start(ed); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1219 } |
9 | 1220 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1221 static EditorFlags editor_command_done(EditorData *ed) |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1222 { |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1223 EditorFlags flags; |
9 | 1224 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1225 if (ed->vd) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1226 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1227 if (ed->count == ed->total) |
9 | 1228 { |
1402 | 1229 editor_verbose_window_progress(ed, _("done")); |
9 | 1230 } |
1231 else | |
1232 { | |
1402 | 1233 editor_verbose_window_progress(ed, _("stopped by user")); |
9 | 1234 } |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1235 editor_verbose_window_enable_close(ed->vd); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1236 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1237 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1238 /* free the not-handled items */ |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1239 if (ed->list) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1240 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1241 ed->flags |= EDITOR_ERROR_SKIPPED; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1242 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
|
1243 filelist_free(ed->list); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1244 ed->list = NULL; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1245 } |
9 | 1246 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1247 ed->count = 0; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1248 |
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
|
1249 flags = EDITOR_ERRORS(ed->flags); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1250 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1251 if (!ed->vd) editor_data_free(ed); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1252 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1253 return flags; |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1254 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1255 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1256 void editor_resume(gpointer ed) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1257 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1258 editor_command_next_start(ed); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1259 } |
443
dc200d04664f
editor_command_one(): tidy up.
Laurent Monin <geeqie@norz.org>
parents:
442
diff
changeset
|
1260 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1261 void editor_skip(gpointer ed) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1262 { |
442 | 1263 editor_command_done(ed); |
9 | 1264 } |
1265 | |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1266 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
|
1267 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1268 EditorData *ed; |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1269 EditorFlags flags = editor->flags; |
442 | 1270 |
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
|
1271 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
|
1272 |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1273 ed = g_new0(EditorData, 1); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1274 ed->list = filelist_copy(list); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1275 ed->flags = flags; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1276 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
|
1277 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
|
1278 ed->callback = cb; |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1279 ed->data = data; |
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1280 ed->working_directory = g_strdup(working_directory); |
442 | 1281 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1282 if ((flags & EDITOR_VERBOSE_MULTI) && list && list->next) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1283 flags |= EDITOR_VERBOSE; |
442 | 1284 |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1285 if (flags & EDITOR_VERBOSE) |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1286 editor_verbose_window(ed, text); |
442 | 1287 |
1288 editor_command_next_start(ed); | |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1289 /* 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
|
1290 return EDITOR_ERRORS(flags); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1291 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1292 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1293 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
|
1294 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1295 if (!key) return FALSE; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1296 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
|
1297 } |
5bc532bbe6bf
Minor cleanup and code redundancy reduction.
Laurent Monin <geeqie@norz.org>
parents:
443
diff
changeset
|
1298 |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1299 EditorFlags start_editor_from_filelist_full(const gchar *key, GList *list, const gchar *working_directory, EditorCallback cb, gpointer data) |
9 | 1300 { |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1301 EditorFlags error; |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1302 EditorDescription *editor; |
1743
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1303 if (!key) return EDITOR_ERROR_EMPTY; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1304 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1305 editor = g_hash_table_lookup(editors, key); |
9 | 1306 |
1743
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1307 if (!editor) return EDITOR_ERROR_EMPTY; |
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1308 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
|
1309 |
1743
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1310 error = editor_command_parse(editor, list, TRUE, NULL); |
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1311 |
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1312 if (EDITOR_ERRORS(error)) return error; |
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1313 |
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1314 error |= editor_command_start(editor, editor->name, list, working_directory, cb, data); |
9 | 1315 |
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
|
1316 if (EDITOR_ERRORS(error)) |
669 | 1317 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1318 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
|
1319 |
669 | 1320 file_util_warning_dialog(_("Invalid editor command"), text, GTK_STOCK_DIALOG_ERROR, NULL); |
1321 g_free(text); | |
1322 } | |
1323 | |
1743
5d4633f002b2
start_editor_from_filelist_full fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1742
diff
changeset
|
1324 return EDITOR_ERRORS(error); |
9 | 1325 } |
1326 | |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1327 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
|
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, list, NULL, NULL, NULL); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1330 } |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1331 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1332 EditorFlags start_editor_from_file_full(const gchar *key, FileData *fd, EditorCallback cb, gpointer data) |
9 | 1333 { |
1334 GList *list; | |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1335 EditorFlags error; |
9 | 1336 |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
1337 if (!fd) return FALSE; |
9 | 1338 |
138
5be5d1c53016
replaced gchar* path with FileData *fd
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
136
diff
changeset
|
1339 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
|
1340 error = start_editor_from_filelist_full(key, list, NULL, cb, data); |
9 | 1341 g_list_free(list); |
140
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1342 return error; |
9 | 1343 } |
60
15ab9630b61a
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
9
diff
changeset
|
1344 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1345 EditorFlags start_editor_from_file(const gchar *key, FileData *fd) |
136
2f6f77e0675a
more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
135
diff
changeset
|
1346 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1347 return start_editor_from_file_full(key, fd, NULL, NULL); |
136
2f6f77e0675a
more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
135
diff
changeset
|
1348 } |
2f6f77e0675a
more external commands
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
135
diff
changeset
|
1349 |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1350 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
|
1351 { |
1652
b544063ff6c5
run external commands from current directory even with no files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1618
diff
changeset
|
1352 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
|
1353 } |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1354 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1355 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
|
1356 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1357 EditorDescription *editor; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1358 if (!key) return TRUE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1359 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1360 editor = g_hash_table_lookup(editors, key); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1361 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
|
1362 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1363 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
|
1364 } |
15ab9630b61a
Mon Jun 13 17:31:46 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
9
diff
changeset
|
1365 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1366 gboolean editor_is_filter(const gchar *key) |
753
cffccbff200a
rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
737
diff
changeset
|
1367 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1368 EditorDescription *editor; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1369 if (!key) return TRUE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1370 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1371 editor = g_hash_table_lookup(editors, key); |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1372 if (!editor) return TRUE; |
753
cffccbff200a
rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
737
diff
changeset
|
1373 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1374 return !!(editor->flags & EDITOR_DEST); |
753
cffccbff200a
rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
737
diff
changeset
|
1375 } |
cffccbff200a
rewritten utilops.h:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
737
diff
changeset
|
1376 |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1377 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
|
1378 { |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1379 EditorDescription *editor; |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1380 if (!key) return FALSE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1381 |
1581
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1382 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
|
1383 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
|
1384 |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1385 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
|
1386 } |
73d2e9ac0248
allow external editors without parameters, as long as they are in
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1486
diff
changeset
|
1387 |
1618
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1388 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
|
1389 { |
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1390 EditorDescription *editor; |
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1391 if (!key) return FALSE; |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1392 |
1618
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1393 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
|
1394 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
|
1395 |
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1396 /* 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
|
1397 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
|
1398 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
|
1399 %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
|
1400 */ |
2185
c14a1d8e6aa4
Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents:
2184
diff
changeset
|
1401 |
1618
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1402 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
|
1403 } |
aa1476183236
do not block the files sent to external editors like gimp
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1581
diff
changeset
|
1404 |
1405
eb76f4bcf474
Introduce EditorFlags type, cleanup.
Laurent Monin <geeqie@norz.org>
parents:
1402
diff
changeset
|
1405 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
|
1406 { |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1407 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
|
1408 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
|
1409 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
|
1410 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
|
1411 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
|
1412 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
|
1413 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
|
1414 return _("Unknown error."); |
36ec74dabb76
editors.c was almost completely rewritten:
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
138
diff
changeset
|
1415 } |
731
4d7d4787dafb
Introduce an helper function that returns the name of an editor.
Laurent Monin <geeqie@norz.org>
parents:
730
diff
changeset
|
1416 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1417 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
|
1418 { |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1419 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
|
1420 |
1272
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1421 if (!editor) return NULL; |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1422 |
661e170bf4f7
read external editors from .desktop files
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1229
diff
changeset
|
1423 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
|
1424 } |
1055
4bbdfab3c89a
Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
1022
diff
changeset
|
1425 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |