summaryrefslogtreecommitdiff
path: root/Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp')
-rw-r--r--Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp449
1 files changed, 449 insertions, 0 deletions
diff --git a/Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp b/Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
new file mode 100644
index 000000000..93e08acd3
--- /dev/null
+++ b/Source/WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
@@ -0,0 +1,449 @@
+/*
+ * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
+ * Copyright (C) 2008 Holger Hans Peter Freyther
+ *
+ * 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 "webkitwebwindowfeatures.h"
+
+#include "WindowFeatures.h"
+#include "webkitglobalsprivate.h"
+#include "webkitwebwindowfeaturesprivate.h"
+
+/**
+ * SECTION:webkitwebwindowfeatures
+ * @short_description: Window properties of a #WebKitWebView
+ * @see_also: #WebKitWebView::web-view-ready
+ *
+ * The content of a #WebKitWebView can request to change certain
+ * properties of a #WebKitWebView. This can include the x, y position
+ * of the window, the width and height but also if a toolbar,
+ * scrollbar, statusbar, locationbar should be visible to the user,
+ * the request to show the #WebKitWebView fullscreen.
+ *
+ * In the normal case one will use #webkit_web_view_get_window_features
+ * to get the #WebKitWebWindowFeatures and then monitor the property
+ * changes. Be aware that the #WebKitWebWindowFeatures might change
+ * before #WebKitWebView::web-view-ready signal is emitted.
+ * To be safe listen to the notify::window-features signal of the #WebKitWebView
+ * and reconnect the signals whenever the #WebKitWebWindowFeatures of
+ * a #WebKitWebView changes.
+ *
+ * <informalexample><programlisting>
+ * /<!-- -->* Get the current WebKitWebWindowFeatures *<!-- -->/
+ * WebKitWebWindowFeatures *features = webkit_web_view_get_window_features (my_webview);
+ *
+ * /<!-- -->* Connect to the property changes *<!-- -->/
+ * g_signal_connect (G_OBJECT(features), "notify::menubar-visible", G_CALLBACK(make_menu_bar_visible), NULL);
+ * g_signal_connect (G_OBJECT(features), "notify::statusbar-visible", G_CALLBACK(make_status_bar_visible), NULL);
+ *
+ * </programlisting></informalexample>
+ */
+
+enum {
+ PROP_0,
+
+ PROP_X,
+ PROP_Y,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+ PROP_TOOLBAR_VISIBLE,
+ PROP_STATUSBAR_VISIBLE,
+ PROP_SCROLLBAR_VISIBLE,
+ PROP_MENUBAR_VISIBLE,
+ PROP_LOCATIONBAR_VISIBLE,
+ PROP_FULLSCREEN,
+};
+
+G_DEFINE_TYPE(WebKitWebWindowFeatures, webkit_web_window_features, G_TYPE_OBJECT)
+
+struct _WebKitWebWindowFeaturesPrivate {
+ gint x;
+ gint y;
+ gint width;
+ gint height;
+
+ gboolean toolbar_visible;
+ gboolean statusbar_visible;
+ gboolean scrollbar_visible;
+ gboolean menubar_visible;
+ gboolean locationbar_visible;
+
+ gboolean fullscreen;
+};
+
+#define WEBKIT_WEB_WINDOW_FEATURES_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeaturesPrivate))
+
+static void webkit_web_window_features_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
+
+static void webkit_web_window_features_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
+
+static void webkit_web_window_features_class_init(WebKitWebWindowFeaturesClass* klass)
+{
+ GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
+ gobject_class->set_property = webkit_web_window_features_set_property;
+ gobject_class->get_property = webkit_web_window_features_get_property;
+
+ GParamFlags flags = (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT);
+
+ webkitInit();
+
+ /**
+ * WebKitWebWindowFeatures:x:
+ *
+ * The starting x position of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_X,
+ g_param_spec_int(
+ "x",
+ "x",
+ "The starting x position of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:y:
+ *
+ * The starting y position of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_Y,
+ g_param_spec_int(
+ "y",
+ "y",
+ "The starting y position of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:width:
+ *
+ * The width of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_WIDTH,
+ g_param_spec_int(
+ "width",
+ "Width",
+ "The width of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:height:
+ *
+ * The height of the window on the screen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_HEIGHT,
+ g_param_spec_int(
+ "height",
+ "Height",
+ "The height of the window on the screen.",
+ -1,
+ G_MAXINT,
+ -1,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:toolbar-visible:
+ *
+ * Controls whether the toolbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_TOOLBAR_VISIBLE,
+ g_param_spec_boolean(
+ "toolbar-visible",
+ "Toolbar Visible",
+ "Controls whether the toolbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:statusbar-visible:
+ *
+ * Controls whether the statusbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_STATUSBAR_VISIBLE,
+ g_param_spec_boolean(
+ "statusbar-visible",
+ "Statusbar Visible",
+ "Controls whether the statusbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:scrollbar-visible:
+ *
+ * Controls whether the scrollbars should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_SCROLLBAR_VISIBLE,
+ g_param_spec_boolean(
+ "scrollbar-visible",
+ "Scrollbar Visible",
+ "Controls whether the scrollbars should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:menubar-visible:
+ *
+ * Controls whether the menubar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_MENUBAR_VISIBLE,
+ g_param_spec_boolean(
+ "menubar-visible",
+ "Menubar Visible",
+ "Controls whether the menubar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:locationbar-visible:
+ *
+ * Controls whether the locationbar should be visible for the window.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_LOCATIONBAR_VISIBLE,
+ g_param_spec_boolean(
+ "locationbar-visible",
+ "Locationbar Visible",
+ "Controls whether the locationbar should be visible for the window.",
+ TRUE,
+ flags));
+
+ /**
+ * WebKitWebWindowFeatures:fullscreen:
+ *
+ * Controls whether window will be displayed fullscreen.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(gobject_class,
+ PROP_FULLSCREEN,
+ g_param_spec_boolean(
+ "fullscreen",
+ "Fullscreen",
+ "Controls whether window will be displayed fullscreen.",
+ FALSE,
+ flags));
+
+
+ g_type_class_add_private(klass, sizeof(WebKitWebWindowFeaturesPrivate));
+}
+
+static void webkit_web_window_features_init(WebKitWebWindowFeatures* web_window_features)
+{
+ web_window_features->priv = G_TYPE_INSTANCE_GET_PRIVATE(web_window_features, WEBKIT_TYPE_WEB_WINDOW_FEATURES, WebKitWebWindowFeaturesPrivate);
+}
+
+static void webkit_web_window_features_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
+{
+ WebKitWebWindowFeatures* web_window_features = WEBKIT_WEB_WINDOW_FEATURES(object);
+ WebKitWebWindowFeaturesPrivate* priv = web_window_features->priv;
+
+ switch(prop_id) {
+ case PROP_X:
+ priv->x = g_value_get_int(value);
+ break;
+ case PROP_Y:
+ priv->y = g_value_get_int(value);
+ break;
+ case PROP_WIDTH:
+ priv->width = g_value_get_int(value);
+ break;
+ case PROP_HEIGHT:
+ priv->height = g_value_get_int(value);
+ break;
+ case PROP_TOOLBAR_VISIBLE:
+ priv->toolbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_STATUSBAR_VISIBLE:
+ priv->statusbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_SCROLLBAR_VISIBLE:
+ priv->scrollbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_MENUBAR_VISIBLE:
+ priv->menubar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_LOCATIONBAR_VISIBLE:
+ priv->locationbar_visible = g_value_get_boolean(value);
+ break;
+ case PROP_FULLSCREEN:
+ priv->fullscreen = g_value_get_boolean(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void webkit_web_window_features_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
+{
+ WebKitWebWindowFeatures* web_window_features = WEBKIT_WEB_WINDOW_FEATURES(object);
+ WebKitWebWindowFeaturesPrivate* priv = web_window_features->priv;
+
+ switch (prop_id) {
+ case PROP_X:
+ g_value_set_int(value, priv->x);
+ break;
+ case PROP_Y:
+ g_value_set_int(value, priv->y);
+ break;
+ case PROP_WIDTH:
+ g_value_set_int(value, priv->width);
+ break;
+ case PROP_HEIGHT:
+ g_value_set_int(value, priv->height);
+ break;
+ case PROP_TOOLBAR_VISIBLE:
+ g_value_set_boolean(value, priv->toolbar_visible);
+ break;
+ case PROP_STATUSBAR_VISIBLE:
+ g_value_set_boolean(value, priv->statusbar_visible);
+ break;
+ case PROP_SCROLLBAR_VISIBLE:
+ g_value_set_boolean(value, priv->scrollbar_visible);
+ break;
+ case PROP_MENUBAR_VISIBLE:
+ g_value_set_boolean(value, priv->menubar_visible);
+ break;
+ case PROP_LOCATIONBAR_VISIBLE:
+ g_value_set_boolean(value, priv->locationbar_visible);
+ break;
+ case PROP_FULLSCREEN:
+ g_value_set_boolean(value, priv->fullscreen);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+/**
+ * webkit_web_window_features_new:
+ *
+ * Creates a new #WebKitWebWindowFeatures instance with default values. It must
+ * be manually attached to a WebView.
+ *
+ * Returns: a new #WebKitWebWindowFeatures instance
+ *
+ * Since: 1.0.3
+ */
+WebKitWebWindowFeatures* webkit_web_window_features_new()
+{
+ return WEBKIT_WEB_WINDOW_FEATURES(g_object_new(WEBKIT_TYPE_WEB_WINDOW_FEATURES, NULL));
+}
+
+/**
+ * webkit_web_window_features_equal:
+ * @features1: a #WebKitWebWindowFeatures instance
+ * @features2: another #WebKitWebWindowFeatures instance
+ *
+ * Decides if a #WebKitWebWindowFeatures instance equals another, as
+ * in has the same values.
+ *
+ * Returns: %TRUE if the instances have the same values, %FALSE
+ * otherwise
+ *
+ * Since: 1.0.3
+ */
+gboolean webkit_web_window_features_equal(WebKitWebWindowFeatures* features1, WebKitWebWindowFeatures* features2)
+{
+ if (features1 == features2)
+ return TRUE;
+ if (!features1 || !features2)
+ return FALSE;
+
+ WebKitWebWindowFeaturesPrivate* priv1 = features1->priv;
+ WebKitWebWindowFeaturesPrivate* priv2 = features2->priv;
+
+ if ((priv1->x == priv2->x)
+ && (priv1->y == priv2->y)
+ && (priv1->width == priv2->width)
+ && (priv1->height == priv2->height)
+ && (priv1->toolbar_visible == priv2->toolbar_visible)
+ && (priv1->statusbar_visible == priv2->statusbar_visible)
+ && (priv1->scrollbar_visible == priv2->scrollbar_visible)
+ && (priv1->menubar_visible == priv2->menubar_visible)
+ && (priv1->locationbar_visible == priv2->locationbar_visible)
+ && (priv1->fullscreen == priv2->fullscreen))
+ return TRUE;
+ return FALSE;
+}
+
+namespace WebKit {
+
+WebKitWebWindowFeatures* kitNew(const WebCore::WindowFeatures& features)
+{
+ WebKitWebWindowFeatures *webWindowFeatures = webkit_web_window_features_new();
+
+ if(features.xSet)
+ g_object_set(webWindowFeatures, "x", static_cast<int>(features.x), NULL);
+
+ if(features.ySet)
+ g_object_set(webWindowFeatures, "y", static_cast<int>(features.y), NULL);
+
+ if(features.widthSet)
+ g_object_set(webWindowFeatures, "width", static_cast<int>(features.width), NULL);
+
+ if(features.heightSet)
+ g_object_set(webWindowFeatures, "height", static_cast<int>(features.height), NULL);
+
+ g_object_set(webWindowFeatures,
+ "toolbar-visible", features.toolBarVisible,
+ "statusbar-visible", features.statusBarVisible,
+ "scrollbar-visible", features.scrollbarsVisible,
+ "menubar-visible", features.menuBarVisible,
+ "locationbar-visible", features.locationBarVisible,
+ "fullscreen", features.fullscreen,
+ NULL);
+
+ return webWindowFeatures;
+}
+
+}