[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 00:40:25 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit d79ae5a8b26c38ee8f38a8c4d4f2aa4ddeeb9423
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Dec 17 17:44:11 2009 +0000

    2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
    
            Reviewed by Gustavo Noronha Silva.
    
            [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
            https://bugs.webkit.org/show_bug.cgi?id=21599
    
            Implement GRefPtr, a smart pointer for reference counted GObject types.
    
            * GNUmakefile.am:
            * wtf/gtk/GOwnPtr.cpp:
            (WTF::GDir):
            * wtf/gtk/GRefPtr.h: Added.
            (WTF::):
            (WTF::GRefPtr::GRefPtr):
            (WTF::GRefPtr::~GRefPtr):
            (WTF::GRefPtr::clear):
            (WTF::GRefPtr::get):
            (WTF::GRefPtr::operator*):
            (WTF::GRefPtr::operator->):
            (WTF::GRefPtr::operator!):
            (WTF::GRefPtr::operator UnspecifiedBoolType):
            (WTF::GRefPtr::hashTableDeletedValue):
            (WTF::::operator):
            (WTF::::swap):
            (WTF::swap):
            (WTF::operator==):
            (WTF::operator!=):
            (WTF::static_pointer_cast):
            (WTF::const_pointer_cast):
            (WTF::getPtr):
            (WTF::adoptGRef):
            (WTF::refGPtr):
            (WTF::derefGPtr):
    2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
    
            Reviewed by Gustavo Noronha Silva.
    
            [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
            https://bugs.webkit.org/show_bug.cgi?id=21599
    
            Add GRefPtr support for GTK types to WebCore, as JSC does not link against
            GTK+. Also convert PopupMenu::m_poup from a raw pointer to a GRefPtr.
    
            No new tests as functionality has not changed.
    
            * GNUmakefile.am:
            * platform/PopupMenu.h:
            * platform/gtk/GRefPtrGtk.cpp: Added.
            (WTF::refGPtr):
            (WTF::derefGPtr):
            * platform/gtk/GRefPtrGtk.h: Added.
            * platform/gtk/PopupMenuGtk.cpp:
            (WebCore::PopupMenu::PopupMenu):
            (WebCore::PopupMenu::~PopupMenu):
            (WebCore::PopupMenu::show):
            (WebCore::PopupMenu::hide):
            (WebCore::PopupMenu::menuRemoveItem):
    2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
    
            Reviewed by Gustavo Noronha Silva.
    
            [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
            https://bugs.webkit.org/show_bug.cgi?id=21599
    
            Convert a use of GOwnPtr for a reference counted type to GRefPtr.
    
            * WebCoreSupport/FrameLoaderClientGtk.cpp:
            (WebKit::FrameLoaderClient::createPlugin):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52258 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 2f6356f..51b9936 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,38 @@
+2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
+
+        Reviewed by Gustavo Noronha Silva.
+
+        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
+        https://bugs.webkit.org/show_bug.cgi?id=21599
+
+        Implement GRefPtr, a smart pointer for reference counted GObject types.
+
+        * GNUmakefile.am:
+        * wtf/gtk/GOwnPtr.cpp:
+        (WTF::GDir):
+        * wtf/gtk/GRefPtr.h: Added.
+        (WTF::):
+        (WTF::GRefPtr::GRefPtr):
+        (WTF::GRefPtr::~GRefPtr):
+        (WTF::GRefPtr::clear):
+        (WTF::GRefPtr::get):
+        (WTF::GRefPtr::operator*):
+        (WTF::GRefPtr::operator->):
+        (WTF::GRefPtr::operator!):
+        (WTF::GRefPtr::operator UnspecifiedBoolType):
+        (WTF::GRefPtr::hashTableDeletedValue):
+        (WTF::::operator):
+        (WTF::::swap):
+        (WTF::swap):
+        (WTF::operator==):
+        (WTF::operator!=):
+        (WTF::static_pointer_cast):
+        (WTF::const_pointer_cast):
+        (WTF::getPtr):
+        (WTF::adoptGRef):
+        (WTF::refGPtr):
+        (WTF::derefGPtr):
+
 2009-12-17  Gustavo Noronha Silva  <gustavo.noronha at collabora.co.uk>
 
         Unreviewed. Build fixes for make distcheck.
diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
index a4d62a2..062634b 100644
--- a/JavaScriptCore/GNUmakefile.am
+++ b/JavaScriptCore/GNUmakefile.am
@@ -291,6 +291,8 @@ javascriptcore_sources += \
 	JavaScriptCore/wtf/VectorTraits.h \
 	JavaScriptCore/wtf/gtk/GOwnPtr.cpp \
 	JavaScriptCore/wtf/gtk/GOwnPtr.h \
+	JavaScriptCore/wtf/gtk/GRefPtr.cpp \
+	JavaScriptCore/wtf/gtk/GRefPtr.h \
 	JavaScriptCore/wtf/gtk/MainThreadGtk.cpp \
 	JavaScriptCore/wtf/gtk/ThreadingGtk.cpp \
 	JavaScriptCore/wtf/unicode/Collator.h \
diff --git a/JavaScriptCore/wtf/gtk/GOwnPtr.cpp b/JavaScriptCore/wtf/gtk/GOwnPtr.cpp
index 8999962..1a151b9 100644
--- a/JavaScriptCore/wtf/gtk/GOwnPtr.cpp
+++ b/JavaScriptCore/wtf/gtk/GOwnPtr.cpp
@@ -57,11 +57,4 @@ template <> void freeOwnedGPtr<GDir>(GDir* ptr)
     if (ptr)
         g_dir_close(ptr);
 }
-
-template <> void freeOwnedGPtr<GHashTable>(GHashTable* ptr)
-{
-    if (ptr)
-        g_hash_table_unref(ptr);
-}
-
 } // namespace WTF
diff --git a/JavaScriptCore/wtf/gtk/GRefPtr.cpp b/JavaScriptCore/wtf/gtk/GRefPtr.cpp
new file mode 100644
index 0000000..8dc4591
--- /dev/null
+++ b/JavaScriptCore/wtf/gtk/GRefPtr.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 Martin Robinson
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "GRefPtr.h"
+
+#include <glib.h>
+
+namespace WTF {
+
+template <> GHashTable* refGPtr(GHashTable* ptr)
+{
+    g_hash_table_ref(ptr);
+}
+
+template <> void derefGPtr(GHashTable* ptr)
+{
+    g_hash_table_unref(ptr);
+}
+
+} // namespace WTF
diff --git a/JavaScriptCore/wtf/gtk/GRefPtr.h b/JavaScriptCore/wtf/gtk/GRefPtr.h
new file mode 100644
index 0000000..5b6081d
--- /dev/null
+++ b/JavaScriptCore/wtf/gtk/GRefPtr.h
@@ -0,0 +1,197 @@
+/*
+ *  Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *  Copyright (C) 2008 Collabora Ltd.
+ *  Copyright (C) 2009 Martin Robinson
+ *
+ *  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.
+ *
+ */
+
+#ifndef WTF_GRefPtr_h
+#define WTF_GRefPtr_h
+
+#include "AlwaysInline.h"
+#include <algorithm>
+
+typedef struct _GHashTable GHashTable;
+
+namespace WTF {
+
+enum GRefPtrAdoptType { GRefPtrAdopt };
+template <typename T> inline T* refGPtr(T*);
+template <typename T> inline void derefGPtr(T*);
+template <typename T> class GRefPtr;
+template <typename T> GRefPtr<T> adoptGRef(T*);
+template <> GHashTable* refGPtr(GHashTable* ptr);
+template <> void derefGPtr(GHashTable* ptr);
+
+template <typename T> class GRefPtr {
+public:
+    GRefPtr() : m_ptr(0) { }
+    GRefPtr(T* ptr) : m_ptr(ptr) { if (ptr) refGPtr(ptr); }
+    GRefPtr(const GRefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) refGPtr(ptr); }
+    template <typename U> GRefPtr(const GRefPtr<U>& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) refGPtr(ptr); }
+
+    ~GRefPtr() { if (T* ptr = m_ptr) derefGPtr(ptr); }
+
+    void clear()
+    {
+        if (T* ptr = m_ptr)
+            derefGPtr(ptr);
+        m_ptr = 0;
+    }
+
+    T* get() const { return m_ptr; }
+    T& operator*() const { return *m_ptr; }
+    ALWAYS_INLINE T* operator->() const { return m_ptr; }
+
+    bool operator!() const { return !m_ptr; }
+
+    // This conversion operator allows implicit conversion to bool but not to other integer types.
+    typedef T* GRefPtr::*UnspecifiedBoolType;
+    operator UnspecifiedBoolType() const { return m_ptr ? &GRefPtr::m_ptr : 0; }
+
+    GRefPtr& operator=(const GRefPtr&);
+    GRefPtr& operator=(T*);
+    template <typename U> GRefPtr& operator=(const GRefPtr<U>&);
+
+    void swap(GRefPtr&);
+    friend GRefPtr adoptGRef<T>(T*);
+
+private:
+    static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
+    // Adopting constructor.
+    GRefPtr(T* ptr, GRefPtrAdoptType) : m_ptr(ptr) {}
+
+    T* m_ptr;
+};
+
+template <typename T> inline GRefPtr<T>& GRefPtr<T>::operator=(const GRefPtr<T>& o)
+{
+    T* optr = o.get();
+    if (optr)
+        refGPtr(optr);
+    T* ptr = m_ptr;
+    m_ptr = optr;
+    if (ptr)
+        derefGPtr(ptr);
+    return *this;
+}
+
+template <typename T> template <typename U> inline GRefPtr<T>& GRefPtr<T>::operator=(const GRefPtr<U>& o)
+{
+    T* optr = o.get();
+    if (optr)
+        refGPtr(optr);
+    T* ptr = m_ptr;
+    m_ptr = optr;
+    if (ptr)
+        derefGPtr(ptr);
+    return *this;
+}
+
+template <typename T> inline GRefPtr<T>& GRefPtr<T>::operator=(T* optr)
+{
+    T* ptr = m_ptr;
+    m_ptr = optr;
+    if (ptr)
+        derefGPtr(ptr);
+    return *this;
+}
+
+template <class T> inline void GRefPtr<T>::swap(GRefPtr<T>& o)
+{
+    std::swap(m_ptr, o.m_ptr);
+}
+
+template <class T> inline void swap(GRefPtr<T>& a, GRefPtr<T>& b)
+{
+    a.swap(b);
+}
+
+template <typename T, typename U> inline bool operator==(const GRefPtr<T>& a, const GRefPtr<U>& b)
+{
+    return a.get() == b.get();
+}
+
+template <typename T, typename U> inline bool operator==(const GRefPtr<T>& a, U* b)
+{
+    return a.get() == b;
+}
+
+template <typename T, typename U> inline bool operator==(T* a, const GRefPtr<U>& b)
+{
+    return a == b.get();
+}
+
+template <typename T, typename U> inline bool operator!=(const GRefPtr<T>& a, const GRefPtr<U>& b)
+{
+    return a.get() != b.get();
+}
+
+template <typename T, typename U> inline bool operator!=(const GRefPtr<T>& a, U* b)
+{
+    return a.get() != b;
+}
+
+template <typename T, typename U> inline bool operator!=(T* a, const GRefPtr<U>& b)
+{
+    return a != b.get();
+}
+
+template <typename T, typename U> inline GRefPtr<T> static_pointer_cast(const GRefPtr<U>& p)
+{
+    return GRefPtr<T>(static_cast<T*>(p.get()));
+}
+
+template <typename T, typename U> inline GRefPtr<T> const_pointer_cast(const GRefPtr<U>& p)
+{
+    return GRefPtr<T>(const_cast<T*>(p.get()));
+}
+
+template <typename T> inline T* getPtr(const GRefPtr<T>& p)
+{
+    return p.get();
+}
+
+template <typename T> GRefPtr<T> adoptGRef(T* p)
+{
+    return GRefPtr<T>(p, GRefPtrAdopt);
+}
+
+template <typename T> inline T* refGPtr(T* ptr)
+{
+    if (ptr)
+        g_object_ref_sink(ptr);
+    return ptr;
+}
+
+template <typename T> inline void derefGPtr(T* ptr)
+{
+    if (ptr)
+        g_object_unref(ptr);
+}
+
+} // namespace WTF
+
+using WTF::GRefPtr;
+using WTF::refGPtr;
+using WTF::derefGPtr;
+using WTF::adoptGRef;
+using WTF::static_pointer_cast;
+using WTF::const_pointer_cast;
+
+#endif // WTF_GRefPtr_h
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 975bc96..62d82c0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
+
+        Reviewed by Gustavo Noronha Silva.
+
+        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
+        https://bugs.webkit.org/show_bug.cgi?id=21599
+
+        Add GRefPtr support for GTK types to WebCore, as JSC does not link against
+        GTK+. Also convert PopupMenu::m_poup from a raw pointer to a GRefPtr.
+
+        No new tests as functionality has not changed.
+
+        * GNUmakefile.am:
+        * platform/PopupMenu.h:
+        * platform/gtk/GRefPtrGtk.cpp: Added.
+        (WTF::refGPtr):
+        (WTF::derefGPtr):
+        * platform/gtk/GRefPtrGtk.h: Added.
+        * platform/gtk/PopupMenuGtk.cpp:
+        (WebCore::PopupMenu::PopupMenu):
+        (WebCore::PopupMenu::~PopupMenu):
+        (WebCore::PopupMenu::show):
+        (WebCore::PopupMenu::hide):
+        (WebCore::PopupMenu::menuRemoveItem):
+
 2009-12-17  Mikhail Naganov  <mnaganov at chromium.org>
 
         Reviewed by Pavel Feldman.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 160fe93..a5efdb7 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -1981,6 +1981,8 @@ webcoregtk_sources += \
 	WebCore/platform/gtk/EventLoopGtk.cpp \
 	WebCore/platform/gtk/FileChooserGtk.cpp \
 	WebCore/platform/gtk/FileSystemGtk.cpp \
