[haiku-webkit-commits] r291 - webkit/trunk/WebCore/platform/haiku

  • From: webkit@xxxxxxxxxxxxxxx
  • To: haiku-webkit-commits@xxxxxxxxxxxxx
  • Date: Fri, 05 Mar 2010 18:44:14 +0000

Author: stippi
Date: Fri Mar  5 18:44:14 2010
New Revision: 291
URL: http://mmlr.dyndns.org/changeset/291

Log:
Fix the crashes when polulating context menus for editable content:
 * Correctly release the platform BMenu from ContextMenus.
 * Perform NULL checks everywhere.

Submenus in context menus are a work in progress...

Modified:
   webkit/trunk/WebCore/platform/haiku/ContextMenuItemHaiku.cpp

Modified: webkit/trunk/WebCore/platform/haiku/ContextMenuItemHaiku.cpp
==============================================================================
--- webkit/trunk/WebCore/platform/haiku/ContextMenuItemHaiku.cpp        Fri Mar 
 5 18:18:24 2010        (r290)
+++ webkit/trunk/WebCore/platform/haiku/ContextMenuItemHaiku.cpp        Fri Mar 
 5 18:44:14 2010        (r291)
@@ -45,8 +45,11 @@
 
 ContextMenuItem::ContextMenuItem(ContextMenu* subMenu)
 {
-    m_platformDescription = new BMenuItem(subMenu->platformDescription(),
-                                          new 
BMessage(ContextMenuItemTagNoAction));
+    if (subMenu) {
+        m_platformDescription = new 
BMenuItem(subMenu->releasePlatformDescription(),
+                                              new 
BMessage(ContextMenuItemTagNoAction));
+    } else
+        m_platformDescription = 0;
 }
 
 ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction 
action,
@@ -56,10 +59,12 @@
         m_platformDescription = new BMenuItem(BString(title).String(), new 
BMessage(action));
     else if (type == SeparatorType)
         m_platformDescription = new BSeparatorItem();
-    else {
-        m_platformDescription = new BMenuItem(subMenu->platformDescription(), 
new BMessage(action));
+    else if (subMenu) {
+        m_platformDescription = new 
BMenuItem(subMenu->releasePlatformDescription(),
+            new BMessage(action));
         m_platformDescription->SetLabel(BString(title).String());
-    }
+    } else
+        m_platformDescription = 0;
 }
 
 ContextMenuItem::~ContextMenuItem()
@@ -78,7 +83,7 @@
 {
     if (dynamic_cast<BSeparatorItem*>(m_platformDescription))
         return SeparatorType;
-    if (m_platformDescription->Submenu())
+    if (m_platformDescription && m_platformDescription->Submenu())
         return SubmenuType;
     return ActionType;
 }
@@ -105,14 +110,14 @@
 
 ContextMenuAction ContextMenuItem::action() const
 {
-    if (!m_platformDescription)
-        return ContextMenuItemTagNoAction;
-    return 
static_cast<WebCore::ContextMenuAction>(m_platformDescription->Message()->what);
+    if (m_platformDescription && m_platformDescription->Message())
+        return 
static_cast<WebCore::ContextMenuAction>(m_platformDescription->Message()->what);
+    return ContextMenuItemTagNoAction;
 }
 
 void ContextMenuItem::setAction(ContextMenuAction action)
 {
-    if (m_platformDescription)
+    if (m_platformDescription && m_platformDescription->Message())
         m_platformDescription->Message()->what = action;
 }
 
@@ -126,20 +131,21 @@
 void ContextMenuItem::setTitle(const String& title)
 {
     // FIXME: We need to find a better way to convert WebKit Strings into c 
strings
-    m_platformDescription->SetLabel(BString(title).String());
+    if (m_platformDescription)
+        m_platformDescription->SetLabel(BString(title).String());
 }
 
 PlatformMenuDescription ContextMenuItem::platformSubMenu() const
 {
-    return m_platformDescription->Submenu();
+    return m_platformDescription ? m_platformDescription->Submenu() : 0;
 }
 
 void ContextMenuItem::setSubMenu(ContextMenu* menu)
 {
     // FIXME: We assume m_platformDescription is valid
-    const char* title = m_platformDescription->Label();
+    const char* title = m_platformDescription ? m_platformDescription->Label() 
: "";
     delete m_platformDescription;
-    m_platformDescription = new BMenuItem(menu->platformDescription(), new 
BMessage(action()));
+    m_platformDescription = new BMenuItem(menu->releasePlatformDescription(), 
new BMessage(action()));
     m_platformDescription->SetLabel(title);
 }
 

Other related posts:

  • » [haiku-webkit-commits] r291 - webkit/trunk/WebCore/platform/haiku - webkit