annotate src/editors.c @ 2870:49bd0d974e88

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