+	WebCore/platform/gtk/GRefPtrGtk.cpp \
+	WebCore/platform/gtk/GRefPtrGtk.h \
 	WebCore/platform/gtk/GtkPluginWidget.cpp \
 	WebCore/platform/gtk/GtkPluginWidget.h \
 	WebCore/platform/gtk/KURLGtk.cpp \
diff --git a/WebCore/platform/PopupMenu.h b/WebCore/platform/PopupMenu.h
index dbd2c93..449d475 100644
--- a/WebCore/platform/PopupMenu.h
+++ b/WebCore/platform/PopupMenu.h
@@ -48,6 +48,7 @@ class QtAbstractWebPopup;
 typedef struct _GtkMenu GtkMenu;
 typedef struct _GtkMenuItem GtkMenuItem;
 typedef struct _GtkWidget GtkWidget;
+#include "GRefPtrGtk.h"
 #include <wtf/HashMap.h>
 #include <glib.h>
 #elif PLATFORM(WX)
@@ -173,7 +174,7 @@ private:
     bool m_showPopup;
 #elif PLATFORM(GTK)
     IntPoint m_menuPosition;
-    GtkMenu* m_popup;
+    GRefPtr<GtkMenu> m_popup;
     HashMap<GtkWidget*, int> m_indexMap;
     static void menuItemActivated(GtkMenuItem* item, PopupMenu*);
     static void menuUnmapped(GtkWidget*, PopupMenu*);
