1 /* 2 * Copyright © 2011, 2013 Canonical Limited 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the licence, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 16 * 17 * Author: Ryan Lortie <desrt@desrt.ca> 18 */ 19 20 21 #ifndef __GTK_APPLICATION_PRIVATE_H__ 22 #define __GTK_APPLICATION_PRIVATE_H__ 23 24 #include "gtkapplicationwindow.h" 25 #include "gtkwindowprivate.h" 26 27 #include "gtkactionmuxer.h" 28 #include "gtkapplicationaccelsprivate.h" 29 30 G_BEGIN_DECLS 31 32 void gtk_application_window_set_id (GtkApplicationWindow *window, 33 guint id); 34 GActionGroup * gtk_application_window_get_action_group (GtkApplicationWindow *window); 35 void gtk_application_handle_window_realize (GtkApplication *application, 36 GtkWindow *window); 37 void gtk_application_handle_window_map (GtkApplication *application, 38 GtkWindow *window); 39 GtkActionMuxer * gtk_application_get_parent_muxer_for_window (GtkWindow *window); 40 41 GtkActionMuxer * gtk_application_get_action_muxer (GtkApplication *application); 42 void gtk_application_insert_action_group (GtkApplication *application, 43 const gchar *name, 44 GActionGroup *action_group); 45 46 GtkApplicationAccels * gtk_application_get_application_accels (GtkApplication *application); 47 48 void gtk_application_set_screensaver_active (GtkApplication *application, 49 gboolean active); 50 51 #define GTK_TYPE_APPLICATION_IMPL (gtk_application_impl_get_type ()) 52 #define GTK_APPLICATION_IMPL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ 53 GTK_TYPE_APPLICATION_IMPL, \ 54 GtkApplicationImplClass)) 55 #define GTK_APPLICATION_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ 56 GTK_TYPE_APPLICATION_IMPL, \ 57 GtkApplicationImplClass)) 58 59 typedef struct 60 { 61 GObject parent_instance; 62 GtkApplication *application; 63 GdkDisplay *display; 64 } GtkApplicationImpl; 65 66 typedef struct 67 { 68 GObjectClass parent_class; 69 70 void (* startup) (GtkApplicationImpl *impl, 71 gboolean register_session); 72 void (* shutdown) (GtkApplicationImpl *impl); 73 74 void (* before_emit) (GtkApplicationImpl *impl, 75 GVariant *platform_data); 76 77 void (* window_added) (GtkApplicationImpl *impl, 78 GtkWindow *window); 79 void (* window_removed) (GtkApplicationImpl *impl, 80 GtkWindow *window); 81 void (* active_window_changed) (GtkApplicationImpl *impl, 82 GtkWindow *window); 83 void (* handle_window_realize) (GtkApplicationImpl *impl, 84 GtkWindow *window); 85 void (* handle_window_map) (GtkApplicationImpl *impl, 86 GtkWindow *window); 87 88 void (* set_app_menu) (GtkApplicationImpl *impl, 89 GMenuModel *app_menu); 90 void (* set_menubar) (GtkApplicationImpl *impl, 91 GMenuModel *menubar); 92 93 guint (* inhibit) (GtkApplicationImpl *impl, 94 GtkWindow *window, 95 GtkApplicationInhibitFlags flags, 96 const gchar *reason); 97 void (* uninhibit) (GtkApplicationImpl *impl, 98 guint cookie); 99 gboolean (* is_inhibited) (GtkApplicationImpl *impl, 100 GtkApplicationInhibitFlags flags); 101 102 gboolean (* prefers_app_menu) (GtkApplicationImpl *impl); 103 104 105 } GtkApplicationImplClass; 106 107 #define GTK_TYPE_APPLICATION_IMPL_DBUS (gtk_application_impl_dbus_get_type ()) 108 #define GTK_APPLICATION_IMPL_DBUS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ 109 GTK_TYPE_APPLICATION_IMPL_DBUS, \ 110 GtkApplicationImplDBusClass)) 111 #define GTK_APPLICATION_IMPL_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ 112 GTK_TYPE_APPLICATION_IMPL_DBUS, \ 113 GtkApplicationImplDBusClass)) 114 115 typedef struct 116 { 117 GtkApplicationImpl impl; 118 119 GDBusConnection *session; 120 121 const gchar *application_id; 122 const gchar *unique_name; 123 const gchar *object_path; 124 125 gchar *app_menu_path; 126 guint app_menu_id; 127 128 gchar *menubar_path; 129 guint menubar_id; 130 131 /* Session management... */ 132 GDBusProxy *sm_proxy; 133 GDBusProxy *client_proxy; 134 gchar *client_path; 135 GDBusProxy *ss_proxy; 136 137 /* Portal support */ 138 GDBusProxy *inhibit_proxy; 139 GSList *inhibit_handles; 140 guint state_changed_handler; 141 char * session_id; 142 guint session_state; 143 } GtkApplicationImplDBus; 144 145 typedef struct 146 { 147 GtkApplicationImplClass parent_class; 148 149 /* returns floating */ 150 GVariant * (* get_window_system_id) (GtkApplicationImplDBus *dbus, 151 GtkWindow *window); 152 } GtkApplicationImplDBusClass; 153 154 GType gtk_application_impl_get_type (void); 155 GType gtk_application_impl_dbus_get_type (void); 156 GType gtk_application_impl_x11_get_type (void); 157 GType gtk_application_impl_wayland_get_type (void); 158 GType gtk_application_impl_quartz_get_type (void); 159 160 GtkApplicationImpl * gtk_application_impl_new (GtkApplication *application, 161 GdkDisplay *display); 162 void gtk_application_impl_startup (GtkApplicationImpl *impl, 163 gboolean register_sesion); 164 void gtk_application_impl_shutdown (GtkApplicationImpl *impl); 165 void gtk_application_impl_before_emit (GtkApplicationImpl *impl, 166 GVariant *platform_data); 167 void gtk_application_impl_window_added (GtkApplicationImpl *impl, 168 GtkWindow *window); 169 void gtk_application_impl_window_removed (GtkApplicationImpl *impl, 170 GtkWindow *window); 171 void gtk_application_impl_active_window_changed (GtkApplicationImpl *impl, 172 GtkWindow *window); 173 void gtk_application_impl_handle_window_realize (GtkApplicationImpl *impl, 174 GtkWindow *window); 175 void gtk_application_impl_handle_window_map (GtkApplicationImpl *impl, 176 GtkWindow *window); 177 void gtk_application_impl_set_app_menu (GtkApplicationImpl *impl, 178 GMenuModel *app_menu); 179 void gtk_application_impl_set_menubar (GtkApplicationImpl *impl, 180 GMenuModel *menubar); 181 guint gtk_application_impl_inhibit (GtkApplicationImpl *impl, 182 GtkWindow *window, 183 GtkApplicationInhibitFlags flags, 184 const gchar *reason); 185 void gtk_application_impl_uninhibit (GtkApplicationImpl *impl, 186 guint cookie); 187 gboolean gtk_application_impl_is_inhibited (GtkApplicationImpl *impl, 188 GtkApplicationInhibitFlags flags); 189 190 gchar * gtk_application_impl_dbus_get_window_path (GtkApplicationImplDBus *dbus, 191 GtkWindow *window); 192 gboolean gtk_application_impl_prefers_app_menu (GtkApplicationImpl *impl); 193 194 195 void gtk_application_impl_quartz_setup_menu (GMenuModel *model, 196 GtkActionMuxer *muxer); 197 198 G_END_DECLS 199 200 #endif /* __GTK_APPLICATION_PRIVATE_H__ */ 201