static void gtk_application_window_added_x11 (GtkApplication *application, GtkWindow *window) { if (application->priv->session_bus == NULL) return; if (GTK_IS_APPLICATION_WINDOW (window)) { GtkApplicationWindow *app_window = GTK_APPLICATION_WINDOW (window); gboolean success; /* GtkApplicationWindow associates with us when it is first created, * so surely it's not realized yet... */ g_assert (!gtk_widget_get_realized (GTK_WIDGET (window))); do { gchar *window_path; guint window_id; window_id = application->priv->next_id++; window_path = g_strdup_printf ("%s/window/%d", application->priv->object_path, window_id); success = gtk_application_window_publish (app_window, application->priv->session_bus, window_path); g_free (window_path); } while (!success); } }
static void gtk_application_window_removed_x11 (GtkApplication *application, GtkWindow *window) { if (application->priv->session_bus == NULL) return; if (GTK_IS_APPLICATION_WINDOW (window)) gtk_application_window_unpublish (GTK_APPLICATION_WINDOW (window)); }
static void activate_close (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GList *windows, *l; /* FIXME: use gtk_application_get_active_window() once it exists */ windows = gtk_application_get_windows (GTK_APPLICATION (user_data)); for (l = windows; l != NULL; l = l->next) { GtkWidget *window = l->data; if (!GTK_IS_APPLICATION_WINDOW (window)) continue; gtk_widget_destroy (window); break; } }
static void gtk_application_impl_dbus_window_added (GtkApplicationImpl *impl, GtkWindow *window) { GtkApplicationImplDBus *dbus = (GtkApplicationImplDBus *) impl; GActionGroup *actions; gchar *path; guint id; if (!dbus->session || !GTK_IS_APPLICATION_WINDOW (window)) return; /* Export the action group of this window, based on its id */ actions = gtk_application_window_get_action_group (GTK_APPLICATION_WINDOW (window)); path = gtk_application_impl_dbus_get_window_path (dbus, window); id = g_dbus_connection_export_action_group (dbus->session, path, actions, NULL); g_free (path); g_object_set_qdata (G_OBJECT (window), gtk_application_impl_dbus_export_id_quark (), GUINT_TO_POINTER (id)); }