diff --git a/WebCore/platform/gtk/GRefPtrGtk.cpp b/WebCore/platform/gtk/GRefPtrGtk.cpp
new file mode 100644
index 0000000..6647b99
--- /dev/null
+++ b/WebCore/platform/gtk/GRefPtrGtk.cpp
@@ -0,0 +1,54 @@
+/*
+ *  Copyright (C) 2008 Collabora Ltd.
+ *  Copyright (C) 2009 Martin Robinson
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "config.h"
+#include "GRefPtrGtk.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+namespace WTF {
+
+template <> GtkTargetList* refGPtr(GtkTargetList* ptr)
+{
+    if (ptr)
+        gtk_target_list_ref(ptr);
+    return ptr;
+}
+
+template <> void derefGPtr(GtkTargetList* ptr)
+{
+    if (ptr)
+        gtk_target_list_unref(ptr);
+}
+
+template <> GdkCursor* refGPtr(GdkCursor* ptr)
+{
+    if (ptr)
+        gdk_cursor_ref(ptr);
+    return ptr;
+}
+
+template <> void derefGPtr(GdkCursor* ptr)
+{
+    if (ptr)
+        gdk_cursor_unref(ptr);
+}
+
+}
diff --git a/WebCore/platform/gtk/GRefPtrGtk.h b/WebCore/platform/gtk/GRefPtrGtk.h
new file mode 100644
index 0000000..77941f5
--- /dev/null
+++ b/WebCore/platform/gtk/GRefPtrGtk.h
@@ -0,0 +1,39 @@
+/*
+ *  Copyright (C) 2008 Collabora Ltd.
+ *  Copyright (C) 2009 Martin Robinson
+ *
+ *  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.
+ */
+
+#ifndef GRefPtrGtk_h
+#define GRefPtrGtk_h
+
+#include "GRefPtr.h"
+
+typedef struct _GtkTargetList GtkTargetList;
+typedef struct _GdkCursor GdkCursor;
+
+namespace WTF {
+
+template <> GtkTargetList* refGPtr(GtkTargetList* ptr);
+template <> void derefGPtr(GtkTargetList* ptr);
+
+template <> GdkCursor* refGPtr(GdkCursor* ptr);
+template <> void derefGPtr(GdkCursor* ptr);
+
+}
+
+#endif
diff --git a/WebCore/platform/gtk/PopupMenuGtk.cpp b/WebCore/platform/gtk/PopupMenuGtk.cpp
index 3f6b02a..0363ac4 100644
--- a/WebCore/platform/gtk/PopupMenuGtk.cpp
+++ b/WebCore/platform/gtk/PopupMenuGtk.cpp
@@ -35,16 +35,14 @@ namespace WebCore {
 
 PopupMenu::PopupMenu(PopupMenuClient* client)
     : m_popupClient(client)
-    , m_popup(0)
 {
 }
 
 PopupMenu::~PopupMenu()
 {
     if (m_popup) {
-        g_signal_handlers_disconnect_matched(m_popup, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);
+        g_signal_handlers_disconnect_matched(m_popup.get(), G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this);
         hide();
-        g_object_unref(m_popup);
     }
 }
 
@@ -54,10 +52,9 @@ void PopupMenu::show(const IntRect& rect, FrameView* view, int index)
 
     if (!m_popup) {
         m_popup = GTK_MENU(gtk_menu_new());
-        g_object_ref_sink(G_OBJECT(m_popup));
-        g_signal_connect(m_popup, "unmap", G_CALLBACK(menuUnmapped), this);
+        g_signal_connect(m_popup.get(), "unmap", G_CALLBACK(menuUnmapped), this);
     } else
-        gtk_container_foreach(GTK_CONTAINER(m_popup), reinterpret_cast<GtkCallback>(menuRemoveItem), this);
+        gtk_container_foreach(GTK_CONTAINER(m_popup.get()), reinterpret_cast<GtkCallback>(menuRemoveItem), this);
 
     int x, y;
     gdk_window_get_origin(GTK_WIDGET(view->hostWindow()->platformPageClient())->window, &x, &y);
@@ -78,20 +75,20 @@ void PopupMenu::show(const IntRect& rect, FrameView* view, int index)
 
         // FIXME: Apply the PopupMenuStyle from client()->itemStyle(i)
         gtk_widget_set_sensitive(item, client()->itemIsEnabled(i));
-        gtk_menu_shell_append(GTK_MENU_SHELL(m_popup), item);
+        gtk_menu_shell_append(GTK_MENU_SHELL(m_popup.get()), item);
         gtk_widget_show(item);
     }
 
