Merge lp:~compiz-team/compiz/compiz.fix_1049169 into lp:compiz/0.9.8

Proposed by Sam Spilsbury
Status: Superseded
Proposed branch: lp:~compiz-team/compiz/compiz.fix_1049169
Merge into: lp:compiz/0.9.8
Prerequisite: lp:~compiz-team/compiz/compiz.fix_1050796
Diff against target: 472 lines (+60/-209)
10 files modified
compizconfig/gsettings/src/gsettings.c (+2/-1)
compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.cpp (+0/-17)
compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.h (+2/-2)
compizconfig/gsettings/tests/test_gsettings_conformance.cpp (+0/-1)
compizconfig/gsettings/tests/test_gsettings_tests.h (+13/-8)
compizconfig/integration/gnome/gsettings/include/ccs_gnome_integration_gsettings_integrated_setting_factory.h (+3/-0)
compizconfig/integration/gnome/gsettings/src/ccs_gnome_integration_gsettings_integrated_setting_factory.c (+12/-0)
compizconfig/integration/gnome/gsettings/tests/compizconfig_test_ccs_gnome_gsettings_integrated_setting.cpp (+26/-15)
compizconfig/libcompizconfig/src/bindings.c (+2/-2)
compizconfig/tests/compizconfig_ccs_list_wrapper.h (+0/-163)
To merge this branch: bzr merge lp:~compiz-team/compiz/compiz.fix_1049169
Reviewer Review Type Date Requested Status
jenkins (community) continuous-integration Needs Fixing
Compiz Maintainers Pending
Review via email: mp+126163@code.launchpad.net

This proposal has been superseded by a proposal from 2012-09-25.

Commit message

Fixes memory leaks in the tests

Description of the change

Fixes memory leaks in the tests

To post a comment you must log in.
Revision history for this message
jenkins (martin-mrazik+qa) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Sam Spilsbury (smspillaz) wrote :

Seems to me like the above failure is probably caused by a missing file. Jenkins doesn't say too much about it, rebuilding locally to check

3392. By Sam Spilsbury

Merge compiz.fix_1050796

3393. By Sam Spilsbury

Merge lp:~compiz-team/compiz/compiz.fix_1050796

