// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_PLATFORM_PLUGIN_H_
#define FLUTTER_SHELL_PLATFORM_LINUX_FL_PLATFORM_PLUGIN_H_

#include "flutter/shell/platform/linux/public/flutter_linux/fl_binary_messenger.h"

G_BEGIN_DECLS

G_DECLARE_FINAL_TYPE(FlPlatformPlugin,
                     fl_platform_plugin,
                     FL,
                     PLATFORM_PLUGIN,
                     GObject);

/**
 * FlPlatformPlugin:
 *
 * #FlPlatformPlugin is a plugin that implements the shell side
 * of SystemChannels.platform from the Flutter services library.
 */

/**
 * fl_platform_plugin_new:
 * @messenger: an #FlBinaryMessenger
 *
 * Creates a new plugin that implements SystemChannels.platform from the
 * Flutter services library.
 *
 * Returns: a new #FlPlatformPlugin
 */
FlPlatformPlugin* fl_platform_plugin_new(FlBinaryMessenger* messenger);

/**
 * fl_platform_plugin_request_app_exit:
 * @plugin: an #FlPlatformPlugin
 *
 * Request the application exits (i.e. due to the window being requested to be
 * closed).
 *
 * Calling this will only send an exit request to the framework if the framework
 * has already indicated that it is ready to receive requests by sending a
 * "System.initializationComplete" method call on the platform channel. Calls
 * before initialization is complete will result in an immediate exit.
 */
void fl_platform_plugin_request_app_exit(FlPlatformPlugin* plugin);

G_END_DECLS

#endif  // FLUTTER_SHELL_PLATFORM_LINUX_FL_PLATFORM_PLUGIN_H_