-    gtk_menu_set_active(m_popup, index);
+    gtk_menu_set_active(m_popup.get(), index);
 
 
     // The size calls are directly copied from gtkcombobox.c which is LGPL
     GtkRequisition requisition;
-    gtk_widget_set_size_request(GTK_WIDGET(m_popup), -1, -1);
-    gtk_widget_size_request(GTK_WIDGET(m_popup), &requisition);
-    gtk_widget_set_size_request(GTK_WIDGET(m_popup), MAX(rect.width(), requisition.width), -1);
+    gtk_widget_set_size_request(GTK_WIDGET(m_popup.get()), -1, -1);
+    gtk_widget_size_request(GTK_WIDGET(m_popup.get()), &requisition);
+    gtk_widget_set_size_request(GTK_WIDGET(m_popup.get()), std::max(rect.width(), requisition.width), -1);
 
-    GList* children = GTK_MENU_SHELL(m_popup)->children;
+    GList* children = GTK_MENU_SHELL(m_popup.get())->children;
     if (size)
         for (int i = 0; i < size; i++) {
             if (i > index)
@@ -103,18 +100,17 @@ void PopupMenu::show(const IntRect& rect, FrameView* view, int index)
             m_menuPosition.setY(m_menuPosition.y() - itemRequisition.height);
 
             children = g_list_next(children);
-        }
-    else
-        // Center vertically the empty popup in the combo box area
-        m_menuPosition.setY(m_menuPosition.y() - rect.height() / 2);
+        } else
+            // Center vertically the empty popup in the combo box area
+            m_menuPosition.setY(m_menuPosition.y() - rect.height() / 2);
 