Revision history for this message
jenkins (martin-mrazik+qa) wrote :
review: Needs Fixing (continuous-integration)

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'compizconfig/gsettings/src/gsettings.c'
--- compizconfig/gsettings/src/gsettings.c 2012-08-16 17:00:25 +0000
+++ compizconfig/gsettings/src/gsettings.c 2012-09-25 08:46:22 +0000
@@ -50,7 +50,8 @@
50 cleanSettingName,50 cleanSettingName,
51 pathName,51 pathName,
52 ccsSettingGetType (setting));52 ccsSettingGetType (setting));
5353 free (cleanSettingName);
54 g_free (pathName);
54 return gsettingsValue;55 return gsettingsValue;
55}56}
5657
5758
=== modified file 'compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.cpp'
--- compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.cpp 2012-09-25 08:46:22 +0000
+++ compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.cpp 2012-09-25 08:46:22 +0000
@@ -52,8 +52,6 @@
5252
53 CCSGSettingsWrapper *mSettings;53 CCSGSettingsWrapper *mSettings;
54 std::string profileName;54 std::string profileName;
55 CompizGLibGSettingsMemoryBackendTestingEnv gsettingsEnv;
56 CompizGLibGSliceOffEnv gsliceEnv;
57};55};
5856
59void57void
@@ -333,21 +331,6 @@
333 return shared;331 return shared;
334}332}
335333
336void
337CCSGSettingsStorageEnv::SetUp ()
338{
339 g_type_init ();
340 priv->gsliceEnv.SetUpEnv ();
341 priv->gsettingsEnv.SetUpEnv (MOCK_PATH);
342}
343
344void
345CCSGSettingsStorageEnv::TearDown ()
346{
347 priv->gsettingsEnv.TearDownEnv ();
348 priv->gsliceEnv.TearDownEnv ();
349}
350
351PrivateCCSGSettingsStorageEnv::PrivateCCSGSettingsStorageEnv (CCSGSettingsWrapper *settings,334PrivateCCSGSettingsStorageEnv::PrivateCCSGSettingsStorageEnv (CCSGSettingsWrapper *settings,
352 const std::string &profileName) :335 const std::string &profileName) :
353 mSettings (settings),336 mSettings (settings),
354337
=== modified file 'compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.h'
--- compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.h 2012-09-25 08:46:22 +0000
+++ compizconfig/gsettings/tests/compizconfig_ccs_gsettings_settings_env_test.h 2012-09-25 08:46:22 +0000
@@ -40,8 +40,8 @@
40{40{
41 public:41 public:
4242
43 virtual void SetUp ();43 virtual void SetUp () {}
44 virtual void TearDown ();44 virtual void TearDown () {}
4545
46 CCSGSettingsStorageEnv (CCSGSettingsWrapper *settings,46 CCSGSettingsStorageEnv (CCSGSettingsWrapper *settings,
47 const std::string &profileName);47 const std::string &profileName);
4848
=== modified file 'compizconfig/gsettings/tests/test_gsettings_conformance.cpp'
--- compizconfig/gsettings/tests/test_gsettings_conformance.cpp 2012-09-25 08:46:22 +0000
+++ compizconfig/gsettings/tests/test_gsettings_conformance.cpp 2012-09-25 08:46:22 +0000
@@ -65,7 +65,6 @@
65 CCSGSettingsBackendEnv () :65 CCSGSettingsBackendEnv () :
66 pluginToMatch ("mock")66 pluginToMatch ("mock")
67 {67 {
68 g_type_init ();
69 }68 }
7069
71 /* A wrapper to prevent signals from being added */70 /* A wrapper to prevent signals from being added */
7271
=== modified file 'compizconfig/gsettings/tests/test_gsettings_tests.h'
--- compizconfig/gsettings/tests/test_gsettings_tests.h 2012-09-25 08:46:22 +0000
+++ compizconfig/gsettings/tests/test_gsettings_tests.h 2012-09-25 08:46:22 +0000
@@ -45,13 +45,18 @@
4545
46 virtual void SetUpEnv ()46 virtual void SetUpEnv ()
47 {47 {
48 setenv ("G_SLICE", "always-malloc", 1);48 gsliceEnv.SetUpEnv ();
49 g_type_init ();
49 }50 }
5051
51 virtual void TearDownEnv ()52 virtual void TearDownEnv ()
52 {53 {
53 unsetenv ("G_SLICE");54 gsliceEnv.TearDownEnv ();
54 }55 }
56
57 private:
58
59 CompizGLibGSliceOffEnv gsliceEnv;
55};60};
5661
57class CCSGSettingsMemoryBackendTestingEnv :62class CCSGSettingsMemoryBackendTestingEnv :
@@ -62,18 +67,18 @@
62 virtual void SetUpEnv ()67 virtual void SetUpEnv ()
63 {68 {
64 CCSGSettingsTestingEnv::SetUpEnv ();69 CCSGSettingsTestingEnv::SetUpEnv ();
6570 gsettingsEnv.SetUpEnv (MOCK_PATH);
66 g_setenv ("GSETTINGS_SCHEMA_DIR", MOCK_PATH.c_str (), true);
67 g_setenv ("GSETTINGS_BACKEND", "memory", 1);
68 }71 }
6972
70 virtual void TearDownEnv ()73 virtual void TearDownEnv ()
71 {74 {
72 g_unsetenv ("GSETTINGS_BACKEND");75 gsettingsEnv.TearDownEnv ();
73 g_unsetenv ("GSETTINGS_SCHEMA_DIR");
74
75 CCSGSettingsTestingEnv::TearDownEnv ();76 CCSGSettingsTestingEnv::TearDownEnv ();
76 }77 }
78
79 private:
80
81 CompizGLibGSettingsMemoryBackendTestingEnv gsettingsEnv;
77};82};
7883
79class CCSGSettingsTestCommon :84class CCSGSettingsTestCommon :
8085
=== modified file 'compizconfig/integration/gnome/gsettings/include/ccs_gnome_integration_gsettings_integrated_setting_factory.h'
--- compizconfig/integration/gnome/gsettings/include/ccs_gnome_integration_gsettings_integrated_setting_factory.h 2012-09-25 08:46:22 +0000
+++ compizconfig/integration/gnome/gsettings/include/ccs_gnome_integration_gsettings_integrated_setting_factory.h 2012-09-25 08:46:22 +0000
@@ -60,6 +60,9 @@
60CCSGNOMEIntegrationGSettingsWrapperFactory *60CCSGNOMEIntegrationGSettingsWrapperFactory *
61ccsGNOMEIntegrationGSettingsWrapperDefaultImplNew (CCSObjectAllocationInterface *ai);61ccsGNOMEIntegrationGSettingsWrapperDefaultImplNew (CCSObjectAllocationInterface *ai);
6262
63void
64ccsGNOMEIntegrationGSettingsWrapperDefaultImplFree (CCSGNOMEIntegrationGSettingsWrapperFactory *wrapperFactory);
65
63CCSIntegratedSettingFactory *66CCSIntegratedSettingFactory *
64ccsGSettingsIntegratedSettingFactoryNew (CCSGNOMEIntegrationGSettingsWrapperFactory *wrapperFactory,67ccsGSettingsIntegratedSettingFactoryNew (CCSGNOMEIntegrationGSettingsWrapperFactory *wrapperFactory,
65 CCSGNOMEValueChangeData *data,68 CCSGNOMEValueChangeData *data,
6669
=== modified file 'compizconfig/integration/gnome/gsettings/src/ccs_gnome_integration_gsettings_integrated_setting_factory.c'
--- compizconfig/integration/gnome/gsettings/src/ccs_gnome_integration_gsettings_integrated_setting_factory.c 2012-09-25 08:46:22 +0000
+++ compizconfig/integration/gnome/gsettings/src/ccs_gnome_integration_gsettings_integrated_setting_factory.c 2012-09-25 08:46:22 +0000
@@ -79,6 +79,14 @@
79 ccsGNOMEIntegrationGSettingsWrapperFactoryNewGSettingsWrapperDefault79 ccsGNOMEIntegrationGSettingsWrapperFactoryNewGSettingsWrapperDefault
80};80};
8181
82void
83ccsGNOMEIntegrationGSettingsWrapperDefaultImplFree (CCSGNOMEIntegrationGSettingsWrapperFactory *wrapperFactory)
84{
85 ccsObjectFinalize (wrapperFactory);
86 (*wrapperFactory->object.object_allocation->free_) (wrapperFactory->object.object_allocation->allocator,
87 wrapperFactory);
88}
89
82CCSGNOMEIntegrationGSettingsWrapperFactory *90CCSGNOMEIntegrationGSettingsWrapperFactory *
83ccsGNOMEIntegrationGSettingsWrapperDefaultImplNew (CCSObjectAllocationInterface *ai)91ccsGNOMEIntegrationGSettingsWrapperDefaultImplNew (CCSObjectAllocationInterface *ai)
84{92{
@@ -279,6 +287,8 @@
279 if (priv->pluginsToSettingNameGNOMENameHashTable)287 if (priv->pluginsToSettingNameGNOMENameHashTable)
280 g_hash_table_unref (priv->pluginsToSettingNameGNOMENameHashTable);288 g_hash_table_unref (priv->pluginsToSettingNameGNOMENameHashTable);
281289
290 ccsGNOMEIntegrationGSettingsWrapperDefaultImplFree (priv->wrapperFactory);
291
282 ccsObjectFinalize (factory);292 ccsObjectFinalize (factory);
283 (*factory->object.object_allocation->free_) (factory->object.object_allocation->allocator, factory);293 (*factory->object.object_allocation->free_) (factory->object.object_allocation->allocator, factory);
284}294}
@@ -318,6 +328,8 @@
318 ccsObjectSetPrivate (factory, (CCSPrivate *) priv);328 ccsObjectSetPrivate (factory, (CCSPrivate *) priv);
319 ccsObjectAddInterface (factory, (const CCSInterface *) &ccsGSettingsIntegratedSettingFactoryInterface, GET_INTERFACE_TYPE (CCSIntegratedSettingFactoryInterface));329 ccsObjectAddInterface (factory, (const CCSInterface *) &ccsGSettingsIntegratedSettingFactoryInterface, GET_INTERFACE_TYPE (CCSIntegratedSettingFactoryInterface));
320330
331 ccsObjectRef (factory);
332
321 return factory;333 return factory;
322}334}
323335
324336
=== modified file 'compizconfig/integration/gnome/gsettings/tests/compizconfig_test_ccs_gnome_gsettings_integrated_setting.cpp'
--- compizconfig/integration/gnome/gsettings/tests/compizconfig_test_ccs_gnome_gsettings_integrated_setting.cpp 2012-09-25 08:46:22 +0000
+++ compizconfig/integration/gnome/gsettings/tests/compizconfig_test_ccs_gnome_gsettings_integrated_setting.cpp 2012-09-25 08:46:22 +0000
@@ -43,6 +43,7 @@
43using ::testing::ValuesIn;43using ::testing::ValuesIn;
44using ::testing::Values;44using ::testing::Values;
45using ::testing::Eq;45using ::testing::Eq;
46using ::testing::WithArgs;
46using ::testing::_;47using ::testing::_;
4748
48namespace compiz49namespace compiz
@@ -103,6 +104,7 @@
103 ValueGenerator valueGenerator;104 ValueGenerator valueGenerator;
104 Expectation expectation;105 Expectation expectation;
105 CCSSettingType settingType;106 CCSSettingType settingType;
107 CCSSettingType returnType;
106 };108 };
107109
108 namespace impl110 namespace impl
@@ -114,10 +116,10 @@
114116
115 ccit::GSettingsIntegratedSettingInfo settingsInfo[] =117 ccit::GSettingsIntegratedSettingInfo settingsInfo[] =
116 {118 {
117 { vg::i, cvg::integer, ex::integer, TypeInt },119 { vg::i, cvg::integer, ex::integer, TypeInt, TypeInt },
118 { vg::b, cvg::boolean, ex::boolean, TypeBool },120 { vg::b, cvg::boolean, ex::boolean, TypeBool, TypeBool },
119 { vg::s, cvg::string, ex::string, TypeString },121 { vg::s, cvg::string, ex::string, TypeString, TypeString },
120 { vg::as, cvg::key, ex::key, TypeKey }122 { vg::as, cvg::key, ex::key, TypeKey, TypeString }
121 };123 };
122 }124 }
123 }125 }
@@ -361,6 +363,7 @@
361 const CCSSettingType createSettingType =363 const CCSSettingType createSettingType =
362 std::tr1::get <0> (GetParam ());364 std::tr1::get <0> (GetParam ());
363365
366 /* The GSettings Integrated setting takes ownership of these */
364 CCSIntegratedSettingInfo *integratedSetting = ccsSharedIntegratedSettingInfoNew (keyName.c_str (),367 CCSIntegratedSettingInfo *integratedSetting = ccsSharedIntegratedSettingInfoNew (keyName.c_str (),
365 keyName.c_str (),368 keyName.c_str (),
366 integratedSettingInfo.settingType,369 integratedSettingInfo.settingType,
@@ -370,14 +373,15 @@
370 specialType,373 specialType,
371 keyName.c_str (),374 keyName.c_str (),
372 &ccsDefaultObjectAllocator);375 &ccsDefaultObjectAllocator);
373 CCSIntegratedSetting *gsettingsIntegrated = ccsGSettingsIntegratedSettingNew (gnomeIntegratedSetting,376 boost::shared_ptr <CCSIntegratedSetting> gsettingsIntegrated (AutoDestroy (ccsGSettingsIntegratedSettingNew (gnomeIntegratedSetting,
374 mWrapper.get (),377 mWrapper.get (),
375 &ccsDefaultObjectAllocator);378 &ccsDefaultObjectAllocator),
379 ccsIntegratedSettingUnref));
376380
377 GVariant *variant = (*integratedSettingInfo.variantGenerator) ();381 GVariant *variant = (*integratedSettingInfo.variantGenerator) ();
378 EXPECT_CALL (*mWrapperMock, getValue (Eq (keyName))).WillOnce (Return (variant));382 EXPECT_CALL (*mWrapperMock, getValue (Eq (keyName))).WillOnce (Return (variant));
379383
380 CCSSettingValue *value = ccsIntegratedSettingReadValue (gsettingsIntegrated, createSettingType);384 CCSSettingValue *value = ccsIntegratedSettingReadValue (gsettingsIntegrated.get (), createSettingType);
381385
382 if (createSettingType == integratedSettingInfo.settingType)386 if (createSettingType == integratedSettingInfo.settingType)
383 (*integratedSettingInfo.expectation) (value);387 (*integratedSettingInfo.expectation) (value);
@@ -385,7 +389,12 @@
385 EXPECT_THAT (value, IsNull ());389 EXPECT_THAT (value, IsNull ());
386390
387 if (value)391 if (value)
388 ccsFreeSettingValueWithType (value, integratedSettingInfo.settingType);392 ccsFreeSettingValueWithType (value, integratedSettingInfo.returnType);
393}
394
395ACTION (FreeVariant)
396{
397 g_variant_unref (arg0);
389}398}
390399
391TEST_P (CCSGSettingsIntegratedSettingTest, MatchedTypesReturnValueMismatchedTypesResetOrWrite)400TEST_P (CCSGSettingsIntegratedSettingTest, MatchedTypesReturnValueMismatchedTypesResetOrWrite)
@@ -405,14 +414,15 @@
405 specialType,414 specialType,
406 keyName.c_str (),415 keyName.c_str (),
407 &ccsDefaultObjectAllocator);416 &ccsDefaultObjectAllocator);
408 CCSIntegratedSetting *gsettingsIntegrated = ccsGSettingsIntegratedSettingNew (gnomeIntegratedSetting,417 boost::shared_ptr <CCSIntegratedSetting> gsettingsIntegrated (AutoDestroy (ccsGSettingsIntegratedSettingNew (gnomeIntegratedSetting,
409 mWrapper.get (),418 mWrapper.get (),
410 &ccsDefaultObjectAllocator);419 &ccsDefaultObjectAllocator),
420 ccsIntegratedSettingUnref));
411421
412 boost::shared_ptr <CCSSettingValue> value ((*integratedSettingInfo.valueGenerator) (),422 boost::shared_ptr <CCSSettingValue> value ((*integratedSettingInfo.valueGenerator) (),
413 boost::bind (ccsFreeSettingValueWithType,423 boost::bind (ccsFreeSettingValueWithType,
414 _1,424 _1,
415 integratedSettingInfo.settingType));425 integratedSettingInfo.returnType));
416 boost::shared_ptr <GVariant> variant = AutoDestroy (g_variant_ref ((*integratedSettingInfo.variantGenerator) ()),426 boost::shared_ptr <GVariant> variant = AutoDestroy (g_variant_ref ((*integratedSettingInfo.variantGenerator) ()),
417 g_variant_unref);427 g_variant_unref);
418 boost::shared_ptr <GVariant> newVariant = AutoDestroy (ccvg::fromValue (value.get (),428 boost::shared_ptr <GVariant> newVariant = AutoDestroy (ccvg::fromValue (value.get (),
@@ -421,11 +431,12 @@
421 EXPECT_CALL (*mWrapperMock, getValue (Eq (keyName))).WillOnce (Return (variant.get ()));431 EXPECT_CALL (*mWrapperMock, getValue (Eq (keyName))).WillOnce (Return (variant.get ()));
422432
423 if (createSettingType == integratedSettingInfo.settingType)433 if (createSettingType == integratedSettingInfo.settingType)
424 EXPECT_CALL (*mWrapperMock, setValue (Eq (keyName), VariantEqual (newVariant.get ())));434 EXPECT_CALL (*mWrapperMock, setValue (Eq (keyName), VariantEqual (newVariant.get ())))
435 .WillOnce (WithArgs <1> (FreeVariant ()));
425 else436 else
426 EXPECT_CALL (*mWrapperMock, resetKey (Eq (keyName)));437 EXPECT_CALL (*mWrapperMock, resetKey (Eq (keyName)));
427438
428 ccsIntegratedSettingWriteValue (gsettingsIntegrated, value.get (), createSettingType);439 ccsIntegratedSettingWriteValue (gsettingsIntegrated.get (), value.get (), createSettingType);
429}440}
430441
431INSTANTIATE_TEST_CASE_P (CCSGSettingsIntegratedSettingTestMismatchedValues, CCSGSettingsIntegratedSettingTest,442INSTANTIATE_TEST_CASE_P (CCSGSettingsIntegratedSettingTestMismatchedValues, CCSGSettingsIntegratedSettingTest,
432443
=== modified file 'compizconfig/libcompizconfig/src/bindings.c'
--- compizconfig/libcompizconfig/src/bindings.c 2012-07-29 10:11:30 +0000
+++ compizconfig/libcompizconfig/src/bindings.c 2012-09-25 08:46:22 +0000
@@ -219,9 +219,9 @@
219219
220 if (button->button)220 if (button->button)
221 {221 {
222 char buttonStr[256];222 char buttonStr[256];
223 snprintf (buttonStr, 256, "Button%d", button->button);223 snprintf (buttonStr, 256, "Button%d", button->button);
224 binding = stringAppend (binding, buttonStr);224 binding = stringAppend (binding, buttonStr);
225 }225 }
226226
227 if (!binding)227 if (!binding)
228228
=== removed file 'compizconfig/tests/compizconfig_ccs_list_wrapper.h'
--- compizconfig/tests/compizconfig_ccs_list_wrapper.h 2012-09-25 08:46:22 +0000
+++ compizconfig/tests/compizconfig_ccs_list_wrapper.h 1970-01-01 00:00:00 +0000
@@ -1,163 +0,0 @@
1/*
2 * Compiz configuration system library
3 *
4 * Copyright (C) 2012 Canonical Ltd.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 *
20 * Authored By:
21 * Sam Spilsbury <sam.spilsbury@canonical.com>
22 */
23#ifndef _COMPIZCONFIG_CCS_LIST_WRAPPER_H
24#define _COMPIZCONFIG_CCS_LIST_WRAPPER_H
25
26#include <ccs-defs.h>
27#include <ccs-setting-types.h>
28
29#include <boost/shared_ptr.hpp>
30#include <boost/noncopyable.hpp>
31
32typedef struct _CCSSettingValueList * CCSSettingValueList;
33typedef struct _CCSSetting CCSSetting;
34typedef union _CCSSettingInfo CCSSettingInfo;
35typedef struct _CCSSettingValue CCSSettingValue;
36
37namespace compiz
38{
39 namespace config
40 {
41 template <typename ListType, typename DataType>
42 class ListWrapper :
43 boost::noncopyable
44 {
45 public:
46
47 virtual ~ListWrapper () {}
48
49 virtual ListWrapper<ListType, DataType> & append (const DataType &) = 0;
50 virtual ListWrapper<ListType, DataType> & remove (const DataType &) = 0;
51
52 virtual operator const ListType & () const = 0;
53 virtual operator ListType & () = 0;
54 };
55
56 namespace impl
57 {
58 namespace cc = compiz::config;
59 namespace cci = compiz::config::impl;
60
61 typedef enum _ListStorageType
62 {
63 Shallow = 0,
64 Deep = 1
65 } ListStorageType;
66
67 template <typename ListType, typename DataType>
68 class ListWrapper :
69 public cc::ListWrapper <ListType, DataType>
70 {
71 public:
72
73 typedef ListType (*ListTypeFreeFunc) (ListType, Bool);
74 typedef ListType (*ListTypeAppendFunc) (ListType, DataType);
75 typedef ListType (*ListTypeRemoveFunc) (ListType, DataType, Bool);
76
77 ListWrapper (const ListType &list,
78 ListTypeFreeFunc freeFunc,
79 ListTypeAppendFunc appendFunc,
80 ListTypeRemoveFunc removeFunc,
81 ListStorageType storageType) :
82 mList (list),
83 mFree (freeFunc),
84 mAppend (appendFunc),
85 mRemove (removeFunc),
86 mStorageType (storageType)
87 {
88 };
89
90 cc::ListWrapper<ListType, DataType> & append (DataType const &data)
91 {
92 mList = (*mAppend) (mList, data);
93 return *this;
94 }
95
96 cc::ListWrapper<ListType, DataType> & remove (DataType const &data)
97 {
98 Bool freeObj = (mStorageType == Deep);
99 mList = (*mRemove) (mList, data, freeObj);
100 return *this;
101 }
102
103 operator const ListType & () const
104 {
105 return mList;
106 }
107
108 operator ListType & ()
109 {
110 return mList;
111 }
112
113 ~ListWrapper ()
114 {
115 Bool freeObj = (mStorageType == Deep);
116
117 (*mFree) (mList, freeObj);
118 }
119
120 private:
121
122 ListType mList;
123 ListTypeFreeFunc mFree;
124 ListTypeAppendFunc mAppend;
125 ListTypeRemoveFunc mRemove;
126 ListStorageType mStorageType;
127 };
128
129 class PrivateSettingValueListWrapper;
130 class SettingValueListWrapper :
131 public compiz::config::ListWrapper <CCSSettingValueList, CCSSettingValue *>
132 {
133 public:
134
135 typedef boost::shared_ptr <SettingValueListWrapper> Ptr;
136 typedef compiz::config::ListWrapper <CCSSettingValueList, CCSSettingValue *> InternalWrapper;
137 typedef compiz::config::impl::ListWrapper <CCSSettingValueList, CCSSettingValue *> InternalWrapperImpl;
138
139 SettingValueListWrapper (CCSSettingValueList list,
140 ListStorageType storageType,
141 CCSSettingType type,
142 const boost::shared_ptr <CCSSettingInfo> &listInfo,
143 const boost::shared_ptr <CCSSetting> &settingReference);
144
145 CCSSettingType type ();
146
147 InternalWrapper & append (CCSSettingValue * const &value);
148 InternalWrapper & remove (CCSSettingValue * const &value);
149 operator const CCSSettingValueList & () const;
150 operator CCSSettingValueList & ();
151 const boost::shared_ptr <CCSSetting> & setting ();
152
153 private:
154
155 boost::shared_ptr <PrivateSettingValueListWrapper> priv;
156 };
157 }
158 }
159}
160
161
162
163#endif

Subscribers

People subscribed via source and target branches