| /* |
| * 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); |
| } |