| /* | |
| * Copyright © 2013 Lars Uebernickel | |
| * | |
| * SPDX-License-Identifier: LGPL-2.1-or-later | |
| * | |
| * 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.1 of the License, 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 <http://www.gnu.org/licenses/>. | |
| * | |
| * Authors: Lars Uebernickel <lars@uebernic.de> | |
| */ | |
| #include "gnotificationbackend.h" | |
| #include "gnotification.h" | |
| #include "gapplication.h" | |
| #include "gactiongroup.h" | |
| #include "giomodule-priv.h" | |
| G_DEFINE_TYPE (GNotificationBackend, g_notification_backend, G_TYPE_OBJECT) | |
| static void | |
| g_notification_backend_dispose (GObject *obj) | |
| { | |
| GNotificationBackend *backend = G_NOTIFICATION_BACKEND (obj); | |
| backend->application = NULL; /* no reference held, but clear the pointer anyway to avoid it dangling */ | |
| g_clear_object (&backend->dbus_connection); | |
| G_OBJECT_CLASS (g_notification_backend_parent_class)->dispose (obj); | |
| } | |
| static void | |
| g_notification_backend_class_init (GNotificationBackendClass *class) | |
| { | |
| GObjectClass *object_class = G_OBJECT_CLASS (class); | |
| object_class->dispose = g_notification_backend_dispose; | |
| } | |
| static void | |
| g_notification_backend_init (GNotificationBackend *backend) | |
| { | |
| } | |
| GNotificationBackend * | |
| g_notification_backend_new_default (GApplication *application) | |
| { | |
| GType backend_type; | |
| GNotificationBackend *backend; | |
| g_return_val_if_fail (G_IS_APPLICATION (application), NULL); | |
| backend_type = _g_io_module_get_default_type (G_NOTIFICATION_BACKEND_EXTENSION_POINT_NAME, | |
| "GNOTIFICATION_BACKEND", | |
| G_STRUCT_OFFSET (GNotificationBackendClass, is_supported)); | |
| backend = g_object_new (backend_type, NULL); | |
| /* Avoid ref cycle by not taking a ref to the application at all. The | |
| * backend only lives as long as the application does. | |
| */ | |
| backend->application = application; | |
| backend->dbus_connection = g_application_get_dbus_connection (application); | |
| if (backend->dbus_connection) | |
| g_object_ref (backend->dbus_connection); | |
| return backend; | |
| } | |
| void | |
| g_notification_backend_send_notification (GNotificationBackend *backend, | |
| const gchar *id, | |
| GNotification *notification) | |
| { | |
| g_return_if_fail (G_IS_NOTIFICATION_BACKEND (backend)); | |
| g_return_if_fail (G_IS_NOTIFICATION (notification)); | |
| G_NOTIFICATION_BACKEND_GET_CLASS (backend)->send_notification (backend, id, notification); | |
| } | |
| void | |
| g_notification_backend_withdraw_notification (GNotificationBackend *backend, | |
| const gchar *id) | |
| { | |
| g_return_if_fail (G_IS_NOTIFICATION_BACKEND (backend)); | |
| g_return_if_fail (id != NULL); | |
| G_NOTIFICATION_BACKEND_GET_CLASS (backend)->withdraw_notification (backend, id); | |
| } |