[vlc-devel] commit: mozilla plugin: Replace near-identical code repetitions with calls to helper. (JP Dinger )
git version control
git at videolan.org
Thu Jan 14 09:34:28 CET 2010
vlc | branch: master | JP Dinger <jpd at m2x.nl> | Wed Jan 13 13:57:45 2010 +0100| [57a63ce739a89546ba2e72b09561d480b42c241d] | committer: JP Dinger
mozilla plugin: Replace near-identical code repetitions with calls to helper.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=57a63ce739a89546ba2e72b09561d480b42c241d
---
projects/mozilla/control/npolibvlc.cpp | 43 ++++++--------------------------
projects/mozilla/control/nporuntime.h | 10 +++++++
2 files changed, 18 insertions(+), 35 deletions(-)
diff --git a/projects/mozilla/control/npolibvlc.cpp b/projects/mozilla/control/npolibvlc.cpp
index 348880d..fd39700 100644
--- a/projects/mozilla/control/npolibvlc.cpp
+++ b/projects/mozilla/control/npolibvlc.cpp
@@ -100,43 +100,23 @@ LibvlcRootNPObject::getProperty(int index, NPVariant &result)
switch( index )
{
case ID_root_audio:
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! audioObj )
- audioObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcAudioNPObject>::getClass());
+ InstantObj<LibvlcAudioNPObject>( audioObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(audioObj), result);
return INVOKERESULT_NO_ERROR;
case ID_root_input:
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! inputObj )
- inputObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcInputNPObject>::getClass());
+ InstantObj<LibvlcInputNPObject>( inputObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(inputObj), result);
return INVOKERESULT_NO_ERROR;
case ID_root_playlist:
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! playlistObj )
- playlistObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcPlaylistNPObject>::getClass());
+ InstantObj<LibvlcPlaylistNPObject>( playlistObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistObj), result);
return INVOKERESULT_NO_ERROR;
case ID_root_subtitle:
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! subtitleObj )
- subtitleObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcSubtitleNPObject>::getClass());
+ InstantObj<LibvlcSubtitleNPObject>( subtitleObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(subtitleObj), result);
return INVOKERESULT_NO_ERROR;
case ID_root_video:
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! videoObj )
- videoObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcVideoNPObject>::getClass());
+ InstantObj<LibvlcVideoNPObject>( videoObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(videoObj), result);
return INVOKERESULT_NO_ERROR;
case ID_root_VersionInfo:
@@ -757,12 +737,7 @@ LibvlcPlaylistNPObject::getProperty(int index, NPVariant &result)
}
case ID_playlist_items:
{
- // create child object in lazyman fashion to avoid
- // ownership problem with firefox
- if( ! playlistItemsObj )
- playlistItemsObj =
- NPN_CreateObject(_instance, RuntimeNPClass<
- LibvlcPlaylistItemsNPObject>::getClass());
+ InstantObj<LibvlcPlaylistItemsNPObject>( playlistItemsObj );
OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistItemsObj), result);
return INVOKERESULT_NO_ERROR;
}
@@ -1379,10 +1354,8 @@ LibvlcVideoNPObject::getProperty(int index, NPVariant &result)
}
case ID_video_marquee:
{
- if( ! marqueeObj )
- marqueeObj = NPN_CreateObject(_instance,
- RuntimeNPClass<LibvlcMarqueeNPObject>::getClass());
- OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result);
+ InstantObj<LibvlcMarqueeNPObject>( marqueeObj );
+ OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result);
return INVOKERESULT_NO_ERROR;
}
}
diff --git a/projects/mozilla/control/nporuntime.h b/projects/mozilla/control/nporuntime.h
index 6aba74e..fe9bfc6 100644
--- a/projects/mozilla/control/nporuntime.h
+++ b/projects/mozilla/control/nporuntime.h
@@ -42,6 +42,9 @@ static bool RuntimeNPClassInvokeDefault(NPObject *npobj,
class RuntimeNPObject : public NPObject
{
public:
+ // Lazy child object cration helper. Doing this avoids
+ // ownership problems with firefox.
+ template<class T> void InstantObj( NPObject *&obj );
/*
** utility functions
@@ -175,6 +178,13 @@ private:
};
template<class T>
+inline void RuntimeNPObject::InstantObj( NPObject *&obj )
+{
+ if( !obj )
+ obj = NPN_CreateObject(_instance, RuntimeNPClass<T>::getClass());
+}
+
+template<class T>
static NPObject *RuntimeNPClassAllocate(NPP instance, NPClass *aClass)
{
const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(aClass);
More information about the vlc-devel
mailing list