/*
* Copyright © 2011, 2013 Canonical Limited
*
* 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 licence, 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. If not, see .
*
* Author: Ryan Lortie
*/
#pragma once
#include "gtkapplicationwindow.h"
#include "gtkwindowprivate.h"
#include "gtkactionmuxerprivate.h"
#include "gtkapplicationaccelsprivate.h"
G_BEGIN_DECLS
void gtk_application_window_set_id (GtkApplicationWindow *window,
guint id);
GActionGroup * gtk_application_window_get_action_group (GtkApplicationWindow *window);
void gtk_application_handle_window_realize (GtkApplication *application,
GtkWindow *window);
void gtk_application_handle_window_map (GtkApplication *application,
GtkWindow *window);
GtkActionMuxer * gtk_application_get_parent_muxer_for_window (GtkWindow *window);
GtkActionMuxer * gtk_application_get_action_muxer (GtkApplication *application);
void gtk_application_insert_action_group (GtkApplication *application,
const char *name,
GActionGroup *action_group);
GtkApplicationAccels * gtk_application_get_application_accels (GtkApplication *application);
void gtk_application_set_screensaver_active (GtkApplication *application,
gboolean active);
#define GTK_TYPE_APPLICATION_IMPL (gtk_application_impl_get_type ())
#define GTK_APPLICATION_IMPL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \
GTK_TYPE_APPLICATION_IMPL, \
GtkApplicationImplClass))
#define GTK_APPLICATION_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
GTK_TYPE_APPLICATION_IMPL, \
GtkApplicationImplClass))
typedef struct
{
GObject parent_instance;
GtkApplication *application;
GdkDisplay *display;
} GtkApplicationImpl;
typedef struct
{
GObjectClass parent_class;
void (* startup) (GtkApplicationImpl *impl,
gboolean register_session);
void (* shutdown) (GtkApplicationImpl *impl);
void (* before_emit) (GtkApplicationImpl *impl,
GVariant *platform_data);
void (* window_added) (GtkApplicationImpl *impl,
GtkWindow *window);
void (* window_removed) (GtkApplicationImpl *impl,
GtkWindow *window);
void (* active_window_changed) (GtkApplicationImpl *impl,
GtkWindow *window);
void (* handle_window_realize) (GtkApplicationImpl *impl,
GtkWindow *window);
void (* handle_window_map) (GtkApplicationImpl *impl,
GtkWindow *window);
void (* set_app_menu) (GtkApplicationImpl *impl,
GMenuModel *app_menu);
void (* set_menubar) (GtkApplicationImpl *impl,
GMenuModel *menubar);
guint (* inhibit) (GtkApplicationImpl *impl,
GtkWindow *window,
GtkApplicationInhibitFlags flags,
const char *reason);
void (* uninhibit) (GtkApplicationImpl *impl,
guint cookie);
gboolean (* is_inhibited) (GtkApplicationImpl *impl,
GtkApplicationInhibitFlags flags);
gboolean (* prefers_app_menu) (GtkApplicationImpl *impl);
} GtkApplicationImplClass;
#define GTK_TYPE_APPLICATION_IMPL_DBUS (gtk_application_impl_dbus_get_type ())
#define GTK_APPLICATION_IMPL_DBUS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \
GTK_TYPE_APPLICATION_IMPL_DBUS, \
GtkApplicationImplDBusClass))
#define GTK_APPLICATION_IMPL_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
GTK_TYPE_APPLICATION_IMPL_DBUS, \
GtkApplicationImplDBusClass))
typedef struct
{
GtkApplicationImpl impl;
GDBusConnection *session;
GCancellable *cancellable;
const char *application_id;
const char *unique_name;
const char *object_path;
char *app_menu_path;
guint app_menu_id;
char *menubar_path;
guint menubar_id;
/* Session management... */
GDBusProxy *sm_proxy;
GDBusProxy *client_proxy;
char *client_path;
GDBusProxy *ss_proxy;
/* Portal support */
GDBusProxy *inhibit_proxy;
GSList *inhibit_handles;
guint state_changed_handler;
char * session_id;
guint session_state;
} GtkApplicationImplDBus;
typedef struct
{
GtkApplicationImplClass parent_class;
/* returns floating */
GVariant * (* get_window_system_id) (GtkApplicationImplDBus *dbus,
GtkWindow *window);
} GtkApplicationImplDBusClass;
GType gtk_application_impl_get_type (void);
GType gtk_application_impl_dbus_get_type (void);
GType gtk_application_impl_x11_get_type (void);
GType gtk_application_impl_wayland_get_type (void);
GType gtk_application_impl_quartz_get_type (void);
GtkApplicationImpl * gtk_application_impl_new (GtkApplication *application,
GdkDisplay *display);
void gtk_application_impl_startup (GtkApplicationImpl *impl,
gboolean register_sesion);
void gtk_application_impl_shutdown (GtkApplicationImpl *impl);
void gtk_application_impl_before_emit (GtkApplicationImpl *impl,
GVariant *platform_data);
void gtk_application_impl_window_added (GtkApplicationImpl *impl,
GtkWindow *window);
void gtk_application_impl_window_removed (GtkApplicationImpl *impl,
GtkWindow *window);
void gtk_application_impl_active_window_changed (GtkApplicationImpl *impl,
GtkWindow *window);
void gtk_application_impl_handle_window_realize (GtkApplicationImpl *impl,
GtkWindow *window);
void gtk_application_impl_handle_window_map (GtkApplicationImpl *impl,
GtkWindow *window);
void gtk_application_impl_set_app_menu (GtkApplicationImpl *impl,
GMenuModel *app_menu);
void gtk_application_impl_set_menubar (GtkApplicationImpl *impl,
GMenuModel *menubar);
guint gtk_application_impl_inhibit (GtkApplicationImpl *impl,
GtkWindow *window,
GtkApplicationInhibitFlags flags,
const char *reason);
void gtk_application_impl_uninhibit (GtkApplicationImpl *impl,
guint cookie);
gboolean gtk_application_impl_is_inhibited (GtkApplicationImpl *impl,
GtkApplicationInhibitFlags flags);
char * gtk_application_impl_dbus_get_window_path (GtkApplicationImplDBus *dbus,
GtkWindow *window);
gboolean gtk_application_impl_prefers_app_menu (GtkApplicationImpl *impl);
void gtk_application_impl_quartz_setup_menu (GMenuModel *model,
GtkActionMuxer *muxer);
G_END_DECLS