1 #include "gapplicationcommandline.h"
6 G_DEFINE_TYPE (GApplicationCommandLine, g_application_command_line, G_TYPE_OBJECT)
16 struct _GApplicationCommandLinePrivate
18 GVariant *platform_data;
24 #define IS_REMOTE(cmdline) ((cmdline)->priv->platform_data != NULL)
27 g_application_command_line_get_argc_argv (GApplicationCommandLine *cmdline,
33 g_return_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline));
34 g_return_if_fail (argc != NULL && argv != NULL);
36 *argv = g_variant_dup_bytestring_array (cmdline->priv->arguments, &len);
41 g_application_command_line_get_arguments (GApplicationCommandLine *cmdline)
43 return g_variant_ref (cmdline->priv->arguments);
47 g_application_command_line_get_cwd (GApplicationCommandLine *cmdline)
49 if (cmdline->priv->cwd)
50 return g_variant_get_bytestring (cmdline->priv->cwd);
56 g_application_command_line_get_cwd_variant (GApplicationCommandLine *cmdline)
58 if (cmdline->priv->cwd)
59 return g_variant_ref (cmdline->priv->cwd);
65 g_application_command_line_get_is_remote (GApplicationCommandLine *cmdline)
67 return IS_REMOTE (cmdline);
71 g_application_command_line_real_print_literal (GApplicationCommandLine *cmdline,
74 g_print ("%s\n", message);
78 g_application_command_line_real_printerr_literal (GApplicationCommandLine *cmdline,
81 g_printerr ("%s\n", message);
85 g_application_command_line_print (GApplicationCommandLine *cmdline,
92 g_return_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline));
93 g_return_if_fail (format != NULL);
95 va_start (ap, format);
96 message = g_strdup_vprintf (format, ap);
99 G_APPLICATION_COMMAND_LINE_GET_CLASS (cmdline)
100 ->print_literal (cmdline, message);
105 g_application_command_line_printerr (GApplicationCommandLine *cmdline,
112 g_return_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline));
113 g_return_if_fail (format != NULL);
115 va_start (ap, format);
116 message = g_strdup_vprintf (format, ap);
119 G_APPLICATION_COMMAND_LINE_GET_CLASS (cmdline)
120 ->printerr_literal (cmdline, message);
125 g_application_command_line_set_exit_status (GApplicationCommandLine *cmdline,
128 g_return_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline));
130 cmdline->priv->exit_status = exit_status;
134 g_application_command_line_get_exit_status (GApplicationCommandLine *cmdline)
136 g_return_val_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline), -1);
138 return cmdline->priv->exit_status;
142 grok_platform_data (GApplicationCommandLine *cmdline)
148 g_variant_iter_init (&iter, cmdline->priv->platform_data);
150 while (g_variant_iter_loop (&iter, "{&sv}", &key, &value))
151 if (strcmp (key, "cwd") == 0)
153 if (!cmdline->priv->cwd)
154 cmdline->priv->cwd = g_variant_ref (value);
159 g_application_command_line_get_property (GObject *object, guint prop_id,
160 GValue *value, GParamSpec *pspec)
162 GApplicationCommandLine *cmdline = G_APPLICATION_COMMAND_LINE (object);
167 g_value_set_variant (value, cmdline->priv->arguments);
170 case PROP_PLATFORM_DATA:
171 g_value_set_variant (value, cmdline->priv->platform_data);
175 g_value_set_boolean (value, IS_REMOTE (cmdline));
179 g_assert_not_reached ();
184 g_application_command_line_set_property (GObject *object, guint prop_id,
185 const GValue *value, GParamSpec *pspec)
187 GApplicationCommandLine *cmdline = G_APPLICATION_COMMAND_LINE (object);
192 g_assert (cmdline->priv->arguments == NULL);
193 cmdline->priv->arguments = g_value_dup_variant (value);
196 case PROP_PLATFORM_DATA:
197 g_assert (cmdline->priv->platform_data == NULL);
198 cmdline->priv->platform_data = g_value_dup_variant (value);
199 if (cmdline->priv->platform_data != NULL)
200 grok_platform_data (cmdline);
204 g_assert_not_reached ();
209 g_application_command_line_finalize (GObject *object)
211 GApplicationCommandLine *cmdline = G_APPLICATION_COMMAND_LINE (object);
213 if (cmdline->priv->platform_data)
214 g_variant_unref (cmdline->priv->platform_data);
215 if (cmdline->priv->arguments)
216 g_variant_unref (cmdline->priv->arguments);
217 if (cmdline->priv->cwd)
218 g_variant_unref (cmdline->priv->cwd);
220 G_OBJECT_CLASS (g_application_command_line_parent_class)
225 g_application_command_line_init (GApplicationCommandLine *cmdline)
228 G_TYPE_INSTANCE_GET_PRIVATE (cmdline,
229 G_TYPE_APPLICATION_COMMAND_LINE,
230 GApplicationCommandLinePrivate);
234 g_application_command_line_class_init (GApplicationCommandLineClass *class)
236 GObjectClass *object_class = G_OBJECT_CLASS (class);
238 object_class->get_property = g_application_command_line_get_property;
239 object_class->set_property = g_application_command_line_set_property;
240 object_class->finalize = g_application_command_line_finalize;
241 class->printerr_literal = g_application_command_line_real_printerr_literal;
242 class->print_literal = g_application_command_line_real_print_literal;
244 g_object_class_install_property (object_class, PROP_ARGUMENTS,
245 g_param_spec_variant ("arguments", "commandline arguments",
246 "the commandline that caused this cmdline",
247 G_VARIANT_TYPE_BYTESTRING_ARRAY, NULL,
248 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
249 G_PARAM_STATIC_STRINGS));
251 g_object_class_install_property (object_class, PROP_PLATFORM_DATA,
252 g_param_spec_variant ("platform-data", "platform data",
253 "platform-specific data for the cmdline",
254 G_VARIANT_TYPE ("a{sv}"), NULL,
255 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
256 G_PARAM_STATIC_STRINGS));
258 g_object_class_install_property (object_class, PROP_IS_REMOTE,
259 g_param_spec_boolean ("is-remote", "is remote",
260 "TRUE if this is a remote cmdline", FALSE,
261 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
263 g_type_class_add_private (class, sizeof (GApplicationCommandLinePrivate));
267 g_application_command_line_get_platform_data (GApplicationCommandLine *cmdline)
269 g_return_val_if_fail (G_IS_APPLICATION_COMMAND_LINE (cmdline), NULL);
270 g_return_val_if_fail (IS_REMOTE (cmdline), NULL);
272 return g_variant_ref (cmdline->priv->platform_data);