summaryrefslogtreecommitdiff
path: root/pluma/smclient/eggdesktopfile.h
blob: 18fe4631a11543057c82d06d2b69bac26e186776 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/* eggdesktopfile.h - Freedesktop.Org Desktop Files
 * Copyright (C) 2007 Novell, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; see the file COPYING.LIB. If not,
 * write to the Free Software Foundation, Inc., 59 Temple Place -
 * Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef __EGG_DESKTOP_FILE_H__
#define __EGG_DESKTOP_FILE_H__

#include <glib.h>

G_BEGIN_DECLS

typedef struct EggDesktopFile EggDesktopFile;

typedef enum {
	EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED,

	EGG_DESKTOP_FILE_TYPE_APPLICATION,
	EGG_DESKTOP_FILE_TYPE_LINK,
	EGG_DESKTOP_FILE_TYPE_DIRECTORY
} EggDesktopFileType;

EggDesktopFile     *egg_desktop_file_new                (const char   *desktop_file_path,
							 GError      **error);

EggDesktopFile     *egg_desktop_file_new_from_data_dirs (const char   *desktop_file_path,
							 GError      **error);
EggDesktopFile     *egg_desktop_file_new_from_dirs      (const char   *desktop_file_path,
							 const char  **search_dirs,
							 GError      **error);
EggDesktopFile     *egg_desktop_file_new_from_key_file  (GKeyFile     *key_file,
							 const char   *source,
							 GError      **error);

void                egg_desktop_file_free               (EggDesktopFile  *desktop_file);

const char         *egg_desktop_file_get_source         (EggDesktopFile  *desktop_file);

EggDesktopFileType  egg_desktop_file_get_desktop_file_type (EggDesktopFile  *desktop_file);

const char         *egg_desktop_file_get_name           (EggDesktopFile  *desktop_file);
const char         *egg_desktop_file_get_icon           (EggDesktopFile  *desktop_file);

gboolean            egg_desktop_file_can_launch         (EggDesktopFile  *desktop_file,
							 const char      *desktop_environment);

gboolean            egg_desktop_file_accepts_documents  (EggDesktopFile  *desktop_file);
gboolean            egg_desktop_file_accepts_multiple   (EggDesktopFile  *desktop_file);
gboolean            egg_desktop_file_accepts_uris       (EggDesktopFile  *desktop_file);

char               *egg_desktop_file_parse_exec         (EggDesktopFile  *desktop_file,
							 GSList          *documents,
							 GError         **error);

gboolean            egg_desktop_file_launch             (EggDesktopFile  *desktop_file,
							 GSList          *documents,
							 GError         **error,
							 ...) G_GNUC_NULL_TERMINATED;

typedef enum {
	EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1,
	EGG_DESKTOP_FILE_LAUNCH_PUTENV,
	EGG_DESKTOP_FILE_LAUNCH_SCREEN,
	EGG_DESKTOP_FILE_LAUNCH_WORKSPACE,
	EGG_DESKTOP_FILE_LAUNCH_DIRECTORY,
	EGG_DESKTOP_FILE_LAUNCH_TIME,
	EGG_DESKTOP_FILE_LAUNCH_FLAGS,
	EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC,
	EGG_DESKTOP_FILE_LAUNCH_RETURN_PID,
	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE,
	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE,
	EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE,
	EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID
} EggDesktopFileLaunchOption;

/* Standard Keys */
#define EGG_DESKTOP_FILE_GROUP			"Desktop Entry"

#define EGG_DESKTOP_FILE_KEY_TYPE		"Type"
#define EGG_DESKTOP_FILE_KEY_VERSION		"Version"
#define EGG_DESKTOP_FILE_KEY_NAME		"Name"
#define EGG_DESKTOP_FILE_KEY_GENERIC_NAME	"GenericName"
#define EGG_DESKTOP_FILE_KEY_NO_DISPLAY		"NoDisplay"
#define EGG_DESKTOP_FILE_KEY_COMMENT		"Comment"
#define EGG_DESKTOP_FILE_KEY_ICON		"Icon"
#define EGG_DESKTOP_FILE_KEY_HIDDEN		"Hidden"
#define EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN	"OnlyShowIn"
#define EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN	"NotShowIn"
#define EGG_DESKTOP_FILE_KEY_TRY_EXEC		"TryExec"
#define EGG_DESKTOP_FILE_KEY_EXEC		"Exec"
#define EGG_DESKTOP_FILE_KEY_PATH		"Path"
#define EGG_DESKTOP_FILE_KEY_TERMINAL		"Terminal"
#define EGG_DESKTOP_FILE_KEY_MIME_TYPE		"MimeType"
#define EGG_DESKTOP_FILE_KEY_CATEGORIES		"Categories"
#define EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY	"StartupNotify"
#define EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS	"StartupWMClass"
#define EGG_DESKTOP_FILE_KEY_URL		"URL"

/* Accessors */
gboolean  egg_desktop_file_has_key                (EggDesktopFile  *desktop_file,
						   const char      *key,
						   GError         **error);
char     *egg_desktop_file_get_string             (EggDesktopFile  *desktop_file,
						   const char      *key,
						   GError         **error) G_GNUC_MALLOC;
char     *egg_desktop_file_get_locale_string      (EggDesktopFile  *desktop_file,
						   const char      *key,
						   const char      *locale,
						   GError         **error) G_GNUC_MALLOC;
gboolean  egg_desktop_file_get_boolean            (EggDesktopFile  *desktop_file,
						   const char      *key,
						   GError         **error);
double    egg_desktop_file_get_numeric            (EggDesktopFile  *desktop_file,
						   const char      *key,
						   GError         **error);
char    **egg_desktop_file_get_string_list        (EggDesktopFile  *desktop_file,
						   const char      *key,
						   gsize           *length,
						   GError         **error) G_GNUC_MALLOC;
char    **egg_desktop_file_get_locale_string_list (EggDesktopFile  *desktop_file,
						   const char      *key,
						   const char      *locale,
						   gsize           *length,
						   GError         **error) G_GNUC_MALLOC;


/* Errors */
#define EGG_DESKTOP_FILE_ERROR egg_desktop_file_error_quark()

GQuark egg_desktop_file_error_quark (void);

typedef enum {
	EGG_DESKTOP_FILE_ERROR_INVALID,
	EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
	EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION
} EggDesktopFileError;

/* Global application desktop file */
void            egg_set_desktop_file                  (const char *desktop_file_path);
void            egg_set_desktop_file_without_defaults (const char *desktop_file_path);
EggDesktopFile *egg_get_desktop_file                  (void);


G_END_DECLS

#endif /* __EGG_DESKTOP_FILE_H__ */