/* * Copyright (C) 2014 Collabora Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "config.h" #include "WebKitNotification.h" #include "WebKitNotificationPrivate.h" #include "WebKitPrivate.h" #include "WebNotification.h" #include #include /** * SECTION: WebKitNotification * @Short_description: Object used to hold information about a notification that should be shown to the user. * @Title: WebKitNotification * * Since: 2.8 */ enum { PROP_0, PROP_ID, PROP_TITLE, PROP_BODY, PROP_TAG }; enum { CLOSED, CLICKED, LAST_SIGNAL }; struct _WebKitNotificationPrivate { CString title; CString body; CString tag; guint64 id; WebKitWebView* webView; }; static guint signals[LAST_SIGNAL] = { 0, }; WEBKIT_DEFINE_TYPE(WebKitNotification, webkit_notification, G_TYPE_OBJECT) static void webkitNotificationGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec) { WebKitNotification* notification = WEBKIT_NOTIFICATION(object); switch (propId) { case PROP_ID: g_value_set_uint64(value, webkit_notification_get_id(notification)); break; case PROP_TITLE: g_value_set_string(value, webkit_notification_get_title(notification)); break; case PROP_BODY: g_value_set_string(value, webkit_notification_get_body(notification)); break; case PROP_TAG: g_value_set_string(value, webkit_notification_get_tag(notification)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec); } } static void webkit_notification_class_init(WebKitNotificationClass* notificationClass) { GObjectClass* objectClass = G_OBJECT_CLASS(notificationClass); objectClass->get_property = webkitNotificationGetProperty; /** * WebKitNotification:id: * * The unique id for the notification. * * Since: 2.8 */ g_object_class_install_property(objectClass, PROP_ID, g_param_spec_uint64("id", _("ID"), _("The unique id for the notification"), 0, G_MAXUINT64, 0, WEBKIT_PARAM_READABLE)); /** * WebKitNotification:title: * * The title for the notification. * * Since: 2.8 */ g_object_class_install_property(objectClass, PROP_TITLE, g_param_spec_string("title", _("Title"), _("The title for the notification"), nullptr, WEBKIT_PARAM_READABLE)); /** * WebKitNotification:body: * * The body for the notification. * * Since: 2.8 */ g_object_class_install_property(objectClass, PROP_BODY, g_param_spec_string("body", _("Body"), _("The body for the notification"), nullptr, WEBKIT_PARAM_READABLE)); /** * WebKitNotification:tag: * * The tag identifier for the notification. * * Since: 2.16 */ g_object_class_install_property(objectClass, PROP_TAG, g_param_spec_string("tag", _("Tag"), _("The tag identifier for the notification"), nullptr, WEBKIT_PARAM_READABLE)); /** * WebKitNotification::closed: * @notification: the #WebKitNotification on which the signal is emitted * * Emitted when a notification has been withdrawn. * * The default handler will close the notification using libnotify, if built with * support for it. * * Since: 2.8 */ signals[CLOSED] = g_signal_new( "closed", G_TYPE_FROM_CLASS(notificationClass), G_SIGNAL_RUN_LAST, 0, 0, nullptr, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * WebKitNotification::clicked: * @notification: the #WebKitNotification on which the signal is emitted * * Emitted when a notification has been clicked. See webkit_notification_clicked(). * * Since: 2.12 */ signals[CLICKED] = g_signal_new( "clicked", G_TYPE_FROM_CLASS(notificationClass), G_SIGNAL_RUN_LAST, 0, 0, nullptr, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } WebKitNotification* webkitNotificationCreate(WebKitWebView* webView, const WebKit::WebNotification& webNotification) { WebKitNotification* notification = WEBKIT_NOTIFICATION(g_object_new(WEBKIT_TYPE_NOTIFICATION, nullptr)); notification->priv->id = webNotification.notificationID(); notification->priv->title = webNotification.title().utf8(); notification->priv->body = webNotification.body().utf8(); notification->priv->tag = webNotification.tag().utf8(); notification->priv->webView = webView; return notification; } WebKitWebView* webkitNotificationGetWebView(WebKitNotification* notification) { return notification->priv->webView; } /** * webkit_notification_get_id: * @notification: a #WebKitNotification * * Obtains the unique id for the notification. * * Returns: the unique id for the notification * * Since: 2.8 */ guint64 webkit_notification_get_id(WebKitNotification* notification) { g_return_val_if_fail(WEBKIT_IS_NOTIFICATION(notification), 0); return notification->priv->id; } /** * webkit_notification_get_title: * @notification: a #WebKitNotification * * Obtains the title for the notification. * * Returns: the title for the notification * * Since: 2.8 */ const gchar* webkit_notification_get_title(WebKitNotification* notification) { g_return_val_if_fail(WEBKIT_IS_NOTIFICATION(notification), nullptr); return notification->priv->title.data(); } /** * webkit_notification_get_body: * @notification: a #WebKitNotification * * Obtains the body for the notification. * * Returns: the body for the notification * * Since: 2.8 */ const gchar* webkit_notification_get_body(WebKitNotification* notification) { g_return_val_if_fail(WEBKIT_IS_NOTIFICATION(notification), nullptr); return notification->priv->body.data(); } /** * webkit_notification_get_tag: * @notification: a #WebKitNotification * * Obtains the tag identifier for the notification. * * Returns: (allow-none): the tag for the notification * * Since: 2.16 */ const gchar* webkit_notification_get_tag(WebKitNotification* notification) { g_return_val_if_fail(WEBKIT_IS_NOTIFICATION(notification), nullptr); const gchar* tag = notification->priv->tag.data(); return notification->priv->tag.length() ? tag : nullptr; } /** * webkit_notification_close: * @notification: a #WebKitNotification * * Closes the notification. * * Since: 2.8 */ void webkit_notification_close(WebKitNotification* notification) { g_return_if_fail(WEBKIT_IS_NOTIFICATION(notification)); g_signal_emit(notification, signals[CLOSED], 0); } /** * webkit_notification_clicked: * @notification: a #WebKitNotification * * Tells WebKit the notification has been clicked. This will emit the * #WebKitNotification::clicked signal. * * Since: 2.12 */ void webkit_notification_clicked(WebKitNotification* notification) { g_return_if_fail(WEBKIT_IS_NOTIFICATION(notification)); g_signal_emit(notification, signals[CLICKED], 0); }