annotate src/editors.c @ 1618:552648eff4f2

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