#include "giotypes.h"

typedef struct _GApplicationImpl GApplicationImpl;

typedef struct
{
  gchar *name;

  GVariantType *parameter_type;
  gboolean      enabled;
  GVariant     *state;
} RemoteActionInfo;

G_GNUC_INTERNAL
void                    g_application_impl_destroy                      (GApplicationImpl   *impl);

G_GNUC_INTERNAL
GApplicationImpl *      g_application_impl_register                     (GApplication       *application,
                                                                         const gchar        *appid,
                                                                         GApplicationFlags   flags,
                                                                         GHashTable        **remote_actions,
                                                                         GCancellable       *cancellable,
                                                                         GError            **error);

G_GNUC_INTERNAL
void                    g_application_impl_activate                     (GApplicationImpl   *impl,
                                                                         GVariant           *platform_data);

G_GNUC_INTERNAL
void                    g_application_impl_open                         (GApplicationImpl   *impl,
                                                                         GFile             **files,
                                                                         gint                n_files,
                                                                         const gchar        *hint,
                                                                         GVariant           *platform_data);

G_GNUC_INTERNAL
int                     g_application_impl_command_line                 (GApplicationImpl   *impl,
                                                                         gchar             **arguments,
                                                                         GVariant           *platform_data);

G_GNUC_INTERNAL
void                    g_application_impl_change_action_state          (GApplicationImpl   *impl,
                                                                         const gchar        *action_name,
                                                                         GVariant           *value,
                                                                         GVariant           *platform_data);

G_GNUC_INTERNAL
void                    g_application_impl_activate_action              (GApplicationImpl   *impl,
                                                                         const gchar        *action_name,
                                                                         GVariant           *parameter,
                                                                         GVariant           *platform_data);

G_GNUC_INTERNAL
void                    g_application_impl_flush                        (GApplicationImpl   *impl);
