annotate src/editors.c @ 1652:58a5d1e01e33

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