[Kde-bindings] KDE/kdebindings/perl/qtcore

Chris Michael Burel chrisburel at gmail.com
Mon Aug 16 05:41:27 UTC 2010


SVN commit 1164156 by burel:

The list marshallers in marshall_macros was copying the contents of the list if the list was allocated on the stack.  This is incorrect, as the contents of the list may or may not be allocated on the stack.
Fix the f_handlers.t test.  It was using a form of the Qt::KeySequence constructor incorrectly, causing a test to fail.
Add a test for the painting/fontsampler example.

CCMAIL: kde-bindings at kde.org


 M  +35 -30    src/marshall_macros.h  
 M  +1 -0      t/CMakeLists.txt  
 M  +3 -3      t/f_handlers.t  
 M  +1 -1      t/g_mainwindowsmdi.t  
 A             t/j_paintingfontsampler.t  


--- trunk/KDE/kdebindings/perl/qtcore/src/marshall_macros.h #1164155:1164156
@@ -75,7 +75,6 @@
             m->item().s_voidp = cpplist;
             m->next();
 
-            /*
             if (!m->type().isConst()) {
                 av_clear(list);
     
@@ -84,7 +83,6 @@
                     av_push(list, obj);
                 }
             }
-            */
 
             if (m->cleanup()) {
                 delete cpplist;
@@ -93,8 +91,8 @@
         break;
       
         case Marshall::ToSV: {
-            ItemList *valuelist = (ItemList*)m->item().s_voidp;
-            if(!valuelist) {
+            ItemList * cpplist = (ItemList*)m->item().s_voidp;
+            if(cpplist == 0) {
                 sv_setsv(m->var(), &PL_sv_undef);
                 break;
             }
@@ -102,9 +100,11 @@
             AV* av = newAV();
             SV* avref = newRV_noinc((SV*)av);
 
-            for (int i=0; i < valuelist->size(); ++i) {
-                void *p = (void *) valuelist->at(i);
+            Smoke::ModuleIndex mi = Smoke::findClass(ItemSTR);
 
+            for (int i=0; i < cpplist->size(); ++i) {
+                void *p = (void *) cpplist->at(i);
+
                 if (m->item().s_voidp == 0) {
                     sv_setsv(m->var(), &PL_sv_undef);
                     break;
@@ -112,16 +112,8 @@
 
                 SV* obj = getPointerObject(p);
                 if (!obj || !SvOK(obj) ) {
-                    Smoke::ModuleIndex mi = m->smoke()->findClass(ItemSTR);
                     smokeperl_object *o = alloc_smokeperl_object(
                         false, mi.smoke, mi.index, p );
-                    if( !m->cleanup() && m->type().isStack()) {
-                        void *ptr = construct_copy( o );
-                        if(ptr) {
-                            o->ptr = ptr;
-                            o->allocated = true;
-                        }
-                    }
 
                     const char* classname = perlqt_modules[o->smoke].resolve_classname(o);
 
@@ -134,8 +126,32 @@
             sv_setsv(m->var(), avref);
             m->next();
 
+            if (!m->type().isConst()) {
+                int count = av_len(av) + 1;
+                long i;
+                cpplist->clear();
+                for (i = 0; i < count; ++i) {
+                    SV** itemref = av_fetch(av, i, 0);
+                    if( !itemref )
+                        continue;
+                    SV* item = *itemref;
+                    // TODO do type checking!
+                    smokeperl_object *o = sv_obj_info(item);
+                    if(!o || !o->ptr)
+                        continue;
+                    void *ptr = o->ptr;
+                    ptr = o->smoke->cast(
+                            ptr,				// pointer
+                            o->classId,				// from
+                            o->smoke->idClass(ItemSTR, true).index	// to
+                            );
+
+                    cpplist->append((Item*)ptr);
+                }
+            }
+
             if (m->cleanup()) {
-                delete valuelist;
+                delete cpplist;
             }
         }
         break;
@@ -161,7 +177,7 @@
             for(long i = 0; i < count; ++i) {
                 SV **item = av_fetch(list, i, 0);
                 // TODO do type checking!
-                if(!item || !SvOK(*item))
+                if(!item)
                     continue;
                 smokeperl_object *o = sv_obj_info(*item);
 
@@ -221,8 +237,8 @@
             AV* av = newAV();
             SV* avref = newRV_noinc((SV*)av);
 
-            //int ix = m->smoke()->idClass(ItemSTR).index;
-            //const char * className = binding.className(ix);
+			Smoke::ModuleIndex mi = Smoke::findClass(ItemSTR);
+			const char * className = perlqt_modules[mi.smoke].binding->className(mi.index);
 
             for(int i=0; i < valuelist->size(); ++i) {
                 void *p = (void *) &(valuelist->at(i));
@@ -234,23 +250,12 @@
 
                 SV *obj = getPointerObject(p);
                 if( !obj || !SvOK(obj) ) {
-                    Smoke::ModuleIndex mi = m->smoke()->findClass(ItemSTR);
                     smokeperl_object *o = alloc_smokeperl_object(
                         false, mi.smoke, mi.index, p );
-                    if( !m->cleanup() && m->type().isStack()) {
 
-                        void *ptr = construct_copy( o );
-                        if(ptr) {
-                            o->ptr = ptr;
-                            o->allocated = true;
+                    obj = set_obj_info( className, o );
                         }
-                    }
 
-                    const char* classname = perlqt_modules[o->smoke].resolve_classname(o);
-
-                    obj = set_obj_info( classname, o );
-                }
-
                 av_push(av, obj);
             }
 
--- trunk/KDE/kdebindings/perl/qtcore/t/CMakeLists.txt #1164155:1164156
@@ -8,3 +8,4 @@
 add_test(perlqt_mainwindowsmdi    prove ${prove_args} -I${CMAKE_SOURCE_DIR}/perl/qtgui/examples/mainwindows/mdi ${CMAKE_CURRENT_SOURCE_DIR}/g_mainwindowsmdi.t)
 add_test(perlqt_widgetscalculator prove ${prove_args} -I${CMAKE_SOURCE_DIR}/perl/qtgui/examples/widgets/calculator ${CMAKE_CURRENT_SOURCE_DIR}/h_widgetscalculator.t)
 add_test(perlqt_xmlstreambookmarks prove ${prove_args} -I${CMAKE_SOURCE_DIR}/perl/qtgui/examples/xml/streambookmarks ${CMAKE_CURRENT_SOURCE_DIR}/i_xmlstreambookmarks.t)
+add_test(perlqt_paintingfontsampler prove ${prove_args} -I${CMAKE_SOURCE_DIR}/perl/qtgui/examples/painting/fontsampler ${CMAKE_CURRENT_SOURCE_DIR}/j_paintingfontsampler.t)
--- trunk/KDE/kdebindings/perl/qtcore/t/f_handlers.t #1164155:1164156
@@ -183,9 +183,9 @@
 
 {
     # Test marshall_ValueListItem ToSV
-    my $shortcut1 = Qt::KeySequence( Qt::Key_Enter() );
-    my $shortcut2 = Qt::KeySequence( Qt::Key_Tab() );
-    my $shortcut3 = Qt::KeySequence( Qt::Key_Space() );
+    my $shortcut1 = Qt::KeySequence( 'Enter' );
+    my $shortcut2 = Qt::KeySequence( 'Tab' );
+    my $shortcut3 = Qt::KeySequence( 'Space' );
     my $shortcuts = [ $shortcut1, $shortcut2, $shortcut3 ];
     my $action = Qt::Action( 'Foobar', undef );
 
--- trunk/KDE/kdebindings/perl/qtcore/t/g_mainwindowsmdi.t #1164155:1164156
@@ -26,7 +26,7 @@
     $mainWin->newFile();
     my $activeWindow = $mainWin->activeMdiChild();
     my $text = 'Hello, World!';
-    Qt::Test::keyClicks($activeWindow, $text, Qt::NoModifier(), 10);
+    Qt::Test::keyClicks($activeWindow, $text, Qt::NoModifier());
 
     my $filename = 'MdiTestFile';
     $activeWindow->saveFile($filename);



More information about the Kde-bindings mailing list