-    gtk_menu_popup(m_popup, NULL, NULL, reinterpret_cast<GtkMenuPositionFunc>(menuPositionFunction), this, 0, gtk_get_current_event_time());
+    gtk_menu_popup(m_popup.get(), 0, 0, reinterpret_cast<GtkMenuPositionFunc>(menuPositionFunction), this, 0, gtk_get_current_event_time());
 }
 
 void PopupMenu::hide()
 {
     ASSERT(m_popup);
-    gtk_menu_popdown(m_popup);
+    gtk_menu_popdown(m_popup.get());
 }
 
 void PopupMenu::updateFromElement()
@@ -150,7 +146,7 @@ void PopupMenu::menuPositionFunction(GtkMenu*, gint* x, gint* y, gboolean* pushI
 void PopupMenu::menuRemoveItem(GtkWidget* widget, PopupMenu* that)
 {
     ASSERT(that->m_popup);
-    gtk_container_remove(GTK_CONTAINER(that->m_popup), widget);
+    gtk_container_remove(GTK_CONTAINER(that->m_popup.get()), widget);
 }
 
 }
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index 9292a9d..69ce77c 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,15 @@
+2009-12-17  Martin Robinson  <martin.james.robinson at gmail.com>
+
+        Reviewed by Gustavo Noronha Silva.
+
+        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
+        https://bugs.webkit.org/show_bug.cgi?id=21599
+
+        Convert a use of GOwnPtr for a reference counted type to GRefPtr.
+
+        * WebCoreSupport/FrameLoaderClientGtk.cpp:
+        (WebKit::FrameLoaderClient::createPlugin):
+
 2009-12-17  Evan Martin  <evan at chromium.org>
 
         Reviewed by Xan Lopez.
diff --git a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
index 0eaa7c8..a2e3ca7 100644
--- a/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
@@ -33,6 +33,7 @@
 #include "FrameView.h"
 #include "FrameTree.h"
 #include "GOwnPtr.h"
+#include "GRefPtr.h"
 #include "GtkPluginWidget.h"
 #include "HTMLAppletElement.h"
 #include "HTMLFormElement.h"
@@ -440,7 +441,7 @@ PassRefPtr<Widget> FrameLoaderClient::createPlugin(const IntSize& pluginSize, HT
     CString mimeTypeString = mimeType.utf8();
 
     ASSERT(paramNames.size() == paramValues.size());
-    GOwnPtr<GHashTable> hash(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free));
+    GRefPtr<GHashTable> hash = adoptGRef(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free));
     for (unsigned i = 0; i < paramNames.size(); ++i) {
         g_hash_table_insert(hash.get(),
                             g_strdup(paramNames[i].utf8().data()),

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list