summaryrefslogtreecommitdiffstats
path: root/WebKit/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/gtk')
-rw-r--r--WebKit/gtk/ChangeLog101
-rw-r--r--WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp2
-rw-r--r--WebKit/gtk/WebCoreSupport/DragClientGtk.cpp15
-rw-r--r--WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp20
-rw-r--r--WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp9
-rw-r--r--WebKit/gtk/webkit/webkitprivate.h30
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp213
7 files changed, 289 insertions, 101 deletions
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index e166b52..9db2729 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,104 @@
+2010-05-22 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] webkit_web_view_drag_end should call EventHandler::dragSourceEndedAt
+ https://bugs.webkit.org/show_bug.cgi?id=39465
+
+ Properly call EventHandler::dragSourceEndedAt so that dragEnd events are processed in the DOM.
+ dragSourceEndedAt is responsible for calling the dragEnd DOM event as well as cleaning up assets
+ (such as the Clipboard) associated with the drag source.
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_drag_end): Remember to call dragSourceEndedAt here.
+
+2010-05-22 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] WebKit/gtk/WebCoreSupport/DragClientGtk::startDrag should use the Clipboard::sourceOperation
+ https://bugs.webkit.org/show_bug.cgi?id=39459
+
+ * WebCoreSupport/DragClientGtk.cpp:
+ (WebKit::DragClient::startDrag):
+ Use Clipboard::sourceOperation instead of trying to figure out the GdkDragAction
+ manually. The DOM may have changed the appropriate list of actions anyhow.
+
+2010-05-21 Steve Block <steveblock@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ Add DeviceOrientation and DeviceOrientationClient
+ https://bugs.webkit.org/show_bug.cgi?id=39479
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_init):
+
+2010-05-19 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r59240.
+ http://trac.webkit.org/changeset/59240
+ https://bugs.webkit.org/show_bug.cgi?id=39377
+
+ "Might cause crashes in GTK+ bots" (Requested by xan_ on
+ #webkit).
+
+ * WebCoreSupport/ContextMenuClientGtk.cpp:
+ (WebKit::inputMethodsMenuItem):
+ * WebCoreSupport/EditorClientGtk.cpp:
+ (WebKit::EditorClient::setInputMethodState):
+ (WebKit::EditorClient::respondToChangedSelection):
+ (WebKit::EditorClient::handleInputMethodKeydown):
+ (WebKit::EditorClient::EditorClient):
+ (WebKit::EditorClient::~EditorClient):
+ * WebCoreSupport/FrameLoaderClientGtk.cpp:
+ (WebKit::postCommitFrameViewSetup):
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebview.cpp:
+ (destroy_menu_cb):
+ (webkit_web_view_forward_context_menu_event):
+ (webkit_web_view_key_release_event):
+ (webkit_web_view_button_release_event):
+ (webkit_web_view_focus_in_event):
+ (webkit_web_view_focus_out_event):
+ (webkit_web_view_realize):
+ (webkit_web_view_set_scroll_adjustments):
+ (webkit_web_view_dispose):
+ (webkit_web_view_finalize):
+ (webViewGetDPI):
+ (webkit_web_view_screen_changed):
+ (webkit_web_view_query_tooltip):
+ (webkit_web_view_get_im_context):
+ (webkit_web_view_update_settings):
+ (webkit_web_view_init):
+ (webkit_web_view_set_settings):
+ (webkit_web_view_get_settings):
+ (webkit_web_view_get_inspector):
+ (webkit_web_view_set_window_features):
+ (webkit_web_view_get_window_features):
+ (webkit_web_view_get_back_forward_list):
+ (webkit_web_view_zoom_in):
+ (webkit_web_view_zoom_out):
+ (webkit_web_view_get_encoding):
+ (webkit_web_view_get_custom_encoding):
+ (webkit_web_view_add_resource):
+ (webkit_web_view_get_resource):
+ (webkit_web_view_get_main_resource):
+ (webkit_web_view_clear_resources):
+ (webkit_web_view_get_subresources):
+ (webkit_web_view_set_tooltip_text):
+ (webkit_web_view_get_icon_uri):
+
+2010-05-18 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] DragClientGtk::startDrag leaks GdkEvents
+ https://bugs.webkit.org/show_bug.cgi?id=39322
+
+ * WebCoreSupport/DragClientGtk.cpp:
+ (WebKit::DragClient::startDrag): Properly clean up allocated GdkEvent.
+
2010-05-12 Martin Robinson <mrobinson@igalia.com>
Reviewed by Xan Lopez.
diff --git a/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp b/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp
index 069fb19..5c1bc0b 100644
--- a/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp
@@ -62,7 +62,7 @@ static GtkWidget* inputMethodsMenuItem (WebKitWebView* webView)
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
GtkWidget* imContextMenu = gtk_menu_new();
- gtk_im_multicontext_append_menuitems(GTK_IM_MULTICONTEXT(priv->imContext.get()), GTK_MENU_SHELL(imContextMenu));
+ gtk_im_multicontext_append_menuitems(GTK_IM_MULTICONTEXT(priv->imContext), GTK_MENU_SHELL(imContextMenu));
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), imContextMenu);
diff --git a/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp b/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
index 900fb61..c1e8e74 100644
--- a/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
@@ -20,8 +20,10 @@
#include "DragClientGtk.h"
#include "ClipboardGtk.h"
+#include "ClipboardUtilitiesGtk.h"
#include "DataObjectGtk.h"
#include "Document.h"
+#include "DragController.h"
#include "Element.h"
#include "Frame.h"
#include "GRefPtrGtk.h"
@@ -71,25 +73,24 @@ void DragClient::startDrag(DragImageRef image, const IntPoint& dragImageOrigin,
{
ClipboardGtk* clipboardGtk = reinterpret_cast<ClipboardGtk*>(clipboard);
- GdkDragAction dragAction = GDK_ACTION_COPY;
- if (linkDrag)
- dragAction = (GdkDragAction) (dragAction | GDK_ACTION_LINK);
-
WebKitWebView* webView = webkit_web_frame_get_web_view(kit(frame));
RefPtr<DataObjectGtk> dataObject = clipboardGtk->dataObject();
GRefPtr<GtkTargetList> targetList(clipboardGtk->helper()->targetListForDataObject(dataObject.get()));
GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
- reinterpret_cast<GdkEventButton*>(event)->window = gtk_widget_get_window(GTK_WIDGET(m_webView));
- reinterpret_cast<GdkEventButton*>(event)->time = GDK_CURRENT_TIME;
+ // This will be decremented by gdk_event_free() below.
+ event->button.window = static_cast<GdkWindow*>(g_object_ref(gtk_widget_get_window(GTK_WIDGET(m_webView))));
+ event->button.time = GDK_CURRENT_TIME;
- GdkDragContext* context = gtk_drag_begin(GTK_WIDGET(m_webView), targetList.get(), dragAction, 1, event);
+ GdkDragContext* context = gtk_drag_begin(GTK_WIDGET(m_webView), targetList.get(), dragOperationToGdkDragActions(clipboard->sourceOperation()), 1, event);
webView->priv->draggingDataObjects.set(context, dataObject);
if (image)
gtk_drag_set_icon_pixbuf(context, image, eventPos.x() - dragImageOrigin.x(), eventPos.y() - dragImageOrigin.y());
else
gtk_drag_set_icon_default(context);
+
+ gdk_event_free(event);
}
DragImageRef DragClient::createDragImageForLink(KURL&, const String&, Frame*)
diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
index d3f8fa1..a5c36e8 100644
--- a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
@@ -220,15 +220,15 @@ void EditorClient::setInputMethodState(bool active)
WebKitWebViewPrivate* priv = m_webView->priv;
if (active)
- gtk_im_context_focus_in(priv->imContext.get());
+ gtk_im_context_focus_in(priv->imContext);
else
- gtk_im_context_focus_out(priv->imContext.get());
+ gtk_im_context_focus_out(priv->imContext);
#ifdef MAEMO_CHANGES
if (active)
- hildon_gtk_im_context_show(priv->imContext.get());
+ hildon_gtk_im_context_show(priv->imContext);
else
- hildon_gtk_im_context_hide(priv->imContext.get());
+ hildon_gtk_im_context_hide(priv->imContext);
#endif
}
@@ -367,7 +367,7 @@ void EditorClient::respondToChangedSelection()
unsigned end;
if (!targetFrame->editor()->getCompositionSelection(start, end)) {
// gtk_im_context_reset() clears the composition for us.
- gtk_im_context_reset(priv->imContext.get());
+ gtk_im_context_reset(priv->imContext);
targetFrame->editor()->confirmCompositionWithoutDisturbingSelection();
}
}
@@ -700,7 +700,7 @@ void EditorClient::handleInputMethodKeydown(KeyboardEvent* event)
m_treatContextCommitAsKeyEvent = (!targetFrame->editor()->hasComposition())
&& event->keyEvent()->gdkEventKey()->keyval;
clearPendingComposition();
- if ((gtk_im_context_filter_keypress(priv->imContext.get(), event->keyEvent()->gdkEventKey()) && !m_pendingComposition)
+ if ((gtk_im_context_filter_keypress(priv->imContext, event->keyEvent()->gdkEventKey()) && !m_pendingComposition)
|| (!m_treatContextCommitAsKeyEvent && !targetFrame->editor()->hasComposition()))
event->preventDefault();
@@ -714,8 +714,8 @@ EditorClient::EditorClient(WebKitWebView* webView)
, m_nativeWidget(gtk_text_view_new())
{
WebKitWebViewPrivate* priv = m_webView->priv;
- g_signal_connect(priv->imContext.get(), "commit", G_CALLBACK(imContextCommitted), this);
- g_signal_connect(priv->imContext.get(), "preedit-changed", G_CALLBACK(imContextPreeditChanged), this);
+ g_signal_connect(priv->imContext, "commit", G_CALLBACK(imContextCommitted), this);
+ g_signal_connect(priv->imContext, "preedit-changed", G_CALLBACK(imContextPreeditChanged), this);
g_signal_connect(m_nativeWidget.get(), "backspace", G_CALLBACK(backspaceCallback), this);
g_signal_connect(m_nativeWidget.get(), "cut-clipboard", G_CALLBACK(cutClipboardCallback), this);
@@ -729,8 +729,8 @@ EditorClient::EditorClient(WebKitWebView* webView)
EditorClient::~EditorClient()
{
WebKitWebViewPrivate* priv = m_webView->priv;
- g_signal_handlers_disconnect_by_func(priv->imContext.get(), (gpointer)imContextCommitted, this);
- g_signal_handlers_disconnect_by_func(priv->imContext.get(), (gpointer)imContextPreeditChanged, this);
+ g_signal_handlers_disconnect_by_func(priv->imContext, (gpointer)imContextCommitted, this);
+ g_signal_handlers_disconnect_by_func(priv->imContext, (gpointer)imContextPreeditChanged, this);
}
void EditorClient::textFieldDidBeginEditing(Element*)
diff --git a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
index 1fe6b0f..fd2d7ed 100644
--- a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
@@ -1135,11 +1135,14 @@ static void postCommitFrameViewSetup(WebKitWebFrame *frame, FrameView *view, boo
{
WebKitWebView* containingWindow = getViewFromFrame(frame);
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(containingWindow);
- view->setGtkAdjustments(priv->horizontalAdjustment.get(), priv->verticalAdjustment.get(), resetValues);
+ view->setGtkAdjustments(priv->horizontalAdjustment, priv->verticalAdjustment, resetValues);
if (priv->currentMenu) {
- gtk_menu_popdown(priv->currentMenu.get());
- priv->currentMenu.clear();
+ GtkMenu* menu = priv->currentMenu;
+ priv->currentMenu = 0;
+
+ gtk_menu_popdown(menu);
+ g_object_unref(menu);
}
}
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index abca3c8..057b0e5 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -115,42 +115,42 @@ extern "C" {
typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
struct _WebKitWebViewPrivate {
WebCore::Page* corePage;
- GRefPtr<WebKitWebSettings> webSettings;
- GRefPtr<WebKitWebInspector> webInspector;
- GRefPtr<WebKitWebWindowFeatures> webWindowFeatures;
+ WebKitWebSettings* webSettings;
+ WebKitWebInspector* webInspector;
+ WebKitWebWindowFeatures* webWindowFeatures;
WebKitWebFrame* mainFrame;
- GRefPtr<WebKitWebBackForwardList> backForwardList;
+ WebKitWebBackForwardList* backForwardList;
- GRefPtr<GtkMenu> currentMenu;
+ GtkMenu* currentMenu;
gint lastPopupXPosition;
gint lastPopupYPosition;
HashSet<GtkWidget*> children;
bool editable;
- GRefPtr<GtkIMContext> imContext;
+ GtkIMContext* imContext;
gboolean transparent;
- GRefPtr<GtkAdjustment> horizontalAdjustment;
- GRefPtr<GtkAdjustment> verticalAdjustment;
+ GtkAdjustment* horizontalAdjustment;
+ GtkAdjustment* verticalAdjustment;
gboolean zoomFullContent;
WebKitLoadStatus loadStatus;
- GOwnPtr<char> encoding;
- GOwnPtr<char> customEncoding;
+ char* encoding;
+ char* customEncoding;
- GOwnPtr<char> iconURI;
+ char* iconURI;
gboolean disposing;
gboolean usePrimaryForPaste;
// These are hosted here because the DataSource object is
// created too late in the frame loading process.
- GRefPtr<WebKitWebResource> mainResource;
- GOwnPtr<char> mainResourceIdentifier;
- GRefPtr<GHashTable> subResources;
- GOwnPtr<char> tooltipText;
+ WebKitWebResource* mainResource;
+ char* mainResourceIdentifier;
+ GHashTable* subResources;
+ char* tooltipText;
HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk> > draggingDataObjects;
};
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index ca72665..f3bb5e6 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -44,6 +44,7 @@
#include "BackForwardList.h"
#include "Cache.h"
#include "ChromeClientGtk.h"
+#include "ClipboardUtilitiesGtk.h"
#include "ContextMenuClientGtk.h"
#include "ContextMenuController.h"
#include "ContextMenu.h"
@@ -204,7 +205,9 @@ static void destroy_menu_cb(GtkObject* object, gpointer data)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(data);
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
- priv->currentMenu = 0;
+
+ g_object_unref(priv->currentMenu);
+ priv->currentMenu = NULL;
}
static void PopupMenuPositionFunc(GtkMenu* menu, gint *x, gint *y, gboolean *pushIn, gpointer userData)
@@ -294,7 +297,7 @@ static gboolean webkit_web_view_forward_context_menu_event(WebKitWebView* webVie
return FALSE;
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
- priv->currentMenu = menu;
+ priv->currentMenu = GTK_MENU(g_object_ref(menu));
priv->lastPopupXPosition = event.globalX();
priv->lastPopupYPosition = event.globalY();
@@ -568,7 +571,7 @@ static gboolean webkit_web_view_key_release_event(GtkWidget* widget, GdkEventKey
// the event if we don't have a pending composition, because that means we
// are using a context like 'simple' which marks every keystroke as filtered.
WebKit::EditorClient* client = static_cast<WebKit::EditorClient*>(core(webView)->editorClient());
- if (gtk_im_context_filter_keypress(webView->priv->imContext.get(), event) && !client->hasPendingComposition())
+ if (gtk_im_context_filter_keypress(webView->priv->imContext, event) && !client->hasPendingComposition())
return TRUE;
Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
@@ -625,7 +628,7 @@ static gboolean webkit_web_view_button_release_event(GtkWidget* widget, GdkEvent
if (focusedFrame && focusedFrame->editor()->canEdit()) {
#ifdef MAEMO_CHANGES
WebKitWebViewPrivate* priv = webView->priv;
- hildon_gtk_im_context_filter_event(priv->imContext.get(), (GdkEvent*)event);
+ hildon_gtk_im_context_filter_event(priv->imContext, (GdkEvent*)event);
#endif
}
@@ -728,7 +731,7 @@ static gboolean webkit_web_view_focus_in_event(GtkWidget* widget, GdkEventFocus*
else
focusController->setFocusedFrame(core(webView)->mainFrame());
- gtk_im_context_focus_in(webView->priv->imContext.get());
+ gtk_im_context_focus_in(webView->priv->imContext);
}
return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->focus_in_event(widget, event);
}
@@ -746,7 +749,7 @@ static gboolean webkit_web_view_focus_out_event(GtkWidget* widget, GdkEventFocus
}
if (webView->priv->imContext)
- gtk_im_context_focus_out(webView->priv->imContext.get());
+ gtk_im_context_focus_out(webView->priv->imContext);
return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->focus_out_event(widget, event);
}
@@ -785,7 +788,7 @@ static void webkit_web_view_realize(GtkWidget* widget)
WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
WebKitWebViewPrivate* priv = webView->priv;
- gtk_im_context_set_client_window(priv->imContext.get(), widget->window);
+ gtk_im_context_set_client_window(priv->imContext, widget->window);
}
static void webkit_web_view_set_scroll_adjustments(WebKitWebView* webView, GtkAdjustment* hadj, GtkAdjustment* vadj)
@@ -794,7 +797,19 @@ static void webkit_web_view_set_scroll_adjustments(WebKitWebView* webView, GtkAd
return;
FrameView* view = core(webkit_web_view_get_main_frame(webView))->view();
+
+ if (hadj)
+ g_object_ref(hadj);
+ if (vadj)
+ g_object_ref(vadj);
+
WebKitWebViewPrivate* priv = webView->priv;
+
+ if (priv->horizontalAdjustment)
+ g_object_unref(priv->horizontalAdjustment);
+ if (priv->verticalAdjustment)
+ g_object_unref(priv->verticalAdjustment);
+
priv->horizontalAdjustment = hadj;
priv->verticalAdjustment = vadj;
@@ -1062,6 +1077,21 @@ static void webkit_web_view_dispose(GObject* object)
priv->disposing = TRUE;
+ if (priv->horizontalAdjustment) {
+ g_object_unref(priv->horizontalAdjustment);
+ priv->horizontalAdjustment = NULL;
+ }
+
+ if (priv->verticalAdjustment) {
+ g_object_unref(priv->verticalAdjustment);
+ priv->verticalAdjustment = NULL;
+ }
+
+ if (priv->backForwardList) {
+ g_object_unref(priv->backForwardList);
+ priv->backForwardList = NULL;
+ }
+
if (priv->corePage) {
webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(object));
@@ -1071,18 +1101,30 @@ static void webkit_web_view_dispose(GObject* object)
}
if (priv->webSettings) {
- g_signal_handlers_disconnect_by_func(priv->webSettings.get(), (gpointer)webkit_web_view_settings_notify, webView);
- priv->webSettings.clear();
+ g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
+ g_object_unref(priv->webSettings);
+ priv->webSettings = NULL;
+
+ g_object_unref(priv->webInspector);
+ priv->webInspector = NULL;
+
+ g_object_unref(priv->webWindowFeatures);
+ priv->webWindowFeatures = NULL;
+
+ g_object_unref(priv->imContext);
+ priv->imContext = NULL;
+ }
+
+ if (priv->mainResource) {
+ g_object_unref(priv->mainResource);
+ priv->mainResource = NULL;
+ }
+
+ if (priv->subResources) {
+ g_hash_table_unref(priv->subResources);
+ priv->subResources = NULL;
}
- priv->horizontalAdjustment.clear();
- priv->verticalAdjustment.clear();
- priv->backForwardList.clear();
- priv->webInspector.clear();
- priv->webWindowFeatures.clear();
- priv->imContext.clear();
- priv->mainResource.clear();
- priv->subResources.clear();
priv->draggingDataObjects.clear();
G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
@@ -1093,11 +1135,11 @@ static void webkit_web_view_finalize(GObject* object)
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
WebKitWebViewPrivate* priv = webView->priv;
- priv->tooltipText.clear();
- priv->mainResourceIdentifier.clear();
- priv->encoding.clear();
- priv->customEncoding.clear();
- priv->iconURI.clear();
+ g_free(priv->tooltipText);
+ g_free(priv->mainResourceIdentifier);
+ g_free(priv->encoding);
+ g_free(priv->customEncoding);
+ g_free(priv->iconURI);
G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
}
@@ -1148,7 +1190,7 @@ static AtkObject* webkit_web_view_get_accessible(GtkWidget* widget)
static gdouble webViewGetDPI(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- WebKitWebSettings* webSettings = priv->webSettings.get();
+ WebKitWebSettings* webSettings = priv->webSettings;
gboolean enforce96DPI;
g_object_get(webSettings, "enforce-96-dpi", &enforce96DPI, NULL);
if (enforce96DPI)
@@ -1174,7 +1216,7 @@ static void webkit_web_view_screen_changed(GtkWidget* widget, GdkScreen* previou
if (priv->disposing)
return;
- WebKitWebSettings* webSettings = priv->webSettings.get();
+ WebKitWebSettings* webSettings = priv->webSettings;
Settings* settings = core(webView)->settings();
gdouble DPI = webViewGetDPI(webView);
@@ -1195,14 +1237,37 @@ static void webkit_web_view_screen_changed(GtkWidget* widget, GdkScreen* previou
static void webkit_web_view_drag_end(GtkWidget* widget, GdkDragContext* context)
{
- WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(WEBKIT_WEB_VIEW(widget));
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+ WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
// This might happen if a drag is still in progress after a WebKitWebView
- // is diposed and before it is finalized.
+ // is disposed and before it is finalized.
if (!priv->draggingDataObjects.contains(context))
return;
priv->draggingDataObjects.remove(context);
+
+ Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!frame)
+ return;
+
+ GdkEvent* event = gdk_event_new(GDK_BUTTON_RELEASE);
+ int x, y, xRoot, yRoot;
+ GdkModifierType modifiers;
+ GdkDisplay* display = gdk_display_get_default();
+ gdk_display_get_pointer(display, 0, &xRoot, &yRoot, &modifiers);
+
+ event->button.window = static_cast<GdkWindow*>(g_object_ref(gdk_display_get_window_at_pointer(display, &x, &y)));
+ event->button.x = x;
+ event->button.y = y;
+ event->button.x_root = xRoot;
+ event->button.y_root = yRoot;
+ event->button.state = modifiers;
+
+ PlatformMouseEvent platformEvent(&event->button);
+ frame->eventHandler()->dragSourceEndedAt(platformEvent, gdkDragActionToDragOperation(context->action));
+
+ gdk_event_free(event);
}
static void webkit_web_view_drag_data_get(GtkWidget* widget, GdkDragContext* context, GtkSelectionData* selectionData, guint info, guint)
@@ -1223,7 +1288,7 @@ static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y,
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(widget);
if (priv->tooltipText) {
- gtk_tooltip_set_text(tooltip, priv->tooltipText.get());
+ gtk_tooltip_set_text(tooltip, priv->tooltipText);
return TRUE;
}
@@ -1234,7 +1299,7 @@ static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y,
static GtkIMContext* webkit_web_view_get_im_context(WebKitWebView* webView)
{
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
- return GTK_IM_CONTEXT(webView->priv->imContext.get());
+ return GTK_IM_CONTEXT(webView->priv->imContext);
}
static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
@@ -2550,7 +2615,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
static void webkit_web_view_update_settings(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- WebKitWebSettings* webSettings = priv->webSettings.get();
+ WebKitWebSettings* webSettings = priv->webSettings;
Settings* settings = core(webView)->settings();
gchar* defaultEncoding, *cursiveFontFamily, *defaultFontFamily, *fantasyFontFamily, *monospaceFontFamily, *sansSerifFontFamily, *serifFontFamily, *userStylesheetUri;
@@ -2754,36 +2819,40 @@ static void webkit_web_view_init(WebKitWebView* webView)
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
webView->priv = priv;
- priv->imContext = adoptGRef(gtk_im_multicontext_new());
+ priv->imContext = gtk_im_multicontext_new();
WebKit::InspectorClient* inspectorClient = new WebKit::InspectorClient(webView);
- priv->corePage = new Page(new WebKit::ChromeClient(webView), new WebKit::ContextMenuClient(webView), new WebKit::EditorClient(webView), new WebKit::DragClient(webView), inspectorClient, 0, 0);
+ priv->corePage = new Page(new WebKit::ChromeClient(webView), new WebKit::ContextMenuClient(webView), new WebKit::EditorClient(webView), new WebKit::DragClient(webView), inspectorClient, 0, 0, 0);
// We also add a simple wrapper class to provide the public
// interface for the Web Inspector.
- priv->webInspector = adoptGRef(WEBKIT_WEB_INSPECTOR(g_object_new(WEBKIT_TYPE_WEB_INSPECTOR, NULL)));
- webkit_web_inspector_set_inspector_client(priv->webInspector.get(), priv->corePage);
+ priv->webInspector = WEBKIT_WEB_INSPECTOR(g_object_new(WEBKIT_TYPE_WEB_INSPECTOR, NULL));
+ webkit_web_inspector_set_inspector_client(priv->webInspector, priv->corePage);
- // These are create with floating references, so they should not be wrapped in adoptGref.
priv->horizontalAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
priv->verticalAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+ g_object_ref_sink(priv->horizontalAdjustment);
+ g_object_ref_sink(priv->verticalAdjustment);
+
GTK_WIDGET_SET_FLAGS(webView, GTK_CAN_FOCUS);
priv->mainFrame = WEBKIT_WEB_FRAME(webkit_web_frame_new(webView));
priv->lastPopupXPosition = priv->lastPopupYPosition = -1;
priv->editable = false;
- priv->backForwardList = adoptGRef(webkit_web_back_forward_list_new_with_web_view(webView));
+ priv->backForwardList = webkit_web_back_forward_list_new_with_web_view(webView);
priv->zoomFullContent = FALSE;
- priv->webSettings = adoptGRef(webkit_web_settings_new());
+ priv->webSettings = webkit_web_settings_new();
webkit_web_view_update_settings(webView);
- g_signal_connect(priv->webSettings.get(), "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
+ g_signal_connect(priv->webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
- priv->webWindowFeatures = adoptGRef(webkit_web_window_features_new());
+ priv->webWindowFeatures = webkit_web_window_features_new();
- priv->subResources = adoptGRef(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref));
+ priv->subResources = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
+
+ priv->tooltipText = 0;
}
GtkWidget* webkit_web_view_new(void)
@@ -2839,7 +2908,9 @@ void webkit_web_view_set_settings(WebKitWebView* webView, WebKitWebSettings* web
g_return_if_fail(WEBKIT_IS_WEB_SETTINGS(webSettings));
WebKitWebViewPrivate* priv = webView->priv;
- g_signal_handlers_disconnect_by_func(priv->webSettings.get(), (gpointer)webkit_web_view_settings_notify, webView);
+ g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
+ g_object_unref(priv->webSettings);
+ g_object_ref(webSettings);
priv->webSettings = webSettings;
webkit_web_view_update_settings(webView);
g_signal_connect(webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
@@ -2851,7 +2922,7 @@ WebKitWebSettings* webkit_web_view_get_settings(WebKitWebView* webView)
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webSettings.get();
+ return priv->webSettings;
}
/**
@@ -2875,7 +2946,7 @@ WebKitWebInspector* webkit_web_view_get_inspector(WebKitWebView* webView)
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webInspector.get();
+ return priv->webInspector;
}
// internal
@@ -2886,9 +2957,11 @@ static void webkit_web_view_set_window_features(WebKitWebView* webView, WebKitWe
if (!webWindowFeatures)
return;
- if (webkit_web_window_features_equal(priv->webWindowFeatures.get(), webWindowFeatures))
+ if (webkit_web_window_features_equal(priv->webWindowFeatures, webWindowFeatures))
return;
+ g_object_unref(priv->webWindowFeatures);
+ g_object_ref(webWindowFeatures);
priv->webWindowFeatures = webWindowFeatures;
}
@@ -2908,7 +2981,7 @@ WebKitWebWindowFeatures* webkit_web_view_get_window_features(WebKitWebView* webV
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webWindowFeatures.get();
+ return priv->webWindowFeatures;
}
/**
@@ -2978,7 +3051,7 @@ WebKitWebBackForwardList* webkit_web_view_get_back_forward_list(WebKitWebView* w
if (!core(webView) || !core(webView)->backForwardList()->enabled())
return NULL;
- return priv->backForwardList.get();
+ return priv->backForwardList;
}
/**
@@ -3738,7 +3811,7 @@ void webkit_web_view_zoom_in(WebKitWebView* webView)
WebKitWebViewPrivate* priv = webView->priv;
gfloat zoomMultiplierRatio;
- g_object_get(priv->webSettings.get(), "zoom-step", &zoomMultiplierRatio, NULL);
+ g_object_get(priv->webSettings, "zoom-step", &zoomMultiplierRatio, NULL);
webkit_web_view_set_zoom_level(webView, webkit_web_view_get_zoom_level(webView) + zoomMultiplierRatio);
}
@@ -3759,7 +3832,7 @@ void webkit_web_view_zoom_out(WebKitWebView* webView)
WebKitWebViewPrivate* priv = webView->priv;
gfloat zoomMultiplierRatio;
- g_object_get(priv->webSettings.get(), "zoom-step", &zoomMultiplierRatio, NULL);
+ g_object_get(priv->webSettings, "zoom-step", &zoomMultiplierRatio, NULL);
webkit_web_view_set_zoom_level(webView, webkit_web_view_get_zoom_level(webView) - zoomMultiplierRatio);
}
@@ -3874,8 +3947,9 @@ const gchar* webkit_web_view_get_encoding(WebKitWebView* webView)
if (!encoding.isEmpty()) {
WebKitWebViewPrivate* priv = webView->priv;
- priv->encoding.set(g_strdup(encoding.utf8().data()));
- return priv->encoding.get();
+ g_free(priv->encoding);
+ priv->encoding = g_strdup(encoding.utf8().data());
+ return priv->encoding;
} else
return NULL;
}
@@ -3916,8 +3990,9 @@ const char* webkit_web_view_get_custom_encoding(WebKitWebView* webView)
if (!overrideEncoding.isEmpty()) {
WebKitWebViewPrivate* priv = webView->priv;
- priv->customEncoding.set(g_strdup(overrideEncoding.utf8().data()));
- return priv->customEncoding.get();
+ g_free (priv->customEncoding);
+ priv->customEncoding = g_strdup(overrideEncoding.utf8().data());
+ return priv->customEncoding;
} else
return NULL;
}
@@ -4072,11 +4147,11 @@ void webkit_web_view_add_resource(WebKitWebView* webView, char* identifier, WebK
if (!priv->mainResource) {
priv->mainResource = webResource;
- priv->mainResourceIdentifier.set(g_strdup(identifier));
+ priv->mainResourceIdentifier = g_strdup(identifier);
return;
}
- g_hash_table_insert(priv->subResources.get(), identifier, webResource);
+ g_hash_table_insert(priv->subResources, identifier, webResource);
}
WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* identifier)
@@ -4084,13 +4159,13 @@ WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* id
WebKitWebViewPrivate* priv = webView->priv;
gpointer webResource = NULL;
- gboolean resourceFound = g_hash_table_lookup_extended(priv->subResources.get(), identifier, NULL, &webResource);
+ gboolean resourceFound = g_hash_table_lookup_extended(priv->subResources, identifier, NULL, &webResource);
// The only resource we do not store in this hash table is the
// main! If we did not find a request, it probably means the load
// has been interrupted while while a resource was still being
// loaded.
- if (!resourceFound && !g_str_equal(identifier, priv->mainResourceIdentifier.get()))
+ if (!resourceFound && !g_str_equal(identifier, priv->mainResourceIdentifier))
return NULL;
if (!webResource)
@@ -4101,24 +4176,30 @@ WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* id
WebKitWebResource* webkit_web_view_get_main_resource(WebKitWebView* webView)
{
- return webView->priv->mainResource.get();
+ return webView->priv->mainResource;
}
void webkit_web_view_clear_resources(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- priv->mainResourceIdentifier.clear();
- priv->mainResource.clear();
+
+ g_free(priv->mainResourceIdentifier);
+ priv->mainResourceIdentifier = NULL;
+
+ if (priv->mainResource) {
+ g_object_unref(priv->mainResource);
+ priv->mainResource = NULL;
+ }
if (priv->subResources)
- g_hash_table_remove_all(priv->subResources.get());
+ g_hash_table_remove_all(priv->subResources);
}
GList* webkit_web_view_get_subresources(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- GList* subResources = g_hash_table_get_values(priv->subResources.get());
- return g_list_remove(subResources, priv->mainResource.get());
+ GList* subResources = g_hash_table_get_values(priv->subResources);
+ return g_list_remove(subResources, priv->mainResource);
}
/* From EventHandler.cpp */
@@ -4134,11 +4215,12 @@ void webkit_web_view_set_tooltip_text(WebKitWebView* webView, const char* toolti
{
#if GTK_CHECK_VERSION(2, 12, 0)
WebKitWebViewPrivate* priv = webView->priv;
+ g_free(priv->tooltipText);
if (tooltip && *tooltip != '\0') {
- priv->tooltipText.set(g_strdup(tooltip));
+ priv->tooltipText = g_strdup(tooltip);
gtk_widget_set_has_tooltip(GTK_WIDGET(webView), TRUE);
} else {
- priv->tooltipText.clear();
+ priv->tooltipText = 0;
gtk_widget_set_has_tooltip(GTK_WIDGET(webView), FALSE);
}
@@ -4196,8 +4278,9 @@ G_CONST_RETURN gchar* webkit_web_view_get_icon_uri(WebKitWebView* webView)
String iconURL = iconDatabase()->iconURLForPageURL(corePage->mainFrame()->loader()->url().prettyURL());
WebKitWebViewPrivate* priv = webView->priv;
- priv->iconURI.set(g_strdup(iconURL.utf8().data()));
- return priv->iconURI.get();
+ g_free(priv->iconURI);
+ priv->iconURI = g_strdup(iconURL.utf8().data());
+ return priv->iconURI;
}
/**