blob: c63d0a5553ca621c28a3abc2a9585410c8d5f8b9 [file] [log] [blame]
/*
* 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 "WebNotification.h"
#include <glib/gi18n-lib.h>
#include <wtf/glib/WTFGType.h>
#include <wtf/text/CString.h>
/**
* 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);
}