WebKitPrintCustomWidget.cpp [plain text]
#include "config.h"
#include "WebKitPrintCustomWidget.h"
#include "WebKitPrintCustomWidgetPrivate.h"
#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
#include <wtf/glib/GRefPtr.h>
#include <wtf/glib/WTFGType.h>
#include <wtf/text/CString.h>
enum {
APPLY,
UPDATE,
LAST_SIGNAL
};
enum {
PROP_0,
PROP_WIDGET,
PROP_TITLE
};
struct _WebKitPrintCustomWidgetPrivate {
CString title;
GRefPtr<GtkWidget> widget;
};
static guint signals[LAST_SIGNAL] = { 0, };
WEBKIT_DEFINE_TYPE(WebKitPrintCustomWidget, webkit_print_custom_widget, G_TYPE_OBJECT)
static void webkitPrintCustomWidgetGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
{
WebKitPrintCustomWidget* printCustomWidget = WEBKIT_PRINT_CUSTOM_WIDGET(object);
switch (propId) {
case PROP_WIDGET:
g_value_set_object(value, webkit_print_custom_widget_get_widget(printCustomWidget));
break;
case PROP_TITLE:
g_value_set_string(value, webkit_print_custom_widget_get_title(printCustomWidget));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
}
}
static void webkitPrintCustomWidgetSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)
{
WebKitPrintCustomWidget* printCustomWidget = WEBKIT_PRINT_CUSTOM_WIDGET(object);
switch (propId) {
case PROP_WIDGET:
printCustomWidget->priv->widget = GTK_WIDGET(g_value_get_object(value));
break;
case PROP_TITLE:
printCustomWidget->priv->title = g_value_get_string(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
}
}
static void webkit_print_custom_widget_class_init(WebKitPrintCustomWidgetClass* printCustomWidgetClass)
{
GObjectClass* objectClass = G_OBJECT_CLASS(printCustomWidgetClass);
objectClass->get_property = webkitPrintCustomWidgetGetProperty;
objectClass->set_property = webkitPrintCustomWidgetSetProperty;
g_object_class_install_property(
objectClass,
PROP_WIDGET,
g_param_spec_object(
"widget",
_("Widget"),
_("Widget that will be added to the print dialog."),
GTK_TYPE_WIDGET,
static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
g_object_class_install_property(
objectClass,
PROP_TITLE,
g_param_spec_string(
"title",
_("Title"),
_("Title of the widget that will be added to the print dialog."),
nullptr,
static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
signals[UPDATE] =
g_signal_new(
"update",
G_TYPE_FROM_CLASS(printCustomWidgetClass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(WebKitPrintCustomWidgetClass, update),
0, 0,
g_cclosure_marshal_generic,
G_TYPE_NONE, 2,
GTK_TYPE_PAGE_SETUP, GTK_TYPE_PRINT_SETTINGS);
signals[APPLY] =
g_signal_new(
"apply",
G_TYPE_FROM_CLASS(printCustomWidgetClass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(WebKitPrintCustomWidgetClass, apply),
0, 0,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
WebKitPrintCustomWidget* webkit_print_custom_widget_new(GtkWidget* widget, const char* title)
{
g_return_val_if_fail(GTK_IS_WIDGET(widget), nullptr);
g_return_val_if_fail(title, nullptr);
return WEBKIT_PRINT_CUSTOM_WIDGET(g_object_new(WEBKIT_TYPE_PRINT_CUSTOM_WIDGET, "widget", widget, "title", title, nullptr));
}
GtkWidget* webkit_print_custom_widget_get_widget(WebKitPrintCustomWidget* printCustomWidget)
{
g_return_val_if_fail(WEBKIT_IS_PRINT_CUSTOM_WIDGET(printCustomWidget), nullptr);
return printCustomWidget->priv->widget.get();
}
const gchar* webkit_print_custom_widget_get_title(WebKitPrintCustomWidget* printCustomWidget)
{
g_return_val_if_fail(WEBKIT_IS_PRINT_CUSTOM_WIDGET(printCustomWidget), nullptr);
return printCustomWidget->priv->title.data();
}
void webkitPrintCustomWidgetEmitCustomWidgetApplySignal(WebKitPrintCustomWidget* printCustomWidget)
{
g_signal_emit(printCustomWidget, signals[APPLY], 0);
printCustomWidget->priv->widget = nullptr;
}
void webkitPrintCustomWidgetEmitUpdateCustomWidgetSignal(WebKitPrintCustomWidget *printCustomWidget, GtkPageSetup *pageSetup, GtkPrintSettings *printSettings)
{
g_signal_emit(printCustomWidget, signals[UPDATE], 0, pageSetup, printSettings);
}