Branch data Line data Source code
1 : : /* 2 : : * Copyright © 2013 Lars Uebernickel 3 : : * 4 : : * SPDX-License-Identifier: LGPL-2.1-or-later 5 : : * 6 : : * This library is free software; you can redistribute it and/or 7 : : * modify it under the terms of the GNU Lesser General Public 8 : : * License as published by the Free Software Foundation; either 9 : : * version 2.1 of the License, or (at your option) any later version. 10 : : * 11 : : * This library is distributed in the hope that it will be useful, 12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 : : * Lesser General Public License for more details. 15 : : * 16 : : * You should have received a copy of the GNU Lesser General 17 : : * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. 18 : : * 19 : : * Authors: Lars Uebernickel <lars@uebernic.de> 20 : : */ 21 : : 22 : : #include "gnotificationbackend.h" 23 : : 24 : : #include "gnotification.h" 25 : : #include "gapplication.h" 26 : : #include "gactiongroup.h" 27 : : #include "giomodule-priv.h" 28 : : 29 [ + + + - : 603 : G_DEFINE_TYPE (GNotificationBackend, g_notification_backend, G_TYPE_OBJECT) + + ] 30 : : 31 : : static void 32 : 5 : g_notification_backend_dispose (GObject *obj) 33 : : { 34 : 5 : GNotificationBackend *backend = G_NOTIFICATION_BACKEND (obj); 35 : : 36 : 5 : backend->application = NULL; /* no reference held, but clear the pointer anyway to avoid it dangling */ 37 : 5 : g_clear_object (&backend->dbus_connection); 38 : : 39 : 5 : G_OBJECT_CLASS (g_notification_backend_parent_class)->dispose (obj); 40 : 5 : } 41 : : 42 : : static void 43 : 2 : g_notification_backend_class_init (GNotificationBackendClass *class) 44 : : { 45 : 2 : GObjectClass *object_class = G_OBJECT_CLASS (class); 46 : : 47 : 2 : object_class->dispose = g_notification_backend_dispose; 48 : 2 : } 49 : : 50 : : static void 51 : 5 : g_notification_backend_init (GNotificationBackend *backend) 52 : : { 53 : 5 : } 54 : : 55 : : GNotificationBackend * 56 : 3 : g_notification_backend_new_default (GApplication *application) 57 : : { 58 : : GType backend_type; 59 : : GNotificationBackend *backend; 60 : : 61 : 3 : g_return_val_if_fail (G_IS_APPLICATION (application), NULL); 62 : : 63 : 3 : backend_type = _g_io_module_get_default_type (G_NOTIFICATION_BACKEND_EXTENSION_POINT_NAME, 64 : : "GNOTIFICATION_BACKEND", 65 : : G_STRUCT_OFFSET (GNotificationBackendClass, is_supported)); 66 : : 67 : 3 : backend = g_object_new (backend_type, NULL); 68 : : 69 : : /* Avoid ref cycle by not taking a ref to the application at all. The 70 : : * backend only lives as long as the application does. 71 : : */ 72 : 3 : backend->application = application; 73 : : 74 : 3 : backend->dbus_connection = g_application_get_dbus_connection (application); 75 [ + - ]: 3 : if (backend->dbus_connection) 76 : 3 : g_object_ref (backend->dbus_connection); 77 : : 78 : 3 : return backend; 79 : : } 80 : : 81 : : void 82 : 5 : g_notification_backend_send_notification (GNotificationBackend *backend, 83 : : const gchar *id, 84 : : GNotification *notification) 85 : : { 86 : 5 : g_return_if_fail (G_IS_NOTIFICATION_BACKEND (backend)); 87 : 5 : g_return_if_fail (G_IS_NOTIFICATION (notification)); 88 : : 89 : 5 : G_NOTIFICATION_BACKEND_GET_CLASS (backend)->send_notification (backend, id, notification); 90 : : } 91 : : 92 : : void 93 : 3 : g_notification_backend_withdraw_notification (GNotificationBackend *backend, 94 : : const gchar *id) 95 : : { 96 : 3 : g_return_if_fail (G_IS_NOTIFICATION_BACKEND (backend)); 97 : 3 : g_return_if_fail (id != NULL); 98 : : 99 : 3 : G_NOTIFICATION_BACKEND_GET_CLASS (backend)->withdraw_notification (backend, id); 100 : : }