Imported Upstream version 2.54.0 upstream/2.54.0
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 7 Sep 2020 07:20:18 +0000 (00:20 -0700)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 7 Sep 2020 07:20:18 +0000 (00:20 -0700)
560 files changed:
.gitignore
COPYING
MSVC_Net2013/compose.vcxproj [moved from MSVC_Net2017/compose.vcxproj with 98% similarity]
MSVC_Net2013/compose.vcxproj.filters [moved from MSVC_Net2017/compose.vcxproj.filters with 100% similarity]
MSVC_Net2013/dispatcher.vcxproj [moved from MSVC_Net2017/dispatcher.vcxproj with 98% similarity]
MSVC_Net2013/dispatcher.vcxproj.filters [moved from MSVC_Net2017/dispatcher.vcxproj.filters with 100% similarity]
MSVC_Net2013/dispatcher2.vcxproj [moved from MSVC_Net2017/dispatcher2.vcxproj with 98% similarity]
MSVC_Net2013/dispatcher2.vcxproj.filters [moved from MSVC_Net2017/dispatcher2.vcxproj.filters with 100% similarity]
MSVC_Net2013/filelist.am [moved from MSVC_Net2017/filelist.am with 98% similarity]
MSVC_Net2013/gendef.vcxproj [moved from MSVC_Net2017/gendef.vcxproj with 97% similarity]
MSVC_Net2013/gendef.vcxproj.filters [moved from MSVC_Net2017/gendef.vcxproj.filters with 100% similarity]
MSVC_Net2013/gendef/gendef.cc [moved from MSVC_Net2017/gendef/gendef.cc with 100% similarity]
MSVC_Net2013/giomm.vcxproj [moved from MSVC_Net2017/giomm.vcxproj with 98% similarity]
MSVC_Net2013/giomm.vcxproj.filters [moved from MSVC_Net2017/giomm.vcxproj.filters with 99% similarity]
MSVC_Net2013/giomm/giomm.rc.in [moved from MSVC_Net2017/giomm/giomm.rc.in with 100% similarity]
MSVC_Net2013/giomm_simple.vcxproj [moved from MSVC_Net2017/giomm_simple.vcxproj with 98% similarity]
MSVC_Net2013/giomm_simple.vcxproj.filters [moved from MSVC_Net2017/giomm_simple.vcxproj.filters with 100% similarity]
MSVC_Net2013/glibmm-build-defines.props [moved from MSVC_Net2017/glibmm-build-defines.props with 78% similarity]
MSVC_Net2013/glibmm-install.props [moved from MSVC_Net2017/glibmm-install.props with 96% similarity]
MSVC_Net2013/glibmm-version-paths.props [moved from MSVC_Net2017/glibmm-version-paths.props with 88% similarity]
MSVC_Net2013/glibmm.sln [moved from MSVC_Net2017/glibmm.sln with 88% similarity]
MSVC_Net2013/glibmm.vcxproj [moved from MSVC_Net2017/glibmm.vcxproj with 93% similarity]
MSVC_Net2013/glibmm.vcxproj.filters [moved from MSVC_Net2017/glibmm.vcxproj.filters with 87% similarity]
MSVC_Net2013/glibmm/glibmm.rc.in [moved from MSVC_Net2017/glibmm/glibmm.rc.in with 100% similarity]
MSVC_Net2013/glibmm_value.vcxproj [moved from MSVC_Net2017/glibmm_value.vcxproj with 98% similarity]
MSVC_Net2013/glibmm_value.vcxproj.filters [moved from MSVC_Net2017/glibmm_value.vcxproj.filters with 100% similarity]
MSVC_Net2013/install.vcxproj [moved from MSVC_Net2017/install.vcxproj with 97% similarity]
MSVC_Net2013/keyfile.vcxproj [moved from MSVC_Net2017/keyfile.vcxproj with 98% similarity]
MSVC_Net2013/keyfile.vcxproj.filters [moved from MSVC_Net2017/keyfile.vcxproj.filters with 100% similarity]
MSVC_Net2013/markup.vcxproj [moved from MSVC_Net2017/markup.vcxproj with 98% similarity]
MSVC_Net2013/markup.vcxproj.filters [moved from MSVC_Net2017/markup.vcxproj.filters with 100% similarity]
MSVC_Net2013/options.vcxproj [moved from MSVC_Net2017/options.vcxproj with 98% similarity]
MSVC_Net2013/options.vcxproj.filters [moved from MSVC_Net2017/options.vcxproj.filters with 100% similarity]
MSVC_Net2013/properties.vcxproj [moved from MSVC_Net2017/properties.vcxproj with 98% similarity]
MSVC_Net2013/properties.vcxproj.filters [moved from MSVC_Net2017/properties.vcxproj.filters with 100% similarity]
MSVC_Net2013/regex.vcxproj [moved from MSVC_Net2017/regex.vcxproj with 98% similarity]
MSVC_Net2013/regex.vcxproj.filters [moved from MSVC_Net2017/regex.vcxproj.filters with 100% similarity]
MSVC_Net2013/resolver.vcxproj [moved from MSVC_Net2017/resolver.vcxproj with 98% similarity]
MSVC_Net2013/resolver.vcxproj.filters [moved from MSVC_Net2017/resolver.vcxproj.filters with 100% similarity]
MSVC_Net2013/socket-client.vcxproj [moved from MSVC_Net2017/socket-client.vcxproj with 98% similarity]
MSVC_Net2013/socket-client.vcxproj.filters [moved from MSVC_Net2017/socket-client.vcxproj.filters with 100% similarity]
MSVC_Net2013/socket-server.vcxproj [moved from MSVC_Net2017/socket-server.vcxproj with 98% similarity]
MSVC_Net2013/socket-server.vcxproj.filters [moved from MSVC_Net2017/socket-server.vcxproj.filters with 100% similarity]
MSVC_Net2013/thread.vcxproj [moved from MSVC_Net2017/thread.vcxproj with 98% similarity]
MSVC_Net2013/thread.vcxproj.filters [moved from MSVC_Net2017/thread.vcxproj.filters with 100% similarity]
MSVC_Net2013/threadpool.vcxproj [moved from MSVC_Net2017/threadpool.vcxproj with 98% similarity]
MSVC_Net2013/threadpool.vcxproj.filters [moved from MSVC_Net2017/threadpool.vcxproj.filters with 100% similarity]
Makefile.am
NEWS
README.win32
build/dk-feature.m4
configure.ac
docs/Makefile_web.am_fragment
examples/Makefile.am
examples/child_watch/main.cc
examples/compose/main.cc
examples/dbus/client_bus_listnames.cc
examples/dbus/server_without_bus.cc
examples/dbus/session_bus_service.cc
examples/iochannel_stream/fdstream.cc
examples/iochannel_stream/fdstream.h
examples/iochannel_stream/main.cc
examples/keyfile/main.cc
examples/markup/parser.cc
examples/network/resolver.cc
examples/network/socket-client.cc
examples/network/socket-server.cc
examples/options/main.cc
examples/properties/properties_example.cc
examples/regex/main.cc
examples/thread/thread.cc [new file with mode: 0644]
examples/thread/threadpool.cc [new file with mode: 0644]
gio/giomm.h
gio/giomm/contenttype.cc
gio/giomm/contenttype.h
gio/giomm/init.cc
gio/giomm/init.h
gio/giomm/slot_async.cc
gio/giomm/slot_async.h
gio/giomm/socketsource.cc
gio/giomm/socketsource.h
gio/giomm/wrap_init.h
gio/src/action.ccg
gio/src/action.hg
gio/src/actiongroup.ccg
gio/src/actiongroup.hg
gio/src/actionmap.ccg
gio/src/actionmap.hg
gio/src/appinfo.ccg
gio/src/appinfo.hg
gio/src/applaunchcontext.ccg
gio/src/applaunchcontext.hg
gio/src/application.ccg
gio/src/application.hg
gio/src/applicationcommandline.ccg
gio/src/applicationcommandline.hg
gio/src/asyncinitable.ccg
gio/src/asyncinitable.hg
gio/src/asyncresult.ccg
gio/src/asyncresult.hg
gio/src/bufferedinputstream.ccg
gio/src/bufferedinputstream.hg
gio/src/bufferedoutputstream.ccg
gio/src/bufferedoutputstream.hg
gio/src/cancellable.ccg
gio/src/cancellable.hg
gio/src/charsetconverter.ccg
gio/src/charsetconverter.hg
gio/src/converter.ccg
gio/src/converter.hg
gio/src/converterinputstream.ccg
gio/src/converterinputstream.hg
gio/src/converteroutputstream.ccg
gio/src/converteroutputstream.hg
gio/src/credentials.ccg
gio/src/credentials.hg
gio/src/datainputstream.ccg
gio/src/datainputstream.hg
gio/src/dataoutputstream.ccg
gio/src/dataoutputstream.hg
gio/src/dbusactiongroup.ccg
gio/src/dbusactiongroup.hg
gio/src/dbusaddress.ccg
gio/src/dbusaddress.hg
gio/src/dbusauthobserver.ccg
gio/src/dbusauthobserver.hg
gio/src/dbusconnection.ccg
gio/src/dbusconnection.hg
gio/src/dbuserror.ccg
gio/src/dbuserror.hg
gio/src/dbuserrorutils.ccg
gio/src/dbuserrorutils.hg
gio/src/dbusinterface.ccg
gio/src/dbusinterface.hg
gio/src/dbusinterfaceskeleton.ccg
gio/src/dbusinterfaceskeleton.hg
gio/src/dbusinterfacevtable.ccg
gio/src/dbusinterfacevtable.hg
gio/src/dbusintrospection.ccg
gio/src/dbusintrospection.hg
gio/src/dbusmenumodel.ccg
gio/src/dbusmenumodel.hg
gio/src/dbusmessage.ccg
gio/src/dbusmessage.hg
gio/src/dbusmethodinvocation.ccg
gio/src/dbusmethodinvocation.hg
gio/src/dbusobject.ccg
gio/src/dbusobject.hg
gio/src/dbusownname.ccg
gio/src/dbusownname.hg
gio/src/dbusproxy.ccg
gio/src/dbusproxy.hg
gio/src/dbusserver.ccg
gio/src/dbusserver.hg
gio/src/dbussubtreevtable.ccg
gio/src/dbussubtreevtable.hg
gio/src/dbusutils.ccg
gio/src/dbusutils.hg
gio/src/dbuswatchname.ccg
gio/src/dbuswatchname.hg
gio/src/desktopappinfo.ccg
gio/src/desktopappinfo.hg
gio/src/drive.ccg
gio/src/drive.hg
gio/src/emblem.ccg
gio/src/emblem.hg
gio/src/emblemedicon.ccg
gio/src/emblemedicon.hg
gio/src/enums.ccg
gio/src/enums.hg
gio/src/error.ccg
gio/src/error.hg
gio/src/file.ccg
gio/src/file.hg
gio/src/fileattributeinfo.ccg
gio/src/fileattributeinfo.hg
gio/src/fileattributeinfolist.ccg
gio/src/fileattributeinfolist.hg
gio/src/fileenumerator.ccg
gio/src/fileenumerator.hg
gio/src/fileicon.ccg
gio/src/fileicon.hg
gio/src/fileinfo.ccg
gio/src/fileinfo.hg
gio/src/fileinputstream.ccg
gio/src/fileinputstream.hg
gio/src/fileiostream.ccg
gio/src/fileiostream.hg
gio/src/filelist.am
gio/src/filemonitor.ccg
gio/src/filemonitor.hg
gio/src/filenamecompleter.ccg
gio/src/filenamecompleter.hg
gio/src/fileoutputstream.ccg
gio/src/fileoutputstream.hg
gio/src/filterinputstream.ccg
gio/src/filterinputstream.hg
gio/src/filteroutputstream.ccg
gio/src/filteroutputstream.hg
gio/src/gio_docs_override.xml
gio/src/gio_enums.defs
gio/src/gio_enums.defs.patch
gio/src/gio_signals.defs
gio/src/gio_signals.defs.patch
gio/src/gio_vfuncs.defs
gio/src/icon.ccg
gio/src/icon.hg
gio/src/inetaddress.ccg
gio/src/inetaddress.hg
gio/src/inetsocketaddress.ccg
gio/src/inetsocketaddress.hg
gio/src/initable.ccg
gio/src/initable.hg
gio/src/inputstream.ccg
gio/src/inputstream.hg
gio/src/iostream.ccg
gio/src/iostream.hg
gio/src/listmodel.ccg
gio/src/listmodel.hg
gio/src/liststore.ccg
gio/src/liststore.hg
gio/src/loadableicon.ccg
gio/src/loadableicon.hg
gio/src/memoryinputstream.ccg
gio/src/memoryinputstream.hg
gio/src/memoryoutputstream.ccg
gio/src/memoryoutputstream.hg
gio/src/menu.ccg
gio/src/menu.hg
gio/src/menuattributeiter.ccg
gio/src/menuattributeiter.hg
gio/src/menuitem.ccg
gio/src/menuitem.hg
gio/src/menulinkiter.ccg
gio/src/menulinkiter.hg
gio/src/menumodel.ccg
gio/src/menumodel.hg
gio/src/mount.ccg
gio/src/mount.hg
gio/src/mountoperation.ccg
gio/src/mountoperation.hg
gio/src/networkaddress.ccg
gio/src/networkaddress.hg
gio/src/networkmonitor.ccg
gio/src/networkmonitor.hg
gio/src/networkservice.ccg
gio/src/networkservice.hg
gio/src/notification.hg
gio/src/outputstream.ccg
gio/src/outputstream.hg
gio/src/permission.ccg
gio/src/permission.hg
gio/src/pollableinputstream.ccg
gio/src/pollableinputstream.hg
gio/src/pollableoutputstream.ccg
gio/src/pollableoutputstream.hg
gio/src/propertyaction.hg [deleted file]
gio/src/proxy.ccg
gio/src/proxy.hg
gio/src/proxyaddress.ccg
gio/src/proxyaddress.hg
gio/src/proxyresolver.ccg
gio/src/proxyresolver.hg
gio/src/remoteactiongroup.ccg
gio/src/remoteactiongroup.hg
gio/src/resolver.ccg
gio/src/resolver.hg
gio/src/resource.ccg
gio/src/resource.hg
gio/src/seekable.ccg
gio/src/seekable.hg
gio/src/settings.ccg
gio/src/settings.hg
gio/src/settingsschema.ccg
gio/src/settingsschema.hg
gio/src/settingsschemakey.ccg
gio/src/settingsschemakey.hg
gio/src/settingsschemasource.ccg
gio/src/settingsschemasource.hg
gio/src/simpleaction.ccg
gio/src/simpleaction.hg
gio/src/simpleactiongroup.ccg
gio/src/simpleactiongroup.hg
gio/src/simplepermission.ccg
gio/src/simplepermission.hg
gio/src/socket.ccg
gio/src/socket.hg
gio/src/socketaddress.ccg
gio/src/socketaddress.hg
gio/src/socketaddressenumerator.ccg
gio/src/socketaddressenumerator.hg
gio/src/socketclient.ccg
gio/src/socketclient.hg
gio/src/socketconnectable.ccg
gio/src/socketconnectable.hg
gio/src/socketconnection.ccg
gio/src/socketconnection.hg
gio/src/socketcontrolmessage.ccg
gio/src/socketcontrolmessage.hg
gio/src/socketlistener.ccg
gio/src/socketlistener.hg
gio/src/socketservice.ccg
gio/src/socketservice.hg
gio/src/srvtarget.ccg
gio/src/srvtarget.hg
gio/src/tcpconnection.ccg
gio/src/tcpconnection.hg
gio/src/tcpwrapperconnection.ccg
gio/src/tcpwrapperconnection.hg
gio/src/themedicon.ccg
gio/src/themedicon.hg
gio/src/threadedsocketservice.ccg
gio/src/threadedsocketservice.hg
gio/src/tlscertificate.ccg
gio/src/tlscertificate.hg
gio/src/tlsclientconnection.ccg
gio/src/tlsclientconnection.hg
gio/src/tlsconnection.ccg
gio/src/tlsconnection.hg
gio/src/tlsdatabase.ccg
gio/src/tlsdatabase.hg
gio/src/tlsfiledatabase.ccg
gio/src/tlsfiledatabase.hg
gio/src/tlsinteraction.ccg
gio/src/tlsinteraction.hg
gio/src/tlspassword.ccg
gio/src/tlspassword.hg
gio/src/tlsserverconnection.ccg
gio/src/tlsserverconnection.hg
gio/src/unixconnection.ccg
gio/src/unixconnection.hg
gio/src/unixcredentialsmessage.ccg
gio/src/unixcredentialsmessage.hg
gio/src/unixfdlist.ccg
gio/src/unixfdlist.hg
gio/src/unixfdmessage.ccg
gio/src/unixfdmessage.hg
gio/src/unixinputstream.ccg
gio/src/unixinputstream.hg
gio/src/unixmount.ccg
gio/src/unixmount.hg
gio/src/unixoutputstream.ccg
gio/src/unixoutputstream.hg
gio/src/unixsocketaddress.ccg
gio/src/unixsocketaddress.hg
gio/src/volume.ccg
gio/src/volume.hg
gio/src/volumemonitor.ccg
gio/src/volumemonitor.hg
gio/src/zlibcompressor.ccg
gio/src/zlibcompressor.hg
gio/src/zlibdecompressor.ccg
gio/src/zlibdecompressor.hg
glib/glibmm.h
glib/glibmm.pc.in
glib/glibmm/arrayhandle.cc [new file with mode: 0644]
glib/glibmm/arrayhandle.h [new file with mode: 0644]
glib/glibmm/base64.cc
glib/glibmm/base64.h
glib/glibmm/class.cc
glib/glibmm/class.h
glib/glibmm/containerhandle_shared.h
glib/glibmm/containers.cc [new file with mode: 0644]
glib/glibmm/containers.h [new file with mode: 0644]
glib/glibmm/debug.cc
glib/glibmm/debug.h
glib/glibmm/dispatcher.cc
glib/glibmm/dispatcher.h
glib/glibmm/error.cc
glib/glibmm/error.h
glib/glibmm/exception.cc
glib/glibmm/exception.h
glib/glibmm/exceptionhandler.cc
glib/glibmm/exceptionhandler.h
glib/glibmm/extraclassinit.h [deleted file]
glib/glibmm/filelist.am
glib/glibmm/helperlist.h [new file with mode: 0644]
glib/glibmm/i18n-lib.h
glib/glibmm/i18n.h
glib/glibmm/init.cc
glib/glibmm/init.h
glib/glibmm/interface.cc
glib/glibmm/interface.h
glib/glibmm/listhandle.h [new file with mode: 0644]
glib/glibmm/main.cc
glib/glibmm/main.h
glib/glibmm/object.cc
glib/glibmm/object.h
glib/glibmm/objectbase.cc
glib/glibmm/objectbase.h
glib/glibmm/pattern.cc
glib/glibmm/pattern.h
glib/glibmm/priorities.h
glib/glibmm/property.cc
glib/glibmm/property.h
glib/glibmm/propertyproxy.cc
glib/glibmm/propertyproxy.h
glib/glibmm/propertyproxy_base.cc
glib/glibmm/propertyproxy_base.h
glib/glibmm/quark.cc
glib/glibmm/quark.h
glib/glibmm/random.cc
glib/glibmm/random.h
glib/glibmm/refptr.h
glib/glibmm/sarray.cc [new file with mode: 0644]
glib/glibmm/sarray.h [moved from gio/src/propertyaction.ccg with 54% similarity]
glib/glibmm/signalproxy.cc
glib/glibmm/signalproxy.h
glib/glibmm/signalproxy_connectionnode.cc
glib/glibmm/signalproxy_connectionnode.h
glib/glibmm/slisthandle.h [new file with mode: 0644]
glib/glibmm/streamiochannel.cc [new file with mode: 0644]
glib/glibmm/streamiochannel.h [new file with mode: 0644]
glib/glibmm/stringutils.cc
glib/glibmm/stringutils.h
glib/glibmm/threadpool.cc [new file with mode: 0644]
glib/glibmm/threadpool.h [new file with mode: 0644]
glib/glibmm/timer.cc
glib/glibmm/timer.h
glib/glibmm/timeval.cc
glib/glibmm/timeval.h
glib/glibmm/ustring.cc
glib/glibmm/ustring.h
glib/glibmm/utility.cc
glib/glibmm/utility.h
glib/glibmm/value.cc
glib/glibmm/value.h
glib/glibmm/value_custom.cc
glib/glibmm/value_custom.h
glib/glibmm/variantdbusstring.cc [moved from glib/glibmm/extraclassinit.cc with 66% similarity]
glib/glibmm/variantdbusstring.h [new file with mode: 0644]
glib/glibmm/vectorutils.cc
glib/glibmm/vectorutils.h
glib/glibmm/weakref.h [new file with mode: 0644]
glib/glibmm/wrap.cc
glib/glibmm/wrap.h
glib/glibmm/wrap_init.h
glib/glibmmconfig.h.in
glib/src/balancedtree.hg
glib/src/binding.ccg
glib/src/binding.hg
glib/src/bytearray.ccg
glib/src/bytearray.hg
glib/src/bytes.ccg
glib/src/bytes.hg
glib/src/checksum.ccg
glib/src/checksum.hg
glib/src/convert.ccg
glib/src/convert.hg
glib/src/date.ccg
glib/src/date.hg
glib/src/datetime.ccg
glib/src/datetime.hg
glib/src/enums.ccg
glib/src/enums.hg
glib/src/filelist.am
glib/src/fileutils.ccg
glib/src/fileutils.hg
glib/src/glib_docs_override.xml
glib/src/glib_signals.defs
glib/src/iochannel.ccg
glib/src/iochannel.hg
glib/src/keyfile.ccg
glib/src/keyfile.hg
glib/src/markup.ccg
glib/src/markup.hg
glib/src/miscutils.ccg
glib/src/miscutils.hg
glib/src/module.ccg
glib/src/module.hg
glib/src/nodetree.hg
glib/src/optioncontext.ccg
glib/src/optioncontext.hg
glib/src/optionentry.ccg
glib/src/optionentry.hg
glib/src/optiongroup.ccg
glib/src/optiongroup.hg
glib/src/regex.ccg
glib/src/regex.hg
glib/src/shell.ccg
glib/src/shell.hg
glib/src/spawn.ccg
glib/src/spawn.hg
glib/src/template.macros.m4
glib/src/thread.ccg [new file with mode: 0644]
glib/src/thread.hg [new file with mode: 0644]
glib/src/threads.ccg [new file with mode: 0644]
glib/src/threads.hg [new file with mode: 0644]
glib/src/timezone.ccg
glib/src/timezone.hg
glib/src/unicode.ccg
glib/src/unicode.hg
glib/src/uriutils.ccg
glib/src/uriutils.hg
glib/src/value_basictypes.cc.m4
glib/src/value_basictypes.h.m4
glib/src/valuearray.ccg [new file with mode: 0644]
glib/src/valuearray.hg [new file with mode: 0644]
glib/src/variant.ccg
glib/src/variant.hg
glib/src/variant_basictypes.cc.m4
glib/src/variant_basictypes.h.m4
glib/src/variantdict.ccg
glib/src/variantdict.hg
glib/src/variantiter.ccg
glib/src/variantiter.hg
glib/src/varianttype.ccg
glib/src/varianttype.hg
tests/Makefile.am
tests/giomm_listmodel/main.cc
tests/giomm_stream_vfuncs/main.cc [deleted file]
tests/giomm_tls_client/main.cc
tests/glibmm_bool_arrayhandle/main.cc [new file with mode: 0644]
tests/glibmm_bool_vector/main.cc
tests/glibmm_date/main.cc
tests/glibmm_interface_move/main.cc
tests/glibmm_nodetree/main.cc
tests/glibmm_null_containerhandle/main.cc [new file with mode: 0644]
tests/glibmm_null_vectorutils/main.cc
tests/glibmm_object/main.cc [deleted file]
tests/glibmm_object/test_derived_object.h [deleted file]
tests/glibmm_object_move/main.cc
tests/glibmm_objectbase/main.cc [deleted file]
tests/glibmm_objectbase/test_derived_objectbase.h [deleted file]
tests/glibmm_objectbase_move/main.cc
tests/glibmm_refptr/main.cc
tests/glibmm_ustring_make_valid/main.cc [deleted file]
tests/glibmm_value/glibmm_value.cc [new file with mode: 0644]
tests/glibmm_value/main.cc
tests/glibmm_valuearray/main.cc [new file with mode: 0644]
tests/glibmm_variant/main.cc
tests/glibmm_vector/main.cc
tests/glibmm_weakref/main.cc [new file with mode: 0644]
tools/Makefile.am
tools/defs_fixer.pl
tools/enum.pl
tools/extra_defs_gen/generate_defs_gio.cc
tools/extra_defs_gen/generate_defs_glib.cc
tools/extra_defs_gen/generate_extra_defs.cc
tools/extra_defs_gen/generate_extra_defs.h
tools/gmmproc.in
tools/m4/base.m4
tools/m4/class_gobject.m4
tools/m4/class_interface.m4
tools/m4/class_opaque_refcounted.m4
tools/m4/convert_base.m4
tools/m4/convert_gio.m4
tools/m4/convert_glib.m4
tools/m4/enum.m4
tools/m4/method.m4
tools/m4/signal.m4
tools/pm/DocsParser.pm
tools/pm/Enum.pm
tools/pm/Function.pm
tools/pm/GtkDefs.pm
tools/pm/Output.pm
tools/pm/Property.pm
tools/pm/Util.pm
tools/pm/WrapParser.pm
tools/test_scripts/testheaders.sh

index 434a9a8..f66dece 100644 (file)
@@ -52,8 +52,8 @@ giommconfig.h
 /docs/reference/Doxyfile
 /docs/reference/doxygen.log
 /docs/reference/doxygen*.db
-/docs/reference/glibmm-*.devhelp2
-/docs/reference/glibmm-*.tag
+/docs/reference/glibmm-2.4.devhelp2
+/docs/reference/glibmm-2.4.tag
 /docs/reference/html/
 
 # examples/
@@ -75,6 +75,8 @@ giommconfig.h
 /examples/settings/gschemas.compiled
 /examples/thread/dispatcher
 /examples/thread/dispatcher2
+/examples/thread/thread
+/examples/thread/threadpool
 
 # gio/
 /gio/giomm-*.pc
@@ -137,6 +139,10 @@ giommconfig.h
 /glib/glibmm/shell.h
 /glib/glibmm/spawn.cc
 /glib/glibmm/spawn.h
+/glib/glibmm/thread.cc
+/glib/glibmm/thread.h
+/glib/glibmm/threads.cc
+/glib/glibmm/threads.h
 /glib/glibmm/timezone.cc
 /glib/glibmm/timezone.h
 /glib/glibmm/unicode.cc
@@ -145,6 +151,8 @@ giommconfig.h
 /glib/glibmm/uriutils.h
 /glib/glibmm/value_basictypes.cc
 /glib/glibmm/value_basictypes.h
+/glib/glibmm/valuearray.cc
+/glib/glibmm/valuearray.h
 /glib/glibmm/variant.cc
 /glib/glibmm/variant.h
 /glib/glibmm/variant_basictypes.cc
diff --git a/COPYING b/COPYING
index c4792dd..5e1f37e 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -3,7 +3,7 @@
                        Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -477,14 +477,13 @@ have at least the "copyright" line and a pointer to where the full
 notice is found.
 
 
-    <one line to give the library's name and a brief idea of what it
-does.>
+    <one line to give the library's name and a brief idea of what it does.>
     Copyright (C) <year>  <name of author>
 
     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.
+    version 2.1 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
@@ -493,7 +492,7 @@ does.>
 
     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., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 Also add information on how to contact you by electronic and paper
 mail.
similarity index 98%
rename from MSVC_Net2017/compose.vcxproj
rename to MSVC_Net2013/compose.vcxproj
index 38cb404..4775af3 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/dispatcher.vcxproj
rename to MSVC_Net2013/dispatcher.vcxproj
index 2e79b92..6c403c0 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/dispatcher2.vcxproj
rename to MSVC_Net2013/dispatcher2.vcxproj
index a9f8e25..db6a5fd 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/filelist.am
rename to MSVC_Net2013/filelist.am
index e22b371..a70124a 100644 (file)
@@ -1,6 +1,6 @@
 ## This file is part of glibmm.
 
-msvc_net2017_data =                    \
+msvc_net2013_data =                    \
        glibmm.sln                      \
        glibmm-build-defines.props      \
        glibmm-install.props            \
similarity index 97%
rename from MSVC_Net2017/gendef.vcxproj
rename to MSVC_Net2013/gendef.vcxproj
index bfc870b..62dbcc8 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/giomm.vcxproj
rename to MSVC_Net2013/giomm.vcxproj
index 419673a..bc4fc3d 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
     <ClCompile Include="..\gio\giomm\permission.cc" />
     <ClCompile Include="..\gio\giomm\pollableinputstream.cc" />
     <ClCompile Include="..\gio\giomm\pollableoutputstream.cc" />
-    <ClCompile Include="..\gio\giomm\propertyaction.cc" />
     <ClCompile Include="..\gio\giomm\proxy.cc" />
     <ClCompile Include="..\gio\giomm\proxyaddress.cc" />
     <ClCompile Include="..\gio\giomm\proxyresolver.cc" />
     <ClInclude Include="..\gio\giomm\permission.h" />
     <ClInclude Include="..\gio\giomm\pollableinputstream.h" />
     <ClInclude Include="..\gio\giomm\pollableoutputstream.h" />
-    <ClInclude Include="..\gio\giomm\propertyaction.h" />
     <ClInclude Include="..\gio\giomm\proxy.h" />
     <ClInclude Include="..\gio\giomm\proxyaddress.h" />
     <ClInclude Include="..\gio\giomm\proxyresolver.h" />
similarity index 99%
rename from MSVC_Net2017/giomm.vcxproj.filters
rename to MSVC_Net2013/giomm.vcxproj.filters
index 5ed29e3..4f01b13 100644 (file)
     <ClCompile Include="..\gio\giomm\permission.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\gio\giomm\pollableinputstream.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\gio\giomm\pollableoutputstream.cc"><Filter>Source Files</Filter></ClCompile>
-    <ClCompile Include="..\gio\giomm\propertyaction.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\gio\giomm\proxy.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\gio\giomm\proxyaddress.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\gio\giomm\proxyresolver.cc"><Filter>Source Files</Filter></ClCompile>
     <ClInclude Include="..\gio\giomm\permission.h"><Filter>Source Files</Filter></ClInclude>
     <ClInclude Include="..\gio\giomm\pollableinputstream.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\gio\giomm\pollableoutputstream.h"><Filter>Header Files</Filter></ClInclude>
-    <ClInclude Include="..\gio\giomm\propertyaction.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\gio\giomm\proxy.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\gio\giomm\proxyaddress.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\gio\giomm\proxyresolver.h"><Filter>Header Files</Filter></ClInclude>
similarity index 98%
rename from MSVC_Net2017/giomm_simple.vcxproj
rename to MSVC_Net2013/giomm_simple.vcxproj
index bb945b4..1eb6124 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 78%
rename from MSVC_Net2017/glibmm-build-defines.props
rename to MSVC_Net2013/glibmm-build-defines.props
index 91d6088..5cbde3c 100644 (file)
@@ -6,8 +6,8 @@
   <PropertyGroup Label="UserMacros">
     <GLibMMBuildDefs>SIZEOF_WCHAR_T=2;GLIBMM_BUILD</GLibMMBuildDefs>
     <GioMMBuildDefs>GIOMM_BUILD</GioMMBuildDefs>
-    <CPPDepLibsRelease>sigc-vc$(VSVer)0-$(SigCMajorVersion)_0.lib</CPPDepLibsRelease>
-    <CPPDepLibsDebug>sigc-vc$(VSVer)0-d-$(SigCMajorVersion)_0.lib</CPPDepLibsDebug>
+    <CPPDepLibsRelease>sigc-vc$(VSVer)0-2_0.lib</CPPDepLibsRelease>
+    <CPPDepLibsDebug>sigc-vc$(VSVer)0-d-2_0.lib</CPPDepLibsDebug>
   </PropertyGroup>
   <PropertyGroup>
     <_PropertySheetDisplayName>glibmmbuilddefinesprops</_PropertySheetDisplayName>
@@ -16,7 +16,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup>
     <ClCompile>
-      <AdditionalIncludeDirectories>.\glibmm;..;..\glib;$(GlibEtcInstallRoot)\include\sigc++-$(SigCMajorVersion).0;$(GlibEtcInstallRoot)\lib\sigc++-$(SigCMajorVersion).0\include;$(GlibEtcInstallRoot)\include\gio-win32-2.0;$(GlibEtcInstallRoot)\include\glib-2.0;$(GlibEtcInstallRoot)\lib\glib-2.0\include;$(GlibEtcInstallRoot)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.\glibmm;..;..\glib;$(GlibEtcInstallRoot)\include\sigc++-2.0;$(GlibEtcInstallRoot)\lib\sigc++-2.0\include;$(GlibEtcInstallRoot)\include\gio-win32-2.0;$(GlibEtcInstallRoot)\include\glib-2.0;$(GlibEtcInstallRoot)\lib\glib-2.0\include;$(GlibEtcInstallRoot)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <ForcedIncludeFiles>msvc_recommended_pragmas.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <AdditionalOptions>/d2Zi+ %(AdditionalOptions)</AdditionalOptions>
similarity index 96%
rename from MSVC_Net2017/glibmm-install.props
rename to MSVC_Net2013/glibmm-install.props
index e4f6339..f28a0c8 100644 (file)
@@ -25,6 +25,7 @@ mkdir $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\priva
 copy ..\glib\glibmm.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)
 copy ..\gio\giomm.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)
 
+copy ..\glib\glibmm\arrayhandle.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\balancedtree.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\base64.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\binding.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
@@ -33,6 +34,7 @@ copy ..\glib\glibmm\bytearray.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(A
 copy ..\glib\glibmm\checksum.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\class.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\containerhandle_shared.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\containers.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\convert.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\date.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\datetime.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
@@ -42,14 +44,15 @@ copy ..\glib\glibmm\dispatcher.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(
 copy ..\glib\glibmm\error.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\exception.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\exceptionhandler.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
-copy ..\glib\glibmm\extraclassinit.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\fileutils.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\helperlist.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\i18n-lib.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\i18n.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\init.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\interface.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\iochannel.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\keyfile.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\listhandle.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\main.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\markup.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\miscutils.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
@@ -69,11 +72,16 @@ copy ..\glib\glibmm\quark.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMi
 copy ..\glib\glibmm\random.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\refptr.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\regex.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\sarray.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\shell.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\signalproxy.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\signalproxy_connectionnode.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\slisthandle.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\spawn.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\streamiochannel.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\stringutils.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\threadpool.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\threads.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\timer.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\timeval.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\timezone.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
@@ -86,7 +94,9 @@ copy ..\glib\glibmm\variantdict.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$
 copy ..\glib\glibmm\variantiter.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\varianttype.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\variant_basictypes.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\thread.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\value.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
+copy ..\glib\glibmm\valuearray.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\value_basictypes.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\value_custom.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
 copy ..\glib\glibmm\vectorutils.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm
@@ -118,6 +128,7 @@ copy ..\glib\glibmm\private\optiongroup_p.h $(CopyDir)\include\glibmm-$(ApiMajor
 copy ..\glib\glibmm\private\regex_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\shell_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\spawn_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
+copy ..\glib\glibmm\private\threads_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\timezone_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\unicode_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\uriutils_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
@@ -125,6 +136,8 @@ copy ..\glib\glibmm\private\variant_p.h $(CopyDir)\include\glibmm-$(ApiMajorVers
 copy ..\glib\glibmm\private\variantdict_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\variantiter_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 copy ..\glib\glibmm\private\varianttype_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
+copy ..\glib\glibmm\private\thread_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
+copy ..\glib\glibmm\private\valuearray_p.h $(CopyDir)\include\glibmm-$(ApiMajorVersion).$(ApiMinorVersion)\glibmm\private
 
 copy ..\gio\giomm\action.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\actiongroup.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
@@ -211,7 +224,6 @@ copy ..\gio\giomm\outputstream.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(A
 copy ..\gio\giomm\permission.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\pollableinputstream.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\pollableoutputstream.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
-copy ..\gio\giomm\propertyaction.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\proxy.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\proxyaddress.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
 copy ..\gio\giomm\proxyresolver.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm
@@ -337,7 +349,6 @@ copy ..\gio\giomm\private\notification_p.h $(CopyDir)\include\giomm-$(ApiMajorVe
 copy ..\gio\giomm\private\outputstream_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
 copy ..\gio\giomm\private\pollableinputstream_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
 copy ..\gio\giomm\private\pollableoutputstream_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
-copy ..\gio\giomm\private\propertyaction_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
 copy ..\gio\giomm\private\proxy_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
 copy ..\gio\giomm\private\proxyaddress_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
 copy ..\gio\giomm\private\proxyresolver_p.h $(CopyDir)\include\giomm-$(ApiMajorVersion).$(ApiMinorVersion)\giomm\private
similarity index 88%
rename from MSVC_Net2017/glibmm-version-paths.props
rename to MSVC_Net2013/glibmm-version-paths.props
index 28b8cb9..216731b 100644 (file)
@@ -1,15 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Label="UserMacros">
-    <VSVer>15</VSVer>
+    <VSVer>12</VSVer>
     <GlibEtcInstallRoot>$(SolutionDir)\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
     <CopyDir>$(GlibEtcInstallRoot)</CopyDir>
     <DefDir>$(SolutionDir)$(Configuration)\$(Platform)\obj\$(ProjectName)\</DefDir>
     <ApiMajorVersion>2</ApiMajorVersion>
-    <ApiMinorVersion>54</ApiMinorVersion>
+    <ApiMinorVersion>4</ApiMinorVersion>
     <ReleaseDllSuffix>-vc$(VSVer)0-$(ApiMajorVersion)_$(ApiMinorVersion)</ReleaseDllSuffix>
     <DebugDllSuffix>-vc$(VSVer)0-d-$(ApiMajorVersion)_$(ApiMinorVersion)</DebugDllSuffix>
-    <SigCMajorVersion>3</SigCMajorVersion>
   </PropertyGroup>
   <PropertyGroup>
     <_PropertySheetDisplayName>glibmmversionpathsprops</_PropertySheetDisplayName>
@@ -39,8 +38,5 @@
     <BuildMacro Include="DebugDllSuffix">
       <Value>$(DebugDllSuffix)</Value>
     </BuildMacro>
-    <BuildMacro Include="SigCMajorVersion">
-      <Value>$(SigCMajorVersion)</Value>
-    </BuildMacro>
   </ItemGroup>
 </Project>
similarity index 88%
rename from MSVC_Net2017/glibmm.sln
rename to MSVC_Net2013/glibmm.sln
index 4467ac1..d71dbc1 100644 (file)
@@ -1,5 +1,5 @@
-Microsoft Visual Studio Solution File, Format Version 12.00\r
-# Visual Studio 15\r
+Microsoft Visual Studio Solution File, Format Version 13.00\r
+# Visual Studio 2013\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glibmm", "glibmm.vcxproj", "{58B2B53C-C4FF-47FD-817B-095E45B7F7D4}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendef", "gendef.vcxproj", "{07324745-C9BE-4D65-B08A-9C88188C0C28}"\r
@@ -8,6 +8,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "markup", "markup.vcxproj",
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glibmm_value", "glibmm_value.vcxproj", "{22277003-3228-486E-A6A8-994B8B13AF30}"\r
 EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread", "thread.vcxproj", "{5357AB2B-A5F9-463C-92D8-00357CCC3ECE}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threadpool", "threadpool.vcxproj", "{962484DB-2111-48A4-BEF0-194433719D0D}"\r
+EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dispatcher", "dispatcher.vcxproj", "{129ECC08-6D30-4884-B824-4AF96EF0A45C}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dispatcher2", "dispatcher2.vcxproj", "{18A82706-B645-4DF5-AB09-06B90128BAC5}"\r
@@ -74,6 +78,22 @@ Global
                {22277003-3228-486E-A6A8-994B8B13AF30}.Release|Win32.Build.0 = Release|Win32\r
                {22277003-3228-486E-A6A8-994B8B13AF30}.Release|x64.ActiveCfg = Release|x64\r
                {22277003-3228-486E-A6A8-994B8B13AF30}.Release|x64.Build.0 = Release|x64\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Debug|Win32.Build.0 = Debug|Win32\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Debug|x64.ActiveCfg = Debug|x64\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Debug|x64.Build.0 = Debug|x64\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Release|Win32.ActiveCfg = Release|Win32\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Release|Win32.Build.0 = Release|Win32\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Release|x64.ActiveCfg = Release|x64\r
+               {5357AB2B-A5F9-463C-92D8-00357CCC3ECE}.Release|x64.Build.0 = Release|x64\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Debug|x64.ActiveCfg = Debug|x64\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Debug|x64.Build.0 = Debug|x64\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Release|Win32.Build.0 = Release|Win32\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Release|x64.ActiveCfg = Release|x64\r
+               {962484DB-2111-48A4-BEF0-194433719D0D}.Release|x64.Build.0 = Release|x64\r
                {129ECC08-6D30-4884-B824-4AF96EF0A45C}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {129ECC08-6D30-4884-B824-4AF96EF0A45C}.Debug|Win32.Build.0 = Debug|Win32\r
                {129ECC08-6D30-4884-B824-4AF96EF0A45C}.Debug|x64.ActiveCfg = Debug|x64\r
similarity index 93%
rename from MSVC_Net2017/glibmm.vcxproj
rename to MSVC_Net2013/glibmm.vcxproj
index e9eb058..6594edc 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="..\glib\glibmm\arrayhandle.cc" />
     <ClCompile Include="..\glib\glibmm\balancedtree.cc" />
     <ClCompile Include="..\glib\glibmm\base64.cc" />
     <ClCompile Include="..\glib\glibmm\binding.cc" />
     <ClCompile Include="..\glib\glibmm\bytearray.cc" />
     <ClCompile Include="..\glib\glibmm\checksum.cc" />
     <ClCompile Include="..\glib\glibmm\class.cc" />
+    <ClCompile Include="..\glib\glibmm\containers.cc" />
     <ClCompile Include="..\glib\glibmm\convert.cc" />
     <ClCompile Include="..\glib\glibmm\date.cc" />
     <ClCompile Include="..\glib\glibmm\datetime.cc" />
     <ClCompile Include="..\glib\glibmm\error.cc" />
     <ClCompile Include="..\glib\glibmm\exception.cc" />
     <ClCompile Include="..\glib\glibmm\exceptionhandler.cc" />
-    <ClCompile Include="..\glib\glibmm\extraclassinit.cc" />
     <ClCompile Include="..\glib\glibmm\fileutils.cc" />
     <ClCompile Include="..\glib\glibmm\init.cc" />
     <ClCompile Include="..\glib\glibmm\interface.cc" />
     <ClCompile Include="..\glib\glibmm\quark.cc" />
     <ClCompile Include="..\glib\glibmm\random.cc" />
     <ClCompile Include="..\glib\glibmm\regex.cc" />
+    <ClCompile Include="..\glib\glibmm\sarray.cc" />
     <ClCompile Include="..\glib\glibmm\shell.cc" />
     <ClCompile Include="..\glib\glibmm\signalproxy.cc" />
     <ClCompile Include="..\glib\glibmm\signalproxy_connectionnode.cc" />
     <ClCompile Include="..\glib\glibmm\spawn.cc" />
+    <ClCompile Include="..\glib\glibmm\streamiochannel.cc" />
     <ClCompile Include="..\glib\glibmm\stringutils.cc" />
+    <ClCompile Include="..\glib\glibmm\thread.cc" />
+    <ClCompile Include="..\glib\glibmm\threadpool.cc" />
+    <ClCompile Include="..\glib\glibmm\threads.cc" />
     <ClCompile Include="..\glib\glibmm\timer.cc" />
     <ClCompile Include="..\glib\glibmm\timeval.cc" />
     <ClCompile Include="..\glib\glibmm\timezone.cc" />
     <ClCompile Include="..\glib\glibmm\value.cc" />
     <ClCompile Include="..\glib\glibmm\value_basictypes.cc" />
     <ClCompile Include="..\glib\glibmm\value_custom.cc" />
+    <ClCompile Include="..\glib\glibmm\valuearray.cc" />
     <ClCompile Include="..\glib\glibmm\variant.cc" />
     <ClCompile Include="..\glib\glibmm\variantdict.cc" />
     <ClCompile Include="..\glib\glibmm\variantiter.cc" />
     <ClCompile Include="..\glib\glibmm\wrap_init.cc" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="..\glib\glibmm\arrayhandle.h" />
     <ClInclude Include="..\glib\glibmm\balancedtree.h" />
     <ClInclude Include="..\glib\glibmm\base64.h" />
     <ClInclude Include="..\glib\glibmm\binding.h" />
     <ClInclude Include="..\glib\glibmm\checksum.h" />
     <ClInclude Include="..\glib\glibmm\class.h" />
     <ClInclude Include="..\glib\glibmm\containerhandle_shared.h" />
+    <ClInclude Include="..\glib\glibmm\containers.h" />
     <ClInclude Include="..\glib\glibmm\convert.h" />
     <ClInclude Include="..\glib\glibmm\date.h" />
     <ClInclude Include="..\glib\glibmm\datetime.h" />
     <ClInclude Include="..\glib\glibmm\error.h" />
     <ClInclude Include="..\glib\glibmm\exception.h" />
     <ClInclude Include="..\glib\glibmm\exceptionhandler.h" />
-    <ClInclude Include="..\glib\glibmm\extraclassinit.h" />
     <ClInclude Include="..\glib\glibmm\fileutils.h" />
+    <ClInclude Include="..\glib\glibmm\helperlist.h" />
     <ClInclude Include="..\glib\glibmm\i18n-lib.h" />
     <ClInclude Include="..\glib\glibmm\i18n.h" />
     <ClInclude Include="..\glib\glibmm\init.h" />
     <ClInclude Include="..\glib\glibmm\interface.h" />
     <ClInclude Include="..\glib\glibmm\iochannel.h" />
     <ClInclude Include="..\glib\glibmm\keyfile.h" />
+    <ClInclude Include="..\glib\glibmm\listhandle.h" />
     <ClInclude Include="..\glib\glibmm\main.h" />
     <ClInclude Include="..\glib\glibmm\markup.h" />
     <ClInclude Include="..\glib\glibmm\miscutils.h" />
     <ClInclude Include="..\glib\glibmm\random.h" />
     <ClInclude Include="..\glib\glibmm\refptr.h" />
     <ClInclude Include="..\glib\glibmm\regex.h" />
+    <ClInclude Include="..\glib\glibmm\sarray.h" />
     <ClInclude Include="..\glib\glibmm\shell.h" />
     <ClInclude Include="..\glib\glibmm\signalproxy.h" />
     <ClInclude Include="..\glib\glibmm\signalproxy_connectionnode.h" />
+    <ClInclude Include="..\glib\glibmm\slisthandle.h" />
     <ClInclude Include="..\glib\glibmm\spawn.h" />
+    <ClInclude Include="..\glib\glibmm\streamiochannel.h" />
     <ClInclude Include="..\glib\glibmm\stringutils.h" />
+    <ClInclude Include="..\glib\glibmm\thread.h" />
+    <ClInclude Include="..\glib\glibmm\threadpool.h" />
+    <ClInclude Include="..\glib\glibmm\threads.h" />
     <ClInclude Include="..\glib\glibmm\timer.h" />
     <ClInclude Include="..\glib\glibmm\timeval.h" />
     <ClInclude Include="..\glib\glibmm\timezone.h" />
     <ClInclude Include="..\glib\glibmm\value.h" />
     <ClInclude Include="..\glib\glibmm\value_basictypes.h" />
     <ClInclude Include="..\glib\glibmm\value_custom.h" />
+    <ClInclude Include="..\glib\glibmm\valuearray.h" />
     <ClInclude Include="..\glib\glibmm\variant.h" />
     <ClInclude Include="..\glib\glibmm\variantdict.h" />
     <ClInclude Include="..\glib\glibmm\variantiter.h" />
similarity index 87%
rename from MSVC_Net2017/glibmm.vcxproj.filters
rename to MSVC_Net2013/glibmm.vcxproj.filters
index f8e2680..578c253 100644 (file)
@@ -15,6 +15,7 @@
     </Filter>
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="..\glib\glibmm\arrayhandle.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\balancedtree.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\base64.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\binding.cc"><Filter>Source Files</Filter></ClCompile>
@@ -22,6 +23,7 @@
     <ClCompile Include="..\glib\glibmm\bytearray.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\checksum.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\class.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\containers.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\convert.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\date.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\datetime.cc"><Filter>Source Files</Filter></ClCompile>
@@ -31,7 +33,6 @@
     <ClCompile Include="..\glib\glibmm\error.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\exception.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\exceptionhandler.cc"><Filter>Source Files</Filter></ClCompile>
-    <ClCompile Include="..\glib\glibmm\extraclassinit.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\fileutils.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\init.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\interface.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\quark.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\random.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\regex.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\sarray.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\shell.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\signalproxy.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\signalproxy_connectionnode.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\spawn.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\streamiochannel.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\stringutils.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\thread.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\threadpool.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\threads.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\timer.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\timeval.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\timezone.cc"><Filter>Source Files</Filter></ClCompile>
@@ -69,6 +75,7 @@
     <ClCompile Include="..\glib\glibmm\value.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\value_basictypes.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\value_custom.cc"><Filter>Source Files</Filter></ClCompile>
+    <ClCompile Include="..\glib\glibmm\valuearray.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\variant.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\variantdict.cc"><Filter>Source Files</Filter></ClCompile>
     <ClCompile Include="..\glib\glibmm\variantiter.cc"><Filter>Source Files</Filter></ClCompile>
@@ -79,6 +86,7 @@
     <ClCompile Include="..\glib\glibmm\wrap_init.cc"><Filter>Source Files</Filter></ClCompile>
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="..\glib\glibmm\arrayhandle.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\balancedtree.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\base64.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\binding.h"><Filter>Header Files</Filter></ClInclude>
@@ -87,6 +95,7 @@
     <ClInclude Include="..\glib\glibmm\checksum.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\class.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\containerhandle_shared.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\containers.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\convert.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\date.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\datetime.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\error.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\exception.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\exceptionhandler.h"><Filter>Header Files</Filter></ClInclude>
-    <ClInclude Include="..\glib\glibmm\extraclassinit.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\fileutils.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\helperlist.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\i18n-lib.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\i18n.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\init.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\interface.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\iochannel.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\keyfile.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\listhandle.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\main.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\markup.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\miscutils.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\random.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\refptr.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\regex.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\sarray.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\shell.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\signalproxy.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\signalproxy_connectionnode.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\slisthandle.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\spawn.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\streamiochannel.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\stringutils.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\thread.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\threadpool.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\threads.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\timer.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\timeval.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\timezone.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\value.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\value_basictypes.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\value_custom.h"><Filter>Header Files</Filter></ClInclude>
+    <ClInclude Include="..\glib\glibmm\valuearray.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\variant.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\variantdict.h"><Filter>Header Files</Filter></ClInclude>
     <ClInclude Include="..\glib\glibmm\variantiter.h"><Filter>Header Files</Filter></ClInclude>
similarity index 98%
rename from MSVC_Net2017/glibmm_value.vcxproj
rename to MSVC_Net2013/glibmm_value.vcxproj
index e191a1c..9639003 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 97%
rename from MSVC_Net2017/install.vcxproj
rename to MSVC_Net2013/install.vcxproj
index 4b18af2..059ceec 100644 (file)
     <ConfigurationType>Utility</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Utility</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Utility</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Utility</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/keyfile.vcxproj
rename to MSVC_Net2013/keyfile.vcxproj
index ed71d95..0993e6a 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/markup.vcxproj
rename to MSVC_Net2013/markup.vcxproj
index 60fb2c4..03b3295 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/options.vcxproj
rename to MSVC_Net2013/options.vcxproj
index 3ba9d67..f627c4e 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/properties.vcxproj
rename to MSVC_Net2013/properties.vcxproj
index aafebf5..6858140 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/regex.vcxproj
rename to MSVC_Net2013/regex.vcxproj
index 490b1b6..84418df 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/resolver.vcxproj
rename to MSVC_Net2013/resolver.vcxproj
index b6461be..113d86a 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/socket-client.vcxproj
rename to MSVC_Net2013/socket-client.vcxproj
index 5058f19..3743708 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/socket-server.vcxproj
rename to MSVC_Net2013/socket-server.vcxproj
index b925f87..4116263 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/thread.vcxproj
rename to MSVC_Net2013/thread.vcxproj
index 24e9b3b..9950bbb 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
similarity index 98%
rename from MSVC_Net2017/threadpool.vcxproj
rename to MSVC_Net2013/threadpool.vcxproj
index 4ff8ebe..9ab9748 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v141</PlatformToolset>
+    <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
index 7cda466..a0df8af 100644 (file)
@@ -43,10 +43,10 @@ nodist_giomm_libinclude_HEADERS = gio/giommconfig.h
 pkgconfigdir = $(libdir)/pkgconfig
 nodist_pkgconfig_DATA = glib/$(GLIBMM_MODULE_NAME).pc gio/$(GIOMM_MODULE_NAME).pc
 
-include $(srcdir)/MSVC_Net2017/filelist.am
+include $(srcdir)/MSVC_Net2013/filelist.am
 
 text_files = COPYING.tools README.SUN README.win32
-msvc_files = $(addprefix MSVC_Net2017/,$(msvc_net2017_data))
+msvc_files = $(addprefix MSVC_Net2013/,$(msvc_net2013_data))
 
 dist_noinst_DATA = $(text_files) $(msvc_files)
 dist_noinst_SCRIPTS = autogen.sh
diff --git a/NEWS b/NEWS
index c5b224a..02e9432 100644 (file)
--- a/NEWS
+++ b/NEWS
-2.53.1.1 (unstable):
+2.54.0 (stable):
 
 Glib:
-* Use C++11 enum classes instead of old-style enums, and put many enums
-  inside relevant class declarations:
-  - Glib::NodeTree: Move enums into class.
-  - Glib::BindingFlags is now Glib::Binding::Flags.
-  - Glib::KeyfileFlags is now Glib::Keyfile::Flags.
-  - Glib::ModuleFlags is now Glib::Module::Flags.
-  - Glib::ChecksumType is now Glib::Checksum::Type.
-  - Glib::Regex: Move enums inside class.
-  - Glib::Resource: Move enums into class.
-  (Murray Cumming, Kjell Ahlstedt)
-* RefPtr: Make this an alias for std::shared_ptr<> instead.
-  - Use std::dynamic_pointer_cast<>() instead of RefPtr<>::cast_dynamic().
-  - Use std::static_pointer_cast<>() instead of RefPtr<>::cast_static().
-  - Use std::const_pointer_cast<>() instead of RefPtr<>::cast_const().
-  - When creating RefPtr directly, instead of using create() methods,
-    use Glib::make_refptr_for_instance() so the std::shared_ptr<> has the
-    necessary Deleter.
-  (Murray Cumming) Bug #755037
-* Remove Glib::WeakRef. Use std::weak_ref<> instead.
-  (Murray Cumming) Bug #755037
-* Object: Use g_object_new_with_properties() instead of (deprecated)
-  g_object_newv() and (deprecated) GParameter.
-  (Murray Cumming)
-* IOChannel: Avoid creating a RefPtr to this.
-  (Murray Cumming) Bug #755037
-* SignalProxy:
-  connect(): Signals with non-void return values now have no default value
-  for the "after" parameter, forcing application developers to think about
-  whether they should connect before or after already-connected signal
-  handlers, and default signal handlers. This is awkward but necessary.
-  Just provide "true" to get the previous behaviour, or use connect_notify().
-  connect_notify(): Signals with void return values have no connect_notify(),
-  because it is not useful with those signals.
-  (Kjell Ahlstedt) Bug #126213.
+* Added DBusObjectPathString and DBusSignatureString, for Variants with D-Bus object paths or D-Bus signatures,
+  and add Variant specializations for Variant<Glib::DBusObjectPathString>,
+  Variant<Glib::DBusSignatureString> and Variant<std::vector<Glib::DBusObjectPathString>>.
+  (Kjell Ahlstedt) Bug #785700
+* Variant: Add template specialization for std::tuple.
+  (Alexander Rössler) Bug #777791
 
 Gio:
-* Use C++11 enum classes instead of old-style enums, and put many enums
-  inside relevant class declarations:
-  - Gio::Drive: Move enums into class.
-  - Gio::TlsDatabase: Move enums into class.
-  - Gio::UnixSocketAddressType is now Gio::UnixSocketAddress::Type.
-  - Gio::Mount: Move enums into class.
-  - Gio::TlsPasswordFlags is now Gio::TlsPassword::Flags.
-  - Gio::IOStreamSpliceFlags is now Gio::IOStream::SpliceFlags.
-  - Gio::SettingsBindFlags is now Gio::Settings::BindFlags.
-  - Gio::ResolverRecordType is now Gio::Resolver::RecordType.
-  - Gio::Socket: Move enums into class.
-  - Gio::File: Move some flags enums into the class.
-  - Gio::OutputStreamSpliceFlags is now Gio::OuputStream::SpliceFlags.
-  - Gio::CredentialsType is now Gio::Credentials::Type.
-  - Gio::NotificationPriority is now Gio::Notification::Priority.
-  - Gio::FileMonitorEvent is now Gio::FileMonitor::Event.
-  - Gio::FileAttributeInfoFlags is now Gio::FileAttributeInfo::Flags.
-  - Gio::EmblemOrigin is now Gio::Emblem::Origin.
-  - Gio::Converter: Put enums inside class.
-  - Gio::ConverterFlags is now Gio::Converter::Flags.
-  - Gio::ConverterResult is now Gio::Converter::Result.
-  - Gio::AppInfoCreateFlags is now Gio::AppInfo::CreateFlags.
-  - Gio::ApplicationFlags is now Gio::Application::Flags.
-  (Murray Cumming, Kjell Ahlstedt)
-* Remove duplicate ErrorEnum declaration.
+* ActionGroup: Add optional action_name parameters to some signals.
   (Kjell Ahlstedt)
-* ConstructParams:
-  - Remove (hopefully really unnecessary) copy constructor.
-  - C++11: =delete the operator=, instead of making it private.
-  (Murray Cumming)
-* Value:
-  - Remove the CType alias, which should be unnecessary.
-  - value_custom: Replace a template parameter with C++11 type traits.
-  - Value<RefPtr<T>>: Only use this specialization if T has get_base_type().
-  (Murray Cumming) Bug #755037
-* Variant:
-  - operator bool(): Simplify to avoid clang++ warnings.
-  - C++11: Variant: Replace throw(std::bad_cast) with noexcept(false).
-    See https://bugzilla.redhat.com/show_bug.cgi?id=1438766
-  (Murray Cumming)
-* Socket: Avoid creating a RefPtr to this.
-  (Murray Cumming) Bug #755037
-
-Gio:DBus:
-* Use C++11 enum classes instead of old-style enums, and put many enums
-  inside relevant class declarations:
-  - Gio::DBus::InterfaceSkeletonFlags is now Gio::DBus::InterfaceSkeleton::Flags.
-  - Gio::DBus::ServerFlags is now Gio::DBus::Server::Flags.
-  (Murray Cumming, Kjell Ahlstedt)
-
-gmmproc:
-* _WRAP_ENUM(): Generate C++ enum classes instead of enums, and let the enums
-  be inside class declarations.
-  (Kjell Ahlstedt) Bug #86864
-
-Build
-* Windows:  Visual Studio builds: Update ABI version
-  (Chun-wei Fan)
-
-
-2.53.1 (unstable):
-
-Glib:
-* OptionGroup:
-  - Don't allow copy or move.
-  - Remove the OptionGroup& parameter in on_pre_parse(), on_post_parse() and
-    on_error().
-  (Kjell Ahlstedt)
-* IOChannel, StreamIOChannel: Remove deprecated parts.
+* Settings: Add optional key parameter to the writable_changed signal.
   (Kjell Ahlstedt)
-* ustring: Add make_valid().
-  (Krzysztof Piecuch) Bug #780075
-* Remove (unused) Sequence and sequence().
-  (Murray Cumming)
-* Remove ListHandle, SListHandle, ArrayHandle, SArrayHandle, and
-  StringArrayHandle, replacing them with std::vector in API.
-  (Murray Cumming)
 
 gmmproc:
-* _WRAP_METHOD(): Some more use of auto in generated code.
-  (Murray Cumming)
-
-Build:
-* Change the ABI to glibmm-2.54.
-  (Murray Cumming)
-* Add some #include directives.
+* Write signal flags to generated documentation
+  (Kjell Ahlstedt) Bug #785895 (Daniel Boles)
+* Write default values of properties to generated documentation
+  (Kjell Ahlstedt) Bug #785895 (Daniel Boles)
+* Warn for unmatched deprecations in signals and properties.
   (Kjell Ahlstedt)
-* Visual Studio: Require Visual Studio 2017 and update the glibmm project.
-  (Chu-wei Fan)
+* Accept curly braces in default values in _WRAP macros.
+  (Kjell Ahlstedt) Bug #783216 comment #13 (Daniel Boles)
+* Fix _WRAP_ENUM for enumerators with apostrophes.
+  (Kjell Ahlstedt)
+* Add new elements types for the docs_override:
+  substitute_type_name and substitute_enumerator_name.
+  (Kjell Ahlstedt) Bug #86864
 
 
-2.51.5
+2.52.1 (stable):
 
 Gio:
-* Application: get_default(): Correct the reference counting.
-  (KJell Ahlstedt) Bug #779936 (James Legg)
-* Add PropertyAction.
-  (Kjell Ahlstedt)
-
-Glib:
-* Remove Glib::unconst() because it is unused and unnecessary.
-  (Kjell Ahlstedt)
-* Variant: Add template specialization for std::tuple,
-  and a test.
-  (Alexander Rössler, Kjell Ahlstedt) Bug #777791
+* TlsDatabase: Fix memory leak in a vfunc.
+  (Kjell Ahlstedt) Bug #783360
 
+Documentation:
+* Update docs of get_*_name().
+  (Daniel Boles)
 
-2.51.2 (unstable):
-Distro packagers should probably not package this yet.
+Build:
+* MacOS: Really correct build without gdesktopinfo.
+  (Kjell Ahlstedt) Bug #781947
 
-Glib:
-* Object construction: Add custom class init and instance init functions
-  An extra class init function is useful in Gtk::WidgetCustomDraw and
-  Gtk::WidgetCustomSnapshot.
-  (Kjell Ahlstedt) Bug #775348
+2.52.0 (stable):
 
 Gio:
-* Action: #include <glibmm/variant.h>, for convenience.
-  (Daniel Boles) Bug #777953
-* SimpleAction: Make set_state() public.
-  (Daniel Boles) Bug #777953
+* UnixSocketAddress::create(): Remove the default value for the type
+  parameter to avoid ambiguity.
+  (Kjell Ahlstedt) Bug #782592
 
-Documentation:
-* Glib::Variant: Explain how to create "maybe" type.
-  (Daniel Boles) Bug #778219
+Gio::DBus
+* Proxy: Wrap call() and call_sync() methods.
+  (Vyacheslav Yurkov) Bug #781818
 
+Documentation:
+* RefPtr: Clarify comment about undefined behaviour.
+  (Daniel Boles)
 
-2.51.1.2 (unstable):
-Distro packagers should probably not package this yet.
+2.51.7 (unstable):
 
 Glib:
-* Remove some deprecated API
-  (Kjell Ahlstedt)
-* Variant: Remove the string specializations of cast_dynamic.
-  (Kjell Ahlstedt)
-* Glib::VariantType: Add get_item_types(), removing first() and
-  next().
+* SettingsSchemaKey: Add missing value/range methods.
+  (Daniel Boles) Bug #774903
+* Variant: Replace throw(std::bad_cast) with noexcept(false),
+  to fix the build with C++17.
+  See https://bugzilla.redhat.com/show_bug.cgi?id=1438766
+  (Murray Cumming)
+* VariantType: Deprecate first() and next(). Add get_item_types()
   (Kjell Ahlstedt) Bug #775741
 
-
 Gio:
-* init(): Set the global locale.
-  (Kjell Ahlstedt) Bug #661588
-* ActionBase: get_state_hint_variant() now returns VariantContainerBase.
-  (Kjell Ahlstedt)
-* ActionMap: add_action_with_parameter(): Register the parameter type,
-  to make this work.
-  (Daniel Boles) Bug #774444
-* ActionResult: Add is_tagged_vfunc().
-  (Kjell Ahlstedt)
-* Glib::Dispatcher: Implement the pimpl idiom
-  (Kjell Ahlstedt) Bug #651942
-* File, FileInfo, FileIOStream, FileOutputStream: Use Glib::ustring for
-  (UTF-8) file attributes of string type.
-  (Kjell Ahlstedt) Bug #615950
-* NetworkMonitor: Derive from Gio::Initable.
-  (Kjell Ahlstedt)
-* RemoteActionGroup: Rename some vfuncs to add _full().
-  (Murray Cumming)
-
-Documentation:
-* ActionMap:
-  - ActivateSlot: Mention add_action_bool().
-  - ActivateWithParameterSlot: Be more specific.
+* ActionMap: Add add_action_with_parameter() that takes a parameter type,
+  and deprecated the existing method, because it cannot work.
   (Daniel Boles) Bug #774444
+* SimpleAction: Make set_state() public.
+  (Daniel Boles) Bug #777953
 
 Build:
-* Update the Visual Studio project files.
-  (Chun-wei Fan)
-* Some minor cppcheck fixes.
-  (Murray Cumming)
+* MacOS: Correct build without gdesktopinfo.
+  (John Ralls) Bug #781947
+* Glib::Object: Suppress deprecation warning for g_object_newv() with glib 2.54.
+  (Kjell Ahlstedt)
 
 
-2.51.1.1 (unstable):
+2.51.6 (unstable):
 
-General:
-* Remove no_default_handler in some _WRAP_SIGNAL()s
-  This allows application developers to simply override
-  the default on_*() signal handlers for these signals too,
-  as they can already with most other signals.
-  If you are using, for instance, the -Wsuggest-override
-  compiler option, watch out for new compiler warnings suggesting
-  that your existing signal handler should now be marked with the
-  override keyword - that means you should do so but you should
-  also stop connecting the signal handler in your code.
-  (Kjell Ahlstedt)
-* Build: examples/Makefile.am: Re-insert the dispatcher examples
-  (Kjell Ahlstedt)
+This is version 2.51.6 of glibmm-2.24. Ignore versions 2.51.1 to 2.51.5 of
+unstable glibmm-2.52. Unstable glibmm-2.52 is now unstable glibmm-2.54,
+leaving the 2.51/52 version numbers again for use by stable glibmm-2.52.
 
 Glib:
-* Dispatcher: Don't cast a HANDLE to an int on Windows.
+* Dispatcher:
+  - autodeduce the type of the fd field.
+  (Marcin Kolny) Bug #772074
+  - Don't cast a HANDLE to an int on Windows.
   (Kjell Ahlstedt) Bug #772074
-* ObjectBase:
-  - Remove connect_property_changed_with_return()
-  and let connect_property_changed() return a sigc::connection.
-  (Kjell Ahlstedt)
-  - Use std::forward_list for interface class pointers.
-  (Kjell Ahlstedt)
-  - Replace extra_object_base_data map by instance data.
-  (Kjell Ahlstedt)
-* ObjectBase: overload get_property().
-  (Marcin Kolny)
-* Main, IOSource: autodeduce type of fd field.
-  (Marcin Kolny) Bug #770274
-* Settings: Add property_settings_schema(), and update
-  signal_changed().
-  (Kjell Ahlstedt)
-* Settings: Make set_enum() + set_flags() usable
-  (djb) Bug #774647
-* SettingsSchemaKey: Add missing value/range methods
-  (Daniel Boles) Bug #774903
-* SignalProxyNormal: Remove connect_() and connect_notify_(),
-  adding connect_impl().
-  (Kjell Ahlstedt)
-* Rename SignalProxyDetailed to SignalProxyDetailedBase, and
-  SignalProxyDetailedAnyType to SignalProxyDetailed.
-  Remove SignalProxyDetailed# aliases (# = 0..6).
-  (Kjell Ahlstedt)
-* Source: Replace extra_source_data by instance data.
-  (Kjell Ahlstedt) Bug #561885
+* ustring: Add cbegin() and cend().
+  (Murray Cumming)
 
 Gio:
-* ActionMap::add_action_vfunc(): Const correction.
-  (Murray Cumming)
-* Application: Add dbus_register/unregister_vfunc.
-  (Ritesh Khadgaray, Kjell Ahlstedt) Bug #762191
-* Menu: insert/prepend/add_item(): Const correction.
-  (Murray Cumming)
-* MenuAttributeIter: get_value(): Const correction.
-  (Murray Cumming)
-* MenuModel: get_item_atribute(): const correction.
-  (Murray Cumming)
-* RemoteActionGroup: Derive from Gio::ActionGroup.
-  (Murray Cumming)
+* Action: Include variant.h in the heaer.
+  (Daniel Boles) Bug #777953
+* Application: get_default(): Correct the reference counting.
+  (Kjell Ahlstedt) Bug #779936
+* Settings:
+  - Really add set_enum() and set_flags().
+  (djb) Bug #774647
+  - Writable-change-event signal: Correct the type of the key parameter.
+  (Marcin Kolny) Bug #773977
+* SettingsSchemaSource: get_default(): Correct the refcounting.
+  (Marcin Kolny) Bug #774593
 
-Gio::Dbus:
+Gio::DBus:
 * Proxy: Fix memory leak in get_cached_property_names().
   (Kjell Ahlstedt) Bug #775210
-* Proxy: Derive from (and implement) Gio::DBus::Interface.
-  (Murray Cumming)
-
 
-2.51.1 (unstable):
-
-This is the first release of the glibmm-2.52 API/ABI.
-It installs in parallel with the gtkmm-2.4 API/ABI, of which
-the most recent version is glibmm 2.50. We know that is a bit
-confusing. We are taking the opportunity to do this glibmm ABI
-break while GTK+ (and therefore gtkmm) is also doing an ABI
-break. But we cannot call this glibmm-3.0 because there is no
-glib 3.0.
+Documentation:
+* Glib::Variant: Improve documentation of maybe types.
+  (Daniel Boles) Bug #778219
+* Gio::ActionMap: Clarify doc of ActivateWithParameterSlot
+  (Daniel Boles)
 
 Build:
-* Require C++14.
-  (Murray Cumming)
-* Use libsigc++-3.0 instead of libsigc++-2.0.
-  https://www.murrayc.com/permalink/2016/03/07/libsigc-3-0-very-variadic/
-  (Murray Cumming)
-* Remove lots of deprecated API.
-  (Kjell Ahlstedt)
-
-Gio:
-* BufferedInputStream, InputStream, OutputStream: Add vfuncs,
-  allowing implementation in C++.
-  (Krzysztof Kosiński, Kjell Ahlstedt) Bug #572471
-* SettingsSchemaSource::get_default(): Correct the reference count.
-  (Marcin Kolny) Bug #774593
-* Settings: Fix type of 'key' parameter of writable-change-event signal
-  (Marcin Kolny) Bug #773977
-
-Glib:
-* ustring: Add cbegin() and cend().
+* Visual Studio builds: "Install" the .pdb files
+  (Chun-wei Fan)
 
 
 2.50.0:
@@ -351,7 +168,7 @@ gmmproc:
 * Remove DocsParser::non_object_method_name()
   (Kjell Ahlstedt)
 * swap() implementations: Use std::swap().
-  (Murray Cumming)
+  (Murray Cumming <murrayc@murrayc.com>
 
 Documentation:
 * Gio::SocketService: Update the class documentation
index 0094f74..71d7285 100644 (file)
@@ -1,58 +1,58 @@
-Building glibmm on Win32\r
-===========================\r
-\r
-Currently, both the mingw (native win32) gcc compiler and MS Visual\r
-Studio 2017 are supported. glibmm can be built with mingw32-gcc using\r
-the gnu autotools (automake, autoconf, libtool). As explicitly stated\r
-in the gtk+ for win32 distribution (http://www.gimp.org/win32/), the\r
-gcc compiler provided by the cygwin distribution should not be used to\r
-build glib/glibmm libraries and/or applications (see the README.win32\r
-that comes with the gtk+ DLLs). This MIGHT cause conflicts between the\r
-cygwin and msvcrt runtime environments.\r
-\r
-1. Mingw\r
-\r
-The mingw distribution which has been tested with this release is the\r
-following :\r
-\r
-* MinGW-4.1 as the base distribution.\r
-\r
-The bare mingw distribution does not provide the necessary tools (sh, perl, m4\r
-, autoconf, automake, ..) to run the provided configure script "as is". One\r
-(currently non supported) solution is to use mingw in conjunction with msys,\r
-which is readily available on the mingw website (http://www.mingw.org/).\r
-\r
-The preferred method is to combine the cygwin distribution (for the unix tools\r
-that were mentioned above) with mingw by making sure that the mingw\r
-tools (gcc, ld, dlltool, ..) are called first.\r
-\r
-First, make sure that you have working distribution of the native port\r
-of both libsigc++-3.0.x and glib-2.0 on win32 (see\r
-http://www.gimp.org/win32). If you can't compile a simple glib example\r
-using gcc and `pkg-config --cflags --libs`, you should not even think\r
-about trying to compile glibmm, let alone using precompiled libglibmm\r
-DLLs to port your glibmm application !\r
-\r
-The configure script can then be called using (as an example) the\r
-following options\r
-\r
-./configure --prefix=/target --build=i386-pc-mingw32 --disable-static\r
-\r
-then\r
-\r
-make\r
-make check\r
-make install\r
-\r
-2. MS Visual Studio 2017\r
-\r
-Open the glibmm.sln solution file in the MSVC_Net2017 directory. In\r
-the Tools/Options panel, add the appropriate GTK+ include and lib\r
-directories to the Projects and Solutions/VC++ directories, if they\r
-are not in the locations specified by the property sheets, i.e.\r
-$(srcroot)\..\vs15\$(Platform). Build the solution.\r
-\r
-3. Glibmm methods and signals not available on win32\r
-\r
-All glibmm methods and signals are available on win32.\r
-\r
+Building glibmm on Win32
+===========================
+
+Currently, both the mingw (native win32) gcc compiler and MS Visual
+Studio 2013 are supported. glibmm can be built with mingw32-gcc using
+the gnu autotools (automake, autoconf, libtool). As explicitly stated
+in the gtk+ for win32 distribution (http://www.gimp.org/win32/), the
+gcc compiler provided by the cygwin distribution should not be used to
+build glib/glibmm libraries and/or applications (see the README.win32
+that comes with the gtk+ DLLs). This MIGHT cause conflicts between the
+cygwin and msvcrt runtime environments.
+
+1. Mingw
+
+The mingw distribution which has been tested with this release is the
+following :
+
+* MinGW-4.1 as the base distribution.
+
+The bare mingw distribution does not provide the necessary tools (sh, perl, m4
+, autoconf, automake, ..) to run the provided configure script "as is". One 
+(currently non supported) solution is to use mingw in conjunction with msys,
+which is readily available on the mingw website (http://www.mingw.org/).
+
+The preferred method is to combine the cygwin distribution (for the unix tools
+that were mentioned above) with mingw by making sure that the mingw
+tools (gcc, ld, dlltool, ..) are called first.
+
+First, make sure that you have working distribution of the native port
+of both libsigc++-2.0.x and glib-2.0 on win32 (see
+http://www.gimp.org/win32). If you can't compile a simple glib example
+using gcc and `pkg-config --cflags --libs`, you should not even think
+about trying to compile glibmm, let alone using precompiled libglibmm
+DLLs to port your glibmm application !
+
+The configure script can then be called using (as an example) the
+following options
+
+./configure --prefix=/target --build=i386-pc-mingw32 --disable-static
+
+then
+
+make
+make check
+make install
+
+2. MS Visual Studio 2013
+
+Open the glibmm.sln solution file in the MSVC_Net2013 directory. In
+the Tools/Options panel, add the appropriate GTK+ include and lib
+directories to the Projects and Solutions/VC++ directories, if they
+are not in the locations specified by the property sheets, i.e.
+$(srcroot)\..\vs12\$(Platform). Build the solution.
+
+3. Glibmm methods and signals not available on win32
+
+All glibmm methods and signals are available on win32.
+
index 8065441..5a36b10 100644 (file)
@@ -13,8 +13,7 @@
 ## for more details.
 ##
 ## You should have received a copy of the GNU General Public License along
-## with danielk's Autostuff; if not, write to the Free Software Foundation,
-## Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+## with danielk's Autostuff.  If not, see <http://www.gnu.org/licenses/>.
 
 #serial 20110910
 
index 52e5587..bcd2ca2 100644 (file)
@@ -15,7 +15,7 @@
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_INIT([glibmm], [2.53.1.1],
+AC_INIT([glibmm], [2.54.0],
         [http://bugzilla.gnome.org/enter_bug.cgi?product=glibmm],
         [glibmm], [http://www.gtkmm.org/])
 AC_PREREQ([2.59])
@@ -31,8 +31,8 @@ AM_MAINTAINER_MODE
 AC_ARG_VAR([ACLOCAL_FLAGS], [aclocal flags, e.g. -I <macro dir>])
 
 MM_PREREQ([0.9.10])
-MM_INIT_MODULE([glibmm-2.54])
-MM_INIT_MODULE([giomm-2.54])
+MM_INIT_MODULE([glibmm-2.4])
+MM_INIT_MODULE([giomm-2.4])
 
 # Copy the mm-common .pl scripts into docs/,
 # and use them from there,
@@ -43,7 +43,7 @@ MM_CONFIG_DOCTOOL_DIR([docs])
 AC_SUBST([LIBGLIBMM_SO_VERSION], [4:0:3])
 
 AC_PROG_CXX
-MM_AX_CXX_COMPILE_STDCXX([14], [noext],[mandatory])
+MM_AX_CXX_COMPILE_STDCXX([11], [noext],[mandatory])
 
 AC_DISABLE_STATIC
 LT_INIT([win32-dll])
@@ -55,6 +55,26 @@ AS_CASE([$host_os], [mingw*], [glibmm_host_windows=yes], [glibmm_host_windows=no
 AC_MSG_RESULT([$glibmm_host_windows])
 AM_CONDITIONAL([HOST_WINDOWS_NATIVE], [test "x$glibmm_host_windows" = xyes])
 
+# This test for Mac OS is copied from glib. If the result of glib's test
+# is ever made available outside glib, use glib's result instead of this test.
+# glib: https://bugzilla.gnome.org/show_bug.cgi?id=780309
+# glibmm: https://bugzilla.gnome.org/show_bug.cgi?id=781947
+glibmm_have_cocoa=no
+AC_MSG_CHECKING([for Mac OS X Cocoa support])
+AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
+#include <Cocoa/Cocoa.h>
+#ifdef GNUSTEP_BASE_VERSION
+#error "Detected GNUstep, not Cocoa"
+#endif
+]])],[glibmm_have_cocoa=yes],[])
+
+AC_MSG_RESULT([$glibmm_have_cocoa])
+AM_CONDITIONAL(OS_COCOA, [test "$glibmm_have_cocoa" = "yes"])
+AS_IF([test "$glibmm_have_cocoa" = "yes"],
+[
+  AC_DEFINE([GLIBMM_OS_COCOA], [1], [Define only on Mac OS, COCOA])
+])
+
 # TODO: This makes no sense. --danielk
 AS_IF([test "x$enable_static" = xyes],
 [
@@ -62,9 +82,9 @@ AS_IF([test "x$enable_static" = xyes],
   AC_DEFINE([GIOMM_STATIC_LIB],  [1], [Define if giomm is built as a static library])
 ])
 
-glibreq='2.0 >= 2.53.1'
+glibreq='2.0 >= 2.50.0'
 
-GLIBMM_MODULES="sigc++-3.0 >= 2.99.5 glib-$glibreq gobject-$glibreq gmodule-$glibreq"
+GLIBMM_MODULES="sigc++-2.0 >= 2.9.1 glib-$glibreq gobject-$glibreq gmodule-$glibreq"
 GIOMM_MODULES="$GLIBMM_MODULES gio-$glibreq"
 test "x$glibmm_host_windows" = xyes || GIOMM_MODULES="$GIOMM_MODULES gio-unix-$glibreq"
 
@@ -114,16 +134,10 @@ MM_ARG_WITH_TAGFILE_DOC([libsigc++-2.0.tag], [sigc++-2.0])
 # Check whether --enable-debug-refcounting was given.
 GLIBMM_ARG_ENABLE_DEBUG_REFCOUNTING
 
-glibmm_warnings_fatal='-pedantic -Wall -Wextra -Wformat-security -Wsuggest-override -Wshadow -Wno-long-long'
 # Evaluate the --enable-warnings=level option.
 MM_ARG_ENABLE_WARNINGS([GLIBMM_WXXFLAGS],
                        [-Wall],
-                       [$glibmm_warnings_fatal],
-                       [G SIGCXX])
-
-MM_ARG_ENABLE_WARNINGS([GLIBMM_INTERFACE_TEST_WXXFLAGS],
-                       [-Wall],
-                       [$glibmm_warnings_fatal -Wno-unused-function],
+                       [-pedantic -Wall -Wextra -Wformat-security -Wsuggest-override -Wshadow -Wno-long-long],
                        [G SIGCXX])
 
 # Offer the ability to omit some API from the library,
@@ -155,12 +169,12 @@ AC_CONFIG_FILES([Makefile
                  examples/Makefile
                  docs/Makefile
                  docs/reference/Doxyfile
-                 MSVC_Net2017/glibmm/glibmm.rc
-                 MSVC_Net2017/giomm/giomm.rc])
+                 MSVC_Net2013/glibmm/glibmm.rc
+                 MSVC_Net2013/giomm/giomm.rc])
 
 # Copy the generated configuration headers into the MSVC project directories.
-AC_CONFIG_COMMANDS([MSVC_Net2017/glibmm/glibmmconfig.h],
-                   [cp -f glib/glibmmconfig.h MSVC_Net2017/glibmm/glibmmconfig.h])
-AC_CONFIG_COMMANDS([MSVC_Net2017/giomm/giommconfig.h],
-                   [cp -f gio/giommconfig.h MSVC_Net2017/giomm/giommconfig.h])
+AC_CONFIG_COMMANDS([MSVC_Net2013/glibmm/glibmmconfig.h],
+                   [cp -f glib/glibmmconfig.h MSVC_Net2013/glibmm/glibmmconfig.h])
+AC_CONFIG_COMMANDS([MSVC_Net2013/giomm/giommconfig.h],
+                   [cp -f gio/giommconfig.h MSVC_Net2013/giomm/giommconfig.h])
 AC_OUTPUT
index 209e87c..9ac3ad8 100644 (file)
@@ -1,8 +1,8 @@
 web_host = gtkmm.org
-web_path_gtkmm = /home/murrayc/gtkmm.org/docs/glibmm-2.54/
-#web_path_gtkmm = /home/groups/g/gt/gtkmm/htdocs/docs/glibmm-2.54/
+web_path_gtkmm = /home/murrayc/gtkmm.org/docs/glibmm-2.4/
+#web_path_gtkmm = /home/groups/g/gt/gtkmm/htdocs/docs/glibmm-2.4/
 web_path_docs = $(web_path_gtkmm)docs/
 rsync_args = -vz --rsh ssh
 
-gtkmm_docdir = $(datadir)/doc/glibmm-2.54/docs
+gtkmm_docdir = $(datadir)/doc/glibmm-2.4/docs
 
index a32cfb8..0de871a 100644 (file)
@@ -32,9 +32,11 @@ check_PROGRAMS =                     \
        options/example                 \
        properties/example              \
        regex/example                   \
-       settings/settings \
-       thread/dispatcher \
-       thread/dispatcher2
+       settings/settings               \
+       thread/dispatcher               \
+       thread/dispatcher2              \
+       thread/thread                   \
+       thread/threadpool
 
 glibmm_includes = -I$(top_builddir)/glib $(if $(srcdir:.=),-I$(top_srcdir)/glib)
 giomm_includes  = -I$(top_builddir)/gio $(if $(srcdir:.=),-I$(top_srcdir)/gio)
@@ -49,6 +51,7 @@ local_libgiomm  = $(top_builddir)/gio/giomm/libgiomm-$(GIOMM_API_VERSION).la
 
 LDADD        = $(GLIBMM_LIBS) $(local_libglibmm)
 giomm_ldadd  = $(GIOMM_LIBS) $(local_libglibmm) $(local_libgiomm)
+thread_ldadd = $(GLIBMM_LIBS) $(local_libglibmm)
 
 child_watch_child_watch_SOURCES  = child_watch/main.cc
 iochannel_stream_example_SOURCES =     \
@@ -65,7 +68,13 @@ properties_example_SOURCES = properties/properties_example.cc
 regex_example_SOURCES      = regex/main.cc
 
 thread_dispatcher_SOURCES  = thread/dispatcher.cc
+thread_dispatcher_LDADD    = $(thread_ldadd)
 thread_dispatcher2_SOURCES = thread/dispatcher2.cc
+thread_dispatcher2_LDADD   = $(thread_ldadd)
+thread_thread_SOURCES      = thread/thread.cc
+thread_thread_LDADD        = $(thread_ldadd)
+thread_threadpool_SOURCES  = thread/threadpool.cc
+thread_threadpool_LDADD    = $(thread_ldadd)
 
 # giomm examples
 dbus_session_bus_service_SOURCES = dbus/session_bus_service.cc
index a995f5a..8051db3 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
@@ -25,7 +24,7 @@ using namespace std;
 class ChildWatch : public sigc::trackable
 {
 public:
-  explicit ChildWatch(const Glib::RefPtr<Glib::MainLoop>& mainLoop) : m_mainLoop(mainLoop) {}
+  ChildWatch(const Glib::RefPtr<Glib::MainLoop>& mainLoop) : m_mainLoop(mainLoop) {}
 
   void on_child_exited(GPid pid, int status);
   void run(); // fork a child and call signal_child_watch
index 79952bb..48aa8d9 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index a0d22fb..9b7bd95 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm.h>
@@ -85,7 +84,7 @@ main(int, char**)
   loop = Glib::MainLoop::create();
 
   // Get the user session bus connection.
-  auto connection = Gio::DBus::Connection::get_sync(Gio::DBus::BusType::SESSION);
+  auto connection = Gio::DBus::Connection::get_sync(Gio::DBus::BUS_TYPE_SESSION);
 
   // Check for an unavailable connection.
   if (!connection)
index a4a99bb..6474133 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /* This is a basic server providing a clock like functionality.  Clients can
@@ -124,8 +123,7 @@ on_server_new_connection(const Glib::RefPtr<Gio::DBus::Connection>& connection)
   std::cout << "Client connected." << std::endl
             << "Peer credentials: " << credentials_str << std::endl
             << "Negotiated capabilities: unix-fd-passing="
-            << ((connection->get_capabilities() & Gio::DBus::CapabilityFlags::UNIX_FD_PASSING)
-               == Gio::DBus::CapabilityFlags::UNIX_FD_PASSING)
+            << (connection->get_capabilities() & Gio::DBus::CAPABILITY_FLAGS_UNIX_FD_PASSING)
             << std::endl;
 
   // If there is already an active connection, do not accept this new one.
@@ -194,7 +192,7 @@ main(int, char**)
 
   std::cout << "Server is listening at: " << server->get_client_address() << "." << std::endl;
 
-  server->signal_new_connection().connect(sigc::ptr_fun(&on_server_new_connection), false);
+  server->signal_new_connection().connect(sigc::ptr_fun(&on_server_new_connection));
 
   // Keep the server running until the process is killed:
   auto loop = Glib::MainLoop::create();
index 1c137a0..444b6e6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /* This is a basic server providing a clock like functionality.  Clients can
@@ -157,7 +156,7 @@ main(int, char**)
     return 1;
   }
 
-  const auto id = Gio::DBus::own_name(Gio::DBus::BusType::SESSION, "org.glibmm.DBusExample",
+  const auto id = Gio::DBus::own_name(Gio::DBus::BUS_TYPE_SESSION, "org.glibmm.DBusExample",
     sigc::ptr_fun(&on_bus_acquired), sigc::ptr_fun(&on_name_acquired),
     sigc::ptr_fun(&on_name_lost));
 
index 51b6c3e..d3e5647 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "fdstream.h"
index 1928344..fdfd3f3 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
index 8234ccd..d9f8944 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <fcntl.h>
@@ -44,7 +43,7 @@ Glib::RefPtr<Glib::MainLoop> mainloop;
 bool
 MyCallback(Glib::IOCondition io_condition)
 {
-  if ((io_condition & Glib::IOCondition::IN) != Glib::IOCondition::IN)
+  if ((io_condition & Glib::IO_IN) == 0)
   {
     std::cerr << "Invalid fifo response" << std::endl;
   }
@@ -89,7 +88,7 @@ int main(/* int argc, char *argv[] */)
   }
 
   input_stream.attach(read_fd);
-  input_stream.connect(sigc::ptr_fun(MyCallback), Glib::IOCondition::IN);
+  input_stream.connect(sigc::ptr_fun(MyCallback), Glib::IO_IN);
 
   // and last but not least - run the application main loop
   mainloop->run();
index e4ddae7..c75719d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index 9caaaf8..7cd5b94 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index d838213..5aedb63 100644 (file)
  * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef _WIN32
@@ -89,7 +87,7 @@ print_resolved_name(const Glib::ustring& phys, const Glib::ustring& name)
 
 static void
 print_resolved_addresses(
-  const Glib::ustring& name, const std::vector<Glib::RefPtr<Gio::InetAddress>>& addresses)
+  const Glib::ustring& name, const std::list<Glib::RefPtr<Gio::InetAddress>>& addresses)
 {
   std::lock_guard<std::mutex> lock_guard(response_mutex);
   std::cout << Glib::ustring::compose("Name:    %1\n", name);
@@ -103,7 +101,7 @@ print_resolved_addresses(
 }
 
 static void
-print_resolved_service(const Glib::ustring& service, const std::vector<Gio::SrvTarget>& targets)
+print_resolved_service(const Glib::ustring& service, const std::list<Gio::SrvTarget>& targets)
 {
   std::lock_guard<std::mutex> lock_guard(response_mutex);
   std::cout << Glib::ustring::compose("Service: %1\n", service);
@@ -174,9 +172,11 @@ lookup_one_sync(const Glib::ustring& arg)
   }
   else
   {
+    std::list<Glib::RefPtr<Gio::InetAddress>> addresses;
+
     try
     {
-      const auto addresses = resolver->lookup_by_name(arg, cancellable);
+      addresses = resolver->lookup_by_name(arg, cancellable);
       print_resolved_addresses(arg, addresses);
     }
     catch (const Gio::ResolverError& err)
@@ -287,7 +287,7 @@ static void
 print_connectable_sockaddr(Glib::RefPtr<Gio::SocketAddress> sockaddr)
 {
   Glib::ustring phys;
-  auto isa = std::dynamic_pointer_cast<Gio::InetSocketAddress>(sockaddr);
+  auto isa = Glib::RefPtr<Gio::InetSocketAddress>::cast_dynamic(sockaddr);
 
   if (!isa)
   {
@@ -466,7 +466,7 @@ main(int argc, char** argv)
   signal(SIGINT, interrupted);
 
   chan = Glib::IOChannel::create_from_fd(cancel_fds[0]);
-  const auto source = chan->create_watch(Glib::IOCondition::IN);
+  const auto source = chan->create_watch(Glib::IO_IN);
   watch_conn = source->connect(sigc::bind(sigc::ptr_fun(async_cancel), cancellable));
 #endif
 
index aacbd6b..c364d9b 100644 (file)
@@ -68,7 +68,7 @@ socket_address_to_string(const Glib::RefPtr<Gio::SocketAddress>& address)
   Glib::ustring str, res;
   int port;
 
-  auto isockaddr = std::dynamic_pointer_cast<Gio::InetSocketAddress>(address);
+  auto isockaddr = Glib::RefPtr<Gio::InetSocketAddress>::cast_dynamic(address);
   if (!isockaddr)
     return Glib::ustring();
   inet_address = isockaddr->get_address();
@@ -128,7 +128,7 @@ cancel_thread(Glib::RefPtr<Gio::Cancellable> cancellable)
 class JoinAndDelete
 {
 public:
-  void operator()(std::thread* thread) const
+  void operator()(std::thread* thread)
   {
     stop_thread = true;
     cond_thread.notify_all();
@@ -145,7 +145,7 @@ main(int argc, char* argv[])
   Glib::RefPtr<Gio::Socket> socket;
   Glib::RefPtr<Gio::SocketAddress> src_address;
   Glib::RefPtr<Gio::SocketAddress> address;
-  Gio::Socket::Type socket_type;
+  Gio::SocketType socket_type;
   Gio::SocketFamily socket_family;
   Glib::RefPtr<Gio::Cancellable> cancellable;
   Glib::RefPtr<Gio::SocketAddressEnumerator> enumerator;
@@ -188,12 +188,12 @@ main(int argc, char* argv[])
 
   loop = Glib::MainLoop::create();
 
-  socket_type = use_udp ? Gio::Socket::Type::DATAGRAM : Gio::Socket::Type::STREAM;
-  socket_family = use_ipv6 ? Gio::SocketFamily::IPV6 : Gio::SocketFamily::IPV4;
+  socket_type = use_udp ? Gio::SOCKET_TYPE_DATAGRAM : Gio::SOCKET_TYPE_STREAM;
+  socket_family = use_ipv6 ? Gio::SOCKET_FAMILY_IPV6 : Gio::SOCKET_FAMILY_IPV4;
 
   try
   {
-    socket = Gio::Socket::create(socket_family, socket_type, Gio::Socket::Protocol::DEFAULT);
+    socket = Gio::Socket::create(socket_family, socket_type, Gio::SOCKET_PROTOCOL_DEFAULT);
   }
   catch (const Gio::Error& error)
   {
@@ -272,7 +272,7 @@ main(int argc, char* argv[])
     buffer[to_send] = '\0';
     while (to_send > 0)
     {
-      ensure_condition(socket, "send", cancellable, Glib::IOCondition::OUT);
+      ensure_condition(socket, "send", cancellable, Glib::IO_OUT);
       try
       {
         if (use_udp)
@@ -305,7 +305,7 @@ main(int argc, char* argv[])
       to_send -= size;
     }
 
-    ensure_condition(socket, "receive", cancellable, Glib::IOCondition::IN);
+    ensure_condition(socket, "receive", cancellable, Glib::IO_IN);
     try
     {
       if (use_udp)
index 59dd115..fb9d6ea 100644 (file)
@@ -75,7 +75,7 @@ public:
 Glib::ustring
 socket_address_to_string(const Glib::RefPtr<Gio::SocketAddress>& address)
 {
-  auto isockaddr = std::dynamic_pointer_cast<Gio::InetSocketAddress>(address);
+  auto isockaddr = Glib::RefPtr<Gio::InetSocketAddress>::cast_dynamic(address);
   if (!isockaddr)
     return Glib::ustring();
 
@@ -134,7 +134,7 @@ cancel_thread(Glib::RefPtr<Gio::Cancellable> cancellable)
 class JoinAndDelete
 {
 public:
-  void operator()(std::thread* thread) const
+  void operator()(std::thread* thread)
   {
     stop_thread = true;
     cond_thread.notify_all();
@@ -176,12 +176,12 @@ main(int argc, char* argv[])
 
   loop = Glib::MainLoop::create();
 
-  auto socket_type = use_udp ? Gio::Socket::Type::DATAGRAM : Gio::Socket::Type::STREAM;
-  auto socket_family = use_ipv6 ? Gio::SocketFamily::IPV6 : Gio::SocketFamily::IPV4;
+  auto socket_type = use_udp ? Gio::SOCKET_TYPE_DATAGRAM : Gio::SOCKET_TYPE_STREAM;
+  auto socket_family = use_ipv6 ? Gio::SOCKET_FAMILY_IPV6 : Gio::SOCKET_FAMILY_IPV4;
 
   try
   {
-    socket = Gio::Socket::create(socket_family, socket_type, Gio::Socket::Protocol::DEFAULT);
+    socket = Gio::Socket::create(socket_family, socket_type, Gio::SOCKET_PROTOCOL_DEFAULT);
   }
   catch (const Gio::Error& error)
   {
@@ -218,7 +218,7 @@ main(int argc, char* argv[])
 
     std::cout << Glib::ustring::compose("listening on port %1...\n", port);
 
-    ensure_condition(socket, "accept", cancellable, Glib::IOCondition::IN);
+    ensure_condition(socket, "accept", cancellable, Glib::IO_IN);
     try
     {
       new_socket = socket->accept(cancellable);
@@ -257,7 +257,7 @@ main(int argc, char* argv[])
     gchar buffer[4096] = {};
     gssize size;
 
-    ensure_condition(recv_socket, "receive", cancellable, Glib::IOCondition::IN);
+    ensure_condition(recv_socket, "receive", cancellable, Glib::IO_IN);
     try
     {
       if (use_udp)
@@ -289,7 +289,7 @@ main(int argc, char* argv[])
 
     while (to_send > 0)
     {
-      ensure_condition(recv_socket, "send", cancellable, Glib::IOCondition::OUT);
+      ensure_condition(recv_socket, "send", cancellable, Glib::IO_OUT);
       try
       {
         if (use_udp)
index ca7ea0c..c4536cd 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
@@ -25,9 +24,9 @@ public:
   ExampleOptionGroup();
 
 private:
-  bool on_pre_parse(Glib::OptionContext& context) override;
-  bool on_post_parse(Glib::OptionContext& context) override;
-  void on_error(Glib::OptionContext& context, const Glib::Error& error) override;
+  bool on_pre_parse(Glib::OptionContext& context, Glib::OptionGroup& group) override;
+  bool on_post_parse(Glib::OptionContext& context, Glib::OptionGroup& group) override;
+  void on_error(Glib::OptionContext& context, Glib::OptionGroup& group) override;
 
   bool on_option_arg_string(
     const Glib::ustring& option_name, const Glib::ustring& value, bool has_value);
@@ -108,7 +107,7 @@ ExampleOptionGroup::ExampleOptionGroup()
 }
 
 bool
-ExampleOptionGroup::on_pre_parse(Glib::OptionContext& /* context */)
+ExampleOptionGroup::on_pre_parse(Glib::OptionContext& /* context */, Glib::OptionGroup& /* group */)
 {
   // This is called before the m_arg_* instances are given their values.
   // You do not need to override this method. This is just here to show you how,
@@ -119,7 +118,7 @@ ExampleOptionGroup::on_pre_parse(Glib::OptionContext& /* context */)
 
 bool
 ExampleOptionGroup::on_post_parse(
-  Glib::OptionContext& /* context */)
+  Glib::OptionContext& /* context */, Glib::OptionGroup& /* group */)
 {
   // This is called after the m_arg_* instances are given their values.
   // You do not need to override this method. This is just here to show you how,
@@ -129,7 +128,7 @@ ExampleOptionGroup::on_post_parse(
 }
 
 void
-ExampleOptionGroup::on_error(Glib::OptionContext& /* context */, const Glib::Error& /* error */)
+ExampleOptionGroup::on_error(Glib::OptionContext& /* context */, Glib::OptionGroup& /* group */)
 {
   std::cout << "on_error called" << std::endl;
 }
index 98ef1ee..0d6c336 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index e634fe5..94fd059 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
diff --git a/examples/thread/thread.cc b/examples/thread/thread.cc
new file mode 100644 (file)
index 0000000..7af2735
--- /dev/null
@@ -0,0 +1,126 @@
+
+#include <condition_variable>
+#include <iostream>
+#include <memory>
+#include <mutex>
+#include <queue>
+#include <thread>
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+/* For using noexcept on Visual Studio 2013 */
+#include <glibmmconfig.h>
+#endif
+#include <glibmm/init.h>
+#include <glibmm/random.h>
+#include <glibmm/timer.h>
+
+namespace
+{
+
+class MessageQueue
+{
+public:
+  MessageQueue();
+  ~MessageQueue();
+
+  void producer();
+  void consumer();
+
+private:
+  std::mutex mutex_;
+  std::condition_variable cond_push_;
+  std::condition_variable cond_pop_;
+  std::queue<int> queue_;
+};
+
+MessageQueue::MessageQueue()
+{
+}
+
+MessageQueue::~MessageQueue()
+{
+}
+
+void
+MessageQueue::producer()
+{
+  Glib::Rand rand(1234);
+
+  for (auto i = 0; i < 200; ++i)
+  {
+    {
+      std::unique_lock<std::mutex> lock(mutex_);
+
+      cond_pop_.wait(lock, [this]() -> bool { return queue_.size() < 64; });
+
+      queue_.push(i);
+      std::cout << '*';
+      std::cout.flush();
+
+      // We unlock before notifying, because that is what the documentation suggests:
+      // http://en.cppreference.com/w/cpp/thread/condition_variable
+      lock.unlock();
+      cond_push_.notify_one();
+    }
+
+    if (rand.get_bool())
+      continue;
+
+    Glib::usleep(rand.get_int_range(0, 100000));
+  }
+}
+
+void
+MessageQueue::consumer()
+{
+  Glib::Rand rand(4567);
+
+  for (;;)
+  {
+    {
+      std::unique_lock<std::mutex> lock(mutex_);
+
+      cond_push_.wait(lock, [this]() -> bool { return !queue_.empty(); });
+
+      const int i = queue_.front();
+      queue_.pop();
+      std::cout << "\x08 \x08";
+      std::cout.flush();
+
+      // We unlock before notifying, because that is what the documentation suggests:
+      // http://en.cppreference.com/w/cpp/thread/condition_variable
+      lock.unlock();
+      cond_pop_.notify_one();
+
+      if (i >= 199)
+        break;
+    }
+
+    if (rand.get_bool())
+      continue;
+
+    Glib::usleep(rand.get_int_range(10000, 200000));
+  }
+}
+}
+
+int
+main(int, char**)
+{
+  Glib::init();
+
+  MessageQueue queue;
+
+  // TODO: Use std::make_unique() when we use C++14:
+  const auto producer =
+    std::unique_ptr<std::thread>(new std::thread(&MessageQueue::producer, &queue));
+
+  const auto consumer =
+    std::unique_ptr<std::thread>(new std::thread(&MessageQueue::consumer, &queue));
+
+  producer->join();
+  consumer->join();
+
+  std::cout << std::endl;
+
+  return 0;
+}
diff --git a/examples/thread/threadpool.cc b/examples/thread/threadpool.cc
new file mode 100644 (file)
index 0000000..885962b
--- /dev/null
@@ -0,0 +1,68 @@
+
+#include <iostream>
+#include <mutex>
+#include <thread>
+
+// TODO: Remove this example sometime. Glib::ThreadPool is deprecated.
+// TODO: Maybe use std::async() instead?
+#undef GLIBMM_DISABLE_DEPRECATED
+
+#include <glibmmconfig.h>
+
+#ifdef GLIBMM_DISABLE_DEPRECATED
+int
+main(int, char**)
+{
+  // If glibmm is configured with --disable-deprecated-api,
+  // GLIBMM_DISABLE_DEPRECATED is defined in glibmmconfig.h.
+  std::cout << "Glib::ThreadPool not available because deprecated API has been disabled."
+            << std::endl;
+  return 77; // Tell automake's test harness to skip this test.
+}
+
+#else
+
+#include <glibmm/random.h>
+#include <glibmm/threadpool.h>
+#include <glibmm/timer.h>
+
+namespace
+{
+
+std::mutex mutex;
+
+void
+print_char(char c)
+{
+  Glib::Rand rand;
+
+  for (auto i = 0; i < 100; ++i)
+  {
+    {
+      std::lock_guard<std::mutex> lock(mutex);
+      std::cout << c;
+      std::cout.flush();
+    }
+    Glib::usleep(rand.get_int_range(10000, 100000));
+  }
+}
+
+} // anonymous namespace
+
+int
+main(int, char**)
+{
+  Glib::ThreadPool pool(10);
+
+  for (auto c = 'a'; c <= 'z'; ++c)
+  {
+    pool.push(sigc::bind(sigc::ptr_fun(&print_char), c));
+  }
+
+  pool.shutdown();
+
+  std::cout << std::endl;
+
+  return 0;
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
index 8d5376b..0787057 100644 (file)
@@ -16,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
@@ -61,7 +60,7 @@
 #include <giomm/dbussubtreevtable.h>
 #include <giomm/dbusutils.h>
 #include <giomm/dbuswatchname.h>
-#ifndef G_OS_WIN32
+#if !defined(G_OS_WIN32) && !defined(GLIBMM_OS_COCOA)
 #include <giomm/desktopappinfo.h>
 #endif
 #include <giomm/drive.h>
 #include <giomm/permission.h>
 #include <giomm/pollableinputstream.h>
 #include <giomm/pollableoutputstream.h>
-#include <giomm/propertyaction.h>
 #include <giomm/proxy.h>
 #include <giomm/proxyaddress.h>
 #include <giomm/proxyresolver.h>
index 816f5b9..cf37c46 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/contenttype.h>
-#include <glibmm/vectorutils.h>
 #include <gio/gio.h>
 
 namespace Gio
@@ -120,17 +116,17 @@ content_type_guess(const std::string& filename, const std::string& data, bool& r
   return Glib::convert_return_gchar_ptr_to_ustring(cresult);
 }
 
-std::vector<Glib::ustring>
+Glib::StringArrayHandle
 content_type_guess_for_tree(const Glib::RefPtr<const File>& root)
 {
-  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(
+  return Glib::StringArrayHandle(
     g_content_type_guess_for_tree(const_cast<GFile*>(root->gobj())), Glib::OWNERSHIP_DEEP);
 }
 
-std::vector<Glib::ustring>
+Glib::ListHandle<Glib::ustring>
 content_types_get_registered()
 {
-  return Glib::ListHandler<Glib::ustring>::list_to_vector(g_content_types_get_registered(), Glib::OWNERSHIP_DEEP);
+  return Glib::ListHandle<Glib::ustring>(g_content_types_get_registered(), Glib::OWNERSHIP_DEEP);
 }
 
 } // namespace Gio
index c9516a6..de1821b 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 #ifndef _GIOMM_CONTENTTYPE_H
 #define _GIOMM_CONTENTTYPE_H
 
 #include <glibmm/ustring.h>
+#include <glibmm/listhandle.h>
 #include <giomm/icon.h>
 #include <giomm/file.h>
 #include <string>
@@ -171,7 +169,7 @@ Glib::ustring content_type_guess(
  *
  * @newin{2,18}
  */
-std::vector<Glib::ustring> content_type_guess_for_tree(const Glib::RefPtr<const File>& root);
+Glib::StringArrayHandle content_type_guess_for_tree(const Glib::RefPtr<const File>& root);
 
 /**
  * Gets a list of strings containing all the registered content types
@@ -179,7 +177,7 @@ std::vector<Glib::ustring> content_type_guess_for_tree(const Glib::RefPtr<const
  *
  * @return List of the registered content types.
  */
-std::vector<Glib::ustring> content_types_get_registered();
+Glib::ListHandle<Glib::ustring> content_types_get_registered();
 
 /** @} group giommContentType */
 
index a00c3b4..32c2892 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "init.h"
index a7e69e2..345e819 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GIOMM_INIT_H
 #define _GIOMM_INIT_H
 
@@ -19,8 +18,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Gio
index 06dc7c5..4f2b6e2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "slot_async.h"
index ba840e1..228e1c9 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <gio/gio.h>
 
index 7624913..af1e974 100644 (file)
@@ -31,7 +31,7 @@ giomm_generic_socket_callback(sigc::slot_base* slot, GIOCondition condition)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    return (*static_cast<sigc::slot<bool(Glib::IOCondition)>*>(slot))((Glib::IOCondition)condition);
+    return (*static_cast<sigc::slot<bool, Glib::IOCondition>*>(slot))((Glib::IOCondition)condition);
   }
   catch (...)
   {
@@ -66,7 +66,7 @@ inline SignalSocket::SignalSocket(GMainContext* context) : context_(context)
 }
 
 sigc::connection
-SignalSocket::connect(const sigc::slot<bool(Glib::IOCondition)>& slot,
+SignalSocket::connect(const sigc::slot<bool, Glib::IOCondition>& slot,
   const Glib::RefPtr<Socket>& socket, Glib::IOCondition condition,
   const Glib::RefPtr<Cancellable>& cancellable, int priority)
 {
@@ -89,15 +89,7 @@ Glib::RefPtr<SocketSource>
 SocketSource::create(const Glib::RefPtr<Socket>& socket, Glib::IOCondition condition,
   const Glib::RefPtr<Cancellable>& cancellable)
 {
-  return Glib::make_refptr_for_instance<SocketSource>(new SocketSource(socket, condition, cancellable));
-}
-
-// static
-Glib::RefPtr<SocketSource>
-SocketSource::create(GSocket* socket, Glib::IOCondition condition,
-  const Glib::RefPtr<Cancellable>& cancellable)
-{
-  return Glib::make_refptr_for_instance<SocketSource>(new SocketSource(socket, condition, cancellable));
+  return Glib::RefPtr<SocketSource>(new SocketSource(socket, condition, cancellable));
 }
 
 SocketSource::SocketSource(const Glib::RefPtr<Socket>& socket, Glib::IOCondition condition,
@@ -108,14 +100,6 @@ SocketSource::SocketSource(const Glib::RefPtr<Socket>& socket, Glib::IOCondition
 {
 }
 
-SocketSource::SocketSource(GSocket* socket, Glib::IOCondition condition,
-  const Glib::RefPtr<Cancellable>& cancellable)
-: IOSource(
-    g_socket_create_source(socket, (GIOCondition)condition, Glib::unwrap(cancellable)),
-    (GSourceFunc)&giomm_socketsource_callback)
-{
-}
-
 SocketSource::~SocketSource() noexcept
 {
 }
index 2b371c6..c1345c6 100644 (file)
 #include <giomm/cancellable.h>
 #include <sigc++/sigc++.h>
 
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-using GSocket = struct _GSocket;
-#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-
 namespace Gio
 {
 class Socket;
@@ -73,7 +69,7 @@ public:
    * @param priority The priority of the new event source.
    * @return A connection handle, which can be used to disconnect the handler.
    */
-  sigc::connection connect(const sigc::slot<bool(Glib::IOCondition)>& slot,
+  sigc::connection connect(const sigc::slot<bool, Glib::IOCondition>& slot,
     const Glib::RefPtr<Socket>& socket, Glib::IOCondition condition,
     const Glib::RefPtr<Cancellable>& cancellable = Glib::RefPtr<Cancellable>(),
     int priority = Glib::PRIORITY_DEFAULT);
@@ -110,23 +106,10 @@ public:
     Glib::IOCondition condition,
     const Glib::RefPtr<Cancellable>& cancellable = Glib::RefPtr<Cancellable>());
 
-
 protected:
   SocketSource(const Glib::RefPtr<Socket>& socket, Glib::IOCondition condition,
     const Glib::RefPtr<Cancellable>& cancellable);
   ~SocketSource() noexcept override;
-
-private:
-  friend Socket;
-
-  // This is just to avoid the need for Gio::Socket to create a RefPtr<> to itself.
-  static Glib::RefPtr<SocketSource> create(GSocket* socket,
-    Glib::IOCondition condition,
-    const Glib::RefPtr<Cancellable>& cancellable = Glib::RefPtr<Cancellable>());
-
-  // This is just to avoid the need for Gio::Socket to create a RefPtr<> to itself.
-  SocketSource(GSocket* socket, Glib::IOCondition condition,
-    const Glib::RefPtr<Cancellable>& cancellable);
 };
 
 } // namespace Gio
index cb9de97..cb7d947 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GIOMM_WRAP_INIT_H
 #define _GIOMM_WRAP_INIT_H
 
@@ -17,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Gio
index c5a1735..71715d3 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2011 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 067a230..206f26f 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -96,7 +95,10 @@ public:
   template <typename T_Value>
   void get_state_hint(T_Value& value) const;
 
-  _WRAP_METHOD(Glib::VariantContainerBase get_state_hint_variant() const, g_action_get_state_hint)
+  //TODO: When we can break ABI, Return a Glib::VariantContainerBase,
+  // as we already do for ActionGroup::get_action_state_hint(),
+  // because that is what this returns (to specify a range).
+  _WRAP_METHOD(Glib::VariantBase get_state_hint_variant() const, g_action_get_state_hint)
 
   _WRAP_METHOD(bool get_enabled() const, g_action_get_enabled)
 
@@ -125,6 +127,8 @@ public:
 
   _WRAP_METHOD(void change_state_variant(const Glib::VariantBase& value), g_action_change_state)
 
+  _WRAP_METHOD(void change_state(const Glib::VariantBase& value), g_action_change_state, deprecated "Use the templated method instead, passing a normal C++ type.")
+
   /** Queries the current state of the action.
    *
    * If the action is not stateful then a null Variant will be returned.  If the
@@ -161,6 +165,8 @@ public:
 
   _WRAP_METHOD(void activate_variant(const Glib::VariantBase& parameter), g_action_activate)
 
+  _WRAP_METHOD(void activate(const Glib::VariantBase& parameter), g_action_activate, deprecated "Use the templated method instead, passing a normal C++ type.")
+
   _WRAP_METHOD(static bool name_is_valid(const Glib::ustring& action_name), g_action_name_is_valid )
 
   /** Parses a detailed action name into its separate name and target components.
index 35feb3a..63caf51 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
index 6d250ba..2c40a16 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -75,6 +74,9 @@ public:
   _WRAP_METHOD(Glib::VariantType get_action_parameter_type(const Glib::ustring& action_name) const, g_action_group_get_action_parameter_type)
   _WRAP_METHOD(Glib::VariantType get_action_state_type(const Glib::ustring& action_name) const, g_action_group_get_action_state_type)
 
+
+  _WRAP_METHOD(Glib::VariantContainerBase get_action_state_hint(const Glib::ustring& action_name) const, g_action_group_get_action_state_hint, deprecated "Use the get_action_state() method that takes an output parameter instead.")
+
   //TODO: How do we check for a nullptr Variant?
   /**
    * Requests a hint about the valid range of values for the state of the
@@ -101,6 +103,9 @@ public:
 
   _WRAP_METHOD(Glib::VariantContainerBase get_action_state_hint_variant(const Glib::ustring& action_name) const, g_action_group_get_action_state_hint)
 
+
+  _WRAP_METHOD(Glib::VariantBase get_action_state(const Glib::ustring& action_name) const, g_action_group_get_action_state, deprecated "Use the get_action_state() method that takes an output parameter instead.")
+
   //TODO: How do we check for a nullptr Variant?
   /** Queries the current state of the named action within the action group.
    *
@@ -129,13 +134,14 @@ public:
   //TODO: Add templated method, renaming this to action_state_changed_variant).
   _WRAP_METHOD(void action_state_changed (const Glib::ustring& action_name, const Glib::VariantBase& state), g_action_group_action_state_changed)
 
-  _WRAP_SIGNAL(void action_added(const Glib::ustring& action_name), "action-added")
-  _WRAP_SIGNAL(void action_enabled_changed(const Glib::ustring& action_name, bool enabled), "action-enabled-changed")
-  _WRAP_SIGNAL(void action_removed(const Glib::ustring& action_name), "action-removed")
+  //TODO: Remove two_signal_methods when we can break ABI.
+  _WRAP_SIGNAL(void action_added(const Glib::ustring& action_name), "action-added", detail_name action_name, two_signal_methods)
+  _WRAP_SIGNAL(void action_enabled_changed(const Glib::ustring& action_name, bool enabled), "action-enabled-changed", detail_name action_name, two_signal_methods)
+  _WRAP_SIGNAL(void action_removed(const Glib::ustring& action_name), "action-removed", detail_name action_name, two_signal_methods)
 
 #m4 _CONVERSION(`GVariant*', `const Glib::VariantBase&', `Glib::wrap($3, true)')
 
-  _WRAP_SIGNAL(void action_state_changed(const Glib::ustring& action_name, const Glib::VariantBase& value), "action-state-changed")
+  _WRAP_SIGNAL(void action_state_changed(const Glib::ustring& action_name, const Glib::VariantBase& value), "action-state-changed", detail_name action_name, two_signal_methods)
 
   _WRAP_VFUNC(bool has_action(const Glib::ustring& name) const, "has_action")
 
index ff79bbd..01a8d37 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/action.h>
@@ -39,12 +36,24 @@ ActionMap::add_action(const Glib::ustring& name, const ActivateSlot& slot)
   return action;
 }
 
+_DEPRECATE_IFDEF_START
+Glib::RefPtr<SimpleAction>
+ActionMap::add_action_with_parameter(
+  const Glib::ustring& name, const ActivateWithParameterSlot& slot)
+{
+  auto action = add_action(name);
+  action->signal_activate().connect(slot);
+  return action;
+}
+_DEPRECATE_IFDEF_END
+
 Glib::RefPtr<SimpleAction>
 ActionMap::add_action_with_parameter(
   const Glib::ustring& name, const Glib::VariantType& parameter_type, const ActivateWithParameterSlot& slot)
 {
   auto action = SimpleAction::create(name, parameter_type);
   action->signal_activate().connect(slot);
+  add_action(action);
   return action;
 }
 
index 28b6492..74b3dd6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -31,6 +30,10 @@ namespace Gio
 
 class Action;
 
+//TODO: Instead derive from ActionGroup, when we can break ABI,
+//because the GActionMap interface requires the GActionGroup interface.
+//LoadableIcon does a similar thing correctly, for instance.
+
 /** ActionMap - Interface for action containers.
  * The ActionMap interface is implemented by ActionGroup implementations that
  * operate by containing a number of named Action instances, such as
@@ -55,7 +58,6 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Action> lookup_action(const Glib::ustring& action_name), g_action_map_lookup_action, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Action> lookup_action(const Glib::ustring& action_name) const, g_action_map_lookup_action, constversion, refreturn)
 
-
   /** A convenience method for creating a SimpleAction instance
    * and adding it to the ActionMap.
    *
@@ -71,7 +73,7 @@ public:
    * For instance,
    * void on_slot_activated();
    */
-  using ActivateSlot = sigc::slot<void()>;
+  using ActivateSlot = sigc::slot<void>;
 
   /** A convenience method for creating a SimpleAction instance
    * and adding it to the ActionMap.
@@ -90,12 +92,28 @@ public:
    * For instance,
    * void on_slot_activated(const Glib::VariantBase& parameter);
    */
-  using ActivateWithParameterSlot = sigc::slot<void(const Glib::VariantBase&)>;
+  using ActivateWithParameterSlot = sigc::slot<void, const Glib::VariantBase&>;
 
+_DEPRECATE_IFDEF_START
   /** A convenience method for creating a SimpleAction instance
    * and adding it to the ActionMap.
    *
    * @param name The name of the Action.
+   * @param slot The callback method to be called when the action is activated.
+   * @return The Action.
+   *
+   * @deprecated This overload does not work as it does not set a parameter
+   * type on the Action, so activating it with a parameter cannot work. Use the
+   * other add_action_with_parameter() overload, which takes a parameter type.
+   */
+  Glib::RefPtr<SimpleAction> add_action_with_parameter(const Glib::ustring& name, const ActivateWithParameterSlot& slot);
+_DEPRECATE_IFDEF_END
+
+  /** A convenience method for creating a SimpleAction instance, which when
+   * activated will call a slot receiving a given type of parameter, and adding
+   * that SimpleAction to the ActionMap.
+   *
+   * @param name The name of the Action.
    * @param parameter_type The type of parameter to be passed to the slot.
    * @param slot The callback method to be called when the action is activated.
    * @return The Action.
@@ -139,7 +157,7 @@ public:
    * For instance,
    * void on_slot_activated(const Glib::ustring& parameter);
    */
-  using ActivateWithStringParameterSlot = sigc::slot<void(const Glib::ustring&)>;
+  using ActivateWithStringParameterSlot = sigc::slot<void, const Glib::ustring&>;
 
 //TODO: Docs: Add hints about how to specify the various possible states in the GtkBuilder XML.
   /** A convenience method for creating a string-based radio SimpleAction instance
@@ -169,8 +187,8 @@ public:
    * For instance,
    * void on_slot_activated(int parameter);
    */
-  using ActivateWithIntParameterSlot = sigc::slot<void(int)>;
-  
+  using ActivateWithIntParameterSlot = sigc::slot<void, int>;
+
 //TODO: Docs: Add hints about how to specify the various possible states in the GtkBuilder XML.
   /** A convenience method for creating an integer-based radio SimpleAction instance
    * and adding it to the ActionMap.
@@ -186,9 +204,10 @@ public:
 #m4 _CONVERSION(`Glib::RefPtr<Action>', `GAction*', `Glib::unwrap($3)')
   _WRAP_VFUNC(Glib::RefPtr<Action> lookup_action(const Glib::ustring& name) const, "lookup_action", refreturn)
 
-#m4 _CONVERSION(`GAction*', `const Glib::RefPtr<Action>&', `Glib::wrap($3, true)')
-  _WRAP_VFUNC(void add_action(const Glib::RefPtr<Action>& action) const, "add_action")
-
+  //TODO: Change this to use const & when we can break ABI.
+  // ( Changing it causes a symbol lookup error when trying to run already-built applications. )
+#m4 _CONVERSION(`GAction*', `Glib::RefPtr<Action>', `Glib::wrap($3, true)')
+  _WRAP_VFUNC(void add_action(Glib::RefPtr<Action> action) const, "add_action")
   _WRAP_VFUNC(void remove_action(const Glib::ustring& name), "remove_action")
 };
 
index dc01c85..35bec45 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/file.h>
+#include <glibmm/listhandle.h>
 #include <glibmm/vectorutils.h>
 #include "slot_async.h"
 #include <gio/gio.h>
@@ -27,7 +25,7 @@ namespace Gio
 
 Glib::RefPtr<AppInfo>
 AppInfo::create_from_commandline(
-  const std::string& commandline, const std::string& application_name, CreateFlags flags)
+  const std::string& commandline, const std::string& application_name, AppInfoCreateFlags flags)
 {
   GAppInfo* capp_info = nullptr;
   GError* gerror = nullptr;
index ef6c288..01d7bcd 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -26,6 +25,8 @@ _CONFIGINCLUDE(giommconfig.h)
 #include <string>
 
 #include <glibmm/interface.h>
+#include <glibmm/listhandle.h>
+#include <glibmm/arrayhandle.h>
 #include <glibmm/object.h>
 //#include <giomm/file.h>
 #include <giomm/icon.h>
@@ -41,6 +42,7 @@ typedef struct _GAppInfoIface GAppInfoIface;
 namespace Gio
 {
 
+_WRAP_ENUM(AppInfoCreateFlags, GAppInfoCreateFlags, NO_GTYPE)
 
 class File;
 
@@ -55,11 +57,9 @@ class AppInfo : public Glib::Interface
   _CLASS_INTERFACE(AppInfo, GAppInfo, G_APP_INFO, GAppInfoIface)
 
 public:
-  _WRAP_ENUM(CreateFlags, GAppInfoCreateFlags, NO_GTYPE)
-
   static Glib::RefPtr<AppInfo> create_from_commandline(const std::string& commandline,
                                                        const std::string& application_name,
-                                                       CreateFlags flags);
+                                                       AppInfoCreateFlags flags);
 
   /**  Creates a duplicate of this AppInfo.
    * @return A duplicate of this AppInfo.
@@ -155,10 +155,14 @@ public:
   _WRAP_METHOD(bool supports_uris() const, g_app_info_supports_uris)
   _WRAP_METHOD(bool supports_files() const, g_app_info_supports_files)
 
-   #m4 _CONVERSION(`const std::vector<std::string>&',`GList*',`Glib::ListHandler<std::string>::vector_to_list($3).data()')
+#m4 _CONVERSION(`const Glib::ListHandle<std::string>&',`GList*',`$3.data()')
+  _WRAP_METHOD(bool launch_uris(const Glib::ListHandle<std::string>& uris,
+                                GAppLaunchContext* launch_context),
+               g_app_info_launch_uris,
+               errthrow, deprecated "Use the method that takes an AppLaunchContext")
 
   //TODO: I think we use Glib::ustring elsewhere for URIs:
-  _WRAP_METHOD(bool launch_uris(const std::vector<std::string>& uris,
+  _WRAP_METHOD(bool launch_uris(const Glib::ListHandle<std::string>& uris,
                                 const Glib::RefPtr<AppLaunchContext>& launch_context{?}),
                g_app_info_launch_uris,
                errthrow)
@@ -204,15 +208,15 @@ public:
                g_app_info_remove_supports_type,
                errthrow)
 
-#m4 _CONVERSION(`const char**', `std::vector<Glib::ustring>', `Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
-  _WRAP_METHOD(std::vector<Glib::ustring> get_supported_types() const, g_app_info_get_supported_types)
+#m4 _CONVERSION(`const char**', `Glib::StringArrayHandle', `Glib::StringArrayHandle($3, Glib::OWNERSHIP_NONE)')
+  _WRAP_METHOD(Glib::StringArrayHandle get_supported_types() const, g_app_info_get_supported_types)
 
   _WRAP_METHOD(bool set_as_last_used_for_type(const std::string& content_type), g_app_info_set_as_last_used_for_type, errthrow)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<AppInfo>>',`Glib::ListHandler<Glib::RefPtr<AppInfo>>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(static std::vector<Glib::RefPtr<AppInfo>> get_all(), g_app_info_get_all)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle<Glib::RefPtr<AppInfo> >',`Glib::ListHandle<Glib::RefPtr<AppInfo> >($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(static Glib::ListHandle<Glib::RefPtr<AppInfo> > get_all(), g_app_info_get_all)
 
-  _WRAP_METHOD(static std::vector<Glib::RefPtr<AppInfo>> get_all_for_type(const std::string& content_type), g_app_info_get_all_for_type)
+  _WRAP_METHOD(static Glib::ListHandle<Glib::RefPtr<AppInfo> > get_all_for_type(const std::string& content_type), g_app_info_get_all_for_type)
   _WRAP_METHOD(static Glib::RefPtr<AppInfo> get_default_for_type(const std::string& content_type, bool must_support_uris = true), g_app_info_get_default_for_type)
   _WRAP_METHOD(static Glib::RefPtr<AppInfo> get_default_for_uri_scheme(const std::string& uri_scheme), g_app_info_get_default_for_uri_scheme)
   _WRAP_METHOD(static void reset_type_associations(const std::string& content_type), g_app_info_reset_type_associations)
@@ -231,10 +235,12 @@ protected:
   //_WRAP_VFUNC(std::string get_description() const, "get_description")
   //_WRAP_VFUNC(std::string get_executable() const, "get_executable")
   //_WRAP_VFUNC(Glib::RefPtr<Icon> get_icon() const, "get_icon")
+//#m4 _CONVERSION(`const Glib::ListHandle<std::string>&',`GList*',`$3.data()')
+//#m4 _CONVERSION(`GList*',`const Glib::ListHandle<std::string>&',`Glib::ListHandle<std::string>($3, Glib::OWNERSHIP_NONE)')
   //_WRAP_VFUNC(bool launch(const std::vector<Gio::File>& filenames, const Glib::RefPtr<AppLaunchContext>& launch_context, GError** error), "launch")
   //_WRAP_VFUNC(bool supports_uris() const, "supports_uris")
   //_WRAP_VFUNC(bool supports_files() const, "supports_files")
-  //_WRAP_VFUNC(bool launch_uris(const std::vector<std::string>& uris, const Glib::RefPtr<AppLaunchContext>& launch_context, GError** error), "launch_uris")
+  //_WRAP_VFUNC(bool launch_uris(const Glib::ListHandle<std::string>& uris, const Glib::RefPtr<AppLaunchContext>& launch_context, GError** error), "launch_uris")
   //_WRAP_VFUNC(bool should_show() const, "should_show")
   //_WRAP_VFUNC(bool set_as_default_for_type(const std::string& content_type, GError** error), "set_as_default_for_type")
   //_WRAP_VFUNC(bool set_as_default_for_extension(const std::string& extension, GError** error), "set_as_default_for_extension")
index d0fa26a..be56159 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/appinfo.h>
index cd75aed..3096e8e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <exception>
@@ -20,6 +19,7 @@
 #include <string>
 
 #include <glibmm/interface.h>
+#include <glibmm/listhandle.h>
 #include <glibmm/object.h>
 //#include <giomm/file.h>
 #include <giomm/icon.h>
@@ -54,11 +54,11 @@ public:
 #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::ustring> get_environment() const, g_app_launch_context_get_environment)
 
-#m4 _CONVERSION(`const std::vector<std::string>&',`GList*',`Glib::ListHandler<std::string>::vector_to_list$3.data()')
-  _WRAP_METHOD(std::string get_display(const Glib::RefPtr<AppInfo>& info, const std::vector<Glib::RefPtr<Gio::File>>& files),
+#m4 _CONVERSION(`const Glib::ListHandle<std::string>&',`GList*',`$3.data()')
+  _WRAP_METHOD(std::string get_display(const Glib::RefPtr<AppInfo>& info, const Glib::ListHandle< Glib::RefPtr<Gio::File> >& files),
                g_app_launch_context_get_display)
 
-  _WRAP_METHOD(std::string get_startup_notify_id(const Glib::RefPtr<AppInfo>& info, const std::vector<Glib::RefPtr<Gio::File>>& files),
+  _WRAP_METHOD(std::string get_startup_notify_id(const Glib::RefPtr<AppInfo>& info, const Glib::ListHandle< Glib::RefPtr<Gio::File> >& files),
                g_app_launch_context_get_startup_notify_id)
   _WRAP_METHOD(void launch_failed(const std::string& startup_notify_id),
                g_app_launch_context_launch_failed)
index 0810450..310ada6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 #include <giomm/init.h>
 #include <cstring> // std::memset()
 #include <map>
-#include <mutex>
 #include <vector>
 
-using Flags = Gio::Application::Flags;
-
 namespace // anonymous
 {
 // TODO: At the next ABI break, implement the pimpl idiom. Then we need not use
@@ -60,7 +56,7 @@ static void
 Application_signal_open_callback(
   GApplication* self, GFile** files, gint n_files, const gchar* hint, void* data)
 {
-  using SlotType = sigc::slot<void(const Gio::Application::type_vec_files&, const Glib::ustring&)>;
+  using SlotType = sigc::slot<void, const Gio::Application::type_vec_files&, const Glib::ustring&>;
 
   Gio::Application::type_vec_files vec_files(n_files);
   for (int i = 0; i < n_files; ++i)
@@ -95,7 +91,7 @@ Application_signal_open_notify_callback(
   GApplication* self, GFile** files, gint n_files, const gchar* hint, void* data)
 {
   using namespace Gio;
-  using SlotType = sigc::slot<void(const Application::type_vec_files&, const Glib::ustring&)>;
+  using SlotType = sigc::slot<void, const Application::type_vec_files&, const Glib::ustring&>;
 
   Application::type_vec_files vec_files(n_files);
   for (int i = 0; i < n_files; i++)
@@ -276,7 +272,7 @@ Application::custom_class_init()
   return application_class_.init();
 }
 
-Application::Application(const Glib::ustring& application_id, Flags flags)
+Application::Application(const Glib::ustring& application_id, ApplicationFlags flags)
 : // Mark this class as non-derived to allow C++ vfuncs to be skipped.
   Glib::ObjectBase(nullptr),
   Glib::Object(Glib::ConstructParams(custom_class_init(), "application_id",
@@ -355,10 +351,10 @@ Application_Class::open_callback(GApplication* self, GFile** files, gint n_files
     (*base->open)(self, files, n_files, hint);
 }
 
-Glib::SignalProxy<void(const Application::type_vec_files&, const Glib::ustring&)>
+Glib::SignalProxy<void, const Application::type_vec_files&, const Glib::ustring&>
 Application::signal_open()
 {
-  return Glib::SignalProxy<void(const Application::type_vec_files&, const Glib::ustring&)>(
+  return Glib::SignalProxy<void, const Application::type_vec_files&, const Glib::ustring&>(
     this, &Application_signal_open_info);
 }
 
index 6fc4d49..f6f8f9c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -35,6 +34,7 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(ApplicationFlags, GApplicationFlags, NO_GTYPE)
 
 /** Application - Core application class.
  * An Application is the foundation of an application, unique for a given
@@ -89,9 +89,6 @@ class Application : public Glib::Object, public ActionGroup, public ActionMap
   _IMPLEMENTS_INTERFACE(ActionGroup)
   _IMPLEMENTS_INTERFACE(ActionMap)
 
-public:
-  _WRAP_ENUM(Flags, GApplicationFlags, NO_GTYPE, s#^FLAGS_##)
-
 protected:
   /** Constructs an application instance.
    * If no application ID is given then some features (most notably application uniqueness) will be disabled.
@@ -99,7 +96,7 @@ protected:
    * @param application_id The application ID.
    * @param flags The application flags.
    */
-  explicit Application(const Glib::ustring& application_id = Glib::ustring(), Flags flags = Flags::NONE);
+  explicit Application(const Glib::ustring& application_id = Glib::ustring(), ApplicationFlags flags = APPLICATION_FLAGS_NONE);
   _IGNORE(g_application_new)
 
 public:
@@ -138,7 +135,7 @@ public:
    * @param application_id The application ID.
    * @param flags The application flags.
    */
-  _WRAP_CREATE(const Glib::ustring& application_id = Glib::ustring(), Flags flags = Flags::NONE)
+  _WRAP_CREATE(const Glib::ustring& application_id = Glib::ustring(), ApplicationFlags flags = APPLICATION_FLAGS_NONE)
 
   _WRAP_METHOD(static bool id_is_valid(const Glib::ustring& application_id), g_application_id_is_valid)
 
@@ -154,8 +151,8 @@ public:
   _WRAP_METHOD(guint get_inactivity_timeout() const, g_application_get_inactivity_timeout)
   _WRAP_METHOD(void set_inactivity_timeout(guint inactivity_timeout), g_application_set_inactivity_timeout)
 
-  _WRAP_METHOD(Flags get_flags() const, g_application_get_flags)
-  _WRAP_METHOD(void set_flags(Flags flags), g_application_set_flags)
+  _WRAP_METHOD(ApplicationFlags get_flags() const, g_application_get_flags)
+  _WRAP_METHOD(void set_flags(ApplicationFlags flags), g_application_set_flags)
 
   _WRAP_METHOD(std::string get_resource_base_path() const, g_application_get_resource_base_path, newin "2,44")
   _WRAP_METHOD(void set_resource_base_path(const std::string& resource_path), g_application_set_resource_base_path, newin "2,44")
@@ -166,7 +163,8 @@ public:
    */
   void unset_resource_base_path();
 
-  _IGNORE(g_application_set_action_group)
+  _WRAP_METHOD(void set_action_group(const Glib::RefPtr<ActionGroup>& action_group), g_application_set_action_group,
+    deprecated "Use the Gio::ActionMap interface instead.")
 
   //Note: We would like to add a group, not just some entries,
   //so we can do pre and post parsing. See https://bugzilla.gnome.org/show_bug.cgi?id=727602
@@ -360,35 +358,39 @@ public:
 //  _WRAP_METHOD(void bind_busy_property(const Glib::RefPtr<Glib::ObjectBase>& object, const Glib::ustring& property), g_application_bind_busy_property)
 //  _WRAP_METHOD(void unbind_busy_property(const Glib::RefPtr<Glib::ObjectBase>& object, const Glib::ustring& property), g_application_unbind_busy_property)
 
-  _IGNORE_PROPERTY("action-group")
+  _WRAP_PROPERTY("action-group", Glib::RefPtr<ActionGroup>, deprecated "Use the Gio::ActionMap interface instead.")
   _WRAP_PROPERTY("application-id", Glib::ustring)
-  _WRAP_PROPERTY("flags", Flags)
+  _WRAP_PROPERTY("flags", ApplicationFlags)
   _WRAP_PROPERTY("inactivity-timeout", guint)
   _WRAP_PROPERTY("is-registered", bool)
   _WRAP_PROPERTY("is-remote", bool)
   _WRAP_PROPERTY("resource-base-path", bool, newin "2,44")
   _WRAP_PROPERTY("is-busy", bool)
 
+//#m4 _CONVERSION(`const gchar*', `const Glib::ustring&', `Glib::ustring($3)')
+//#m4 _CONVERSION(`GVariant*', `const Glib::VariantBase&', `Glib::wrap($3, true)')
+
   _WRAP_SIGNAL(void startup(), "startup")
 
-  _WRAP_SIGNAL(void shutdown(), "shutdown", newin "2,46")
+  //TODO: Remove no_default_handler when we can break ABI
+  _WRAP_SIGNAL(void shutdown(), "shutdown", no_default_handler, newin "2,46")
 
   _WRAP_SIGNAL(void activate(), "activate")
 
   //We wrap the open signal without _WRAP_SIGNAL(), because we need to change its parameters.
   //See bug https://bugzilla.gnome.org/show_bug.cgi?id=637457
-  Glib::SignalProxy<void(const type_vec_files&, const Glib::ustring&)> signal_open();
+  Glib::SignalProxy< void,  const type_vec_files&, const Glib::ustring& > signal_open();
   _IGNORE_SIGNAL(open)
 
 #m4 _CONVERSION(`GApplicationCommandLine*', `const Glib::RefPtr<ApplicationCommandLine>&',`Glib::wrap($3, true)')
   _WRAP_SIGNAL(int command_line(const Glib::RefPtr<ApplicationCommandLine>& command_line), "command-line")
 
+  //TODO: Remove no_default_handler when we can break ABI
   //TODO: Avoid the use of the Variants in the VariantDict?
   //options must be non-const. The handler is meant to modify it. See the description
   //of add_main_option_entry(OptionType, ...).
 #m4 _CONVERSION(`GVariantDict*',`const Glib::RefPtr<Glib::VariantDict>&',`Glib::wrap($3, true)')
-#m4 _CONVERSION(`const Glib::RefPtr<Glib::VariantDict>&',`GVariantDict*',__CONVERT_REFPTR_TO_P)
-  _WRAP_SIGNAL(int handle_local_options(const Glib::RefPtr<Glib::VariantDict>& options), "handle-local-options")
+  _WRAP_SIGNAL(int handle_local_options(const Glib::RefPtr<Glib::VariantDict>& options), "handle-local-options", no_default_handler)
 
 protected:
   virtual void on_open(const type_vec_files& files, const Glib::ustring& hint);
@@ -406,6 +408,7 @@ protected:
   _WRAP_VFUNC(bool local_command_line(char**& arguments, int& exit_status), local_command_line)
 
 #m4 _CONVERSION(`GVariant*',`const Glib::VariantBase&',`Glib::wrap($3,true)')
+
   _WRAP_VFUNC(void before_emit(const Glib::VariantBase& platform_data), "before_emit")
   _WRAP_VFUNC(void after_emit(const Glib::VariantBase& platform_data), "after_emit")
 
@@ -415,10 +418,6 @@ protected:
   _WRAP_VFUNC(void quit_mainloop(), "quit_mainloop")
   _WRAP_VFUNC(void run_mainloop(), "run_mainloop")
 
-#m4 _CONVERSION(`GDBusConnection*', `const Glib::RefPtr<DBus::connection>&', `Glib::wrap($3, true)')
-#m4 _CONVERSION(`const Glib::RefPtr<DBus::Connection>&',`GDBusConnection*',__CONVERT_REFPTR_TO_P)
-  _WRAP_VFUNC(bool dbus_register(const Glib::RefPtr<DBus::Connection>& connection, const Glib::ustring& object_path), "dbus_register", errthrow)
-  _WRAP_VFUNC(void dbus_unregister(const Glib::RefPtr<DBus::Connection>& connection, const Glib::ustring& object_path), "dbus_unregister")
 
 private:
   /** This is just a way to call Glib::init() (which calls g_type_init()) before
index 7fbee67..474fc42 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 4b357c4..3c11745 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/file.h>
index e91c984..f6fda2f 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6d7d90f..6961edd 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index bebc7ab..4a3b59f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <gio/gasyncresult.h> //We are not allowed to include individual headers.
@@ -35,7 +32,7 @@ AsyncResult::get_source_object_base()
 {
   auto cobj = g_async_result_get_source_object(gobj());
   auto cppobj = Glib::wrap_auto(cobj); // ObjectBase::_get_current_wrapper(cobj);
-  return Glib::make_refptr_for_instance<Glib::ObjectBase>(
+  return Glib::RefPtr<Glib::ObjectBase>(
     cppobj); // g_async_result_get_source_object() gives us a ref, unusually.
   // TODO: For some reason this fails: Glib::wrap(cobj);
 }
index f0d2d68..10a80c6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -42,7 +41,7 @@ class AsyncResult;
  *
  * @newin{2,16}
  */
-using SlotAsyncReady = sigc::slot<void(Glib::RefPtr<AsyncResult>&)>;
+using SlotAsyncReady = sigc::slot<void, Glib::RefPtr<AsyncResult>&>;
 
 /** Provides a base class for implementing asynchronous function results.
  * Asynchronous operations are broken up into two separate operations which are chained together by a SlotAsyncReady.
@@ -106,7 +105,13 @@ class AsyncResult : public Glib::Interface
 
 public:
   _IGNORE(g_async_result_get_user_data)
-  _IGNORE(g_async_result_get_source_object)
+
+  //Note that this returns a reference, unlike most GTK+ get_*() functions,
+  //so we don't need to use refreturn.
+  _WRAP_METHOD(Glib::RefPtr<Glib::Object> get_source_object(),
+               g_async_result_get_source_object, deprecated "Use get_source_object_base()")
+  _WRAP_METHOD(Glib::RefPtr<const Glib::Object> get_source_object() const,
+               g_async_result_get_source_object, constversion, deprecated "Use get_source_object_base()")
 
   //Note that this returns a reference, unlike most GTK+ get_*() functions,
   //so we don't need to use refreturn.
@@ -117,12 +122,15 @@ public:
 
   _WRAP_METHOD(bool is_tagged(gpointer source_tag) const, g_async_result_is_tagged)
 
-  // The compiler cannot find an unwrap() for ObjectBase, because
-  // ObjectBase::BaseObjectType is not declared.
+
+  // TODO: For some reason, the compiler cannot find an unwrap() for ObjectBase.
   //#m4 _CONVERSION(`Glib::RefPtr<Glib::ObjectBase>',`GObject*',__CONVERT_REFPTR_TO_P)
 #m4 _CONVERSION(`Glib::RefPtr<Glib::ObjectBase>',`GObject*',`unwrap_objectbase_custom($3)')
-  _WRAP_VFUNC(Glib::RefPtr<Glib::ObjectBase> get_source_object(), "get_source_object")
-  _WRAP_VFUNC(bool is_tagged(gpointer source_tag), "is_tagged")
+  _WRAP_VFUNC(Glib::RefPtr<Glib::ObjectBase> get_source_object(),
+              "get_source_object")
+
+  //TODO: is_tagged() vfunc when we can break ABI.
 };
 
 } // namespace Gio
+
index 888b7af..7c82808 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -26,7 +23,7 @@ namespace Gio
 Glib::RefPtr<BufferedInputStream>
 BufferedInputStream::create_sized(const Glib::RefPtr<InputStream>& base_stream, gsize buffer_size)
 {
-  return Glib::make_refptr_for_instance<Gio::BufferedInputStream>(new BufferedInputStream(base_stream, buffer_size));
+  return Glib::RefPtr<Gio::BufferedInputStream>(new BufferedInputStream(base_stream, buffer_size));
 }
 
 void
index 3894f95..c50ecc8 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/filterinputstream.h>
@@ -107,8 +106,9 @@ public:
   _WRAP_PROPERTY("buffer-size", guint)
 
 protected:
+  //TODO: When we can break ABI, add vfunc. See https://bugzilla.gnome.org/show_bug.cgi?id=572471
 #m4 _CONVERSION(`GCancellable*', `const Glib::RefPtr<Cancellable>&', `Glib::wrap($3, true)')
-  _WRAP_VFUNC(gssize fill(gssize count, const Glib::RefPtr<Cancellable>& cancellable), fill, errthrow, err_return_value -1)
+  //_WRAP_VFUNC(gssize fill(gssize count, const Glib::RefPtr<Cancellable>& cancellable), fill, errthrow, err_return_value -1)
 };
 
 } // namespace Gio
index c549775..c334f5c 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -26,7 +23,7 @@ namespace Gio
 Glib::RefPtr<BufferedOutputStream>
 BufferedOutputStream::create_sized(const Glib::RefPtr<OutputStream>& base_stream, gsize size)
 {
-  return Glib::make_refptr_for_instance<Gio::BufferedOutputStream>(new BufferedOutputStream(base_stream, size));
+  return Glib::RefPtr<Gio::BufferedOutputStream>(new BufferedOutputStream(base_stream, size));
 }
 
 } // namespace Gio
index 4933db9..0d2aba2 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/filteroutputstream.h>
index 151f478..87d8f66 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a1cc68a..94b97ac 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 
@@ -37,7 +36,7 @@ protected:
   _CTOR_DEFAULT
 
 public:
-  using SlotCancelledCallback = sigc::slot<void()>;
+  using SlotCancelledCallback = sigc::slot<void>;
 
   _WRAP_CREATE()
 
index e9d69db..f4218b5 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 0d79fbb..b5bb234 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 0f2d200..7f97a55 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 
-using Flags = Gio::Converter::Flags;
-using Result = Gio::Converter::Result;
-
 namespace Gio
 {
 
index cde99f8..2c219ad 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -30,6 +27,8 @@ typedef struct _GConverterIface GConverterIface;
 namespace Gio
 {
 
+_WRAP_ENUM(ConverterResult, GConverterResult)
+_WRAP_ENUM(ConverterFlags, GConverterFlags)
 
 /** Converter - Data conversion interface.
  * Converter is implemented by objects that convert binary data in various
@@ -45,14 +44,11 @@ class Converter : public Glib::Interface
   _CLASS_INTERFACE(Converter, GConverter, G_CONVERTER, GConverterIface)
 
 public:
-  _WRAP_ENUM(Result, GConverterResult)
-  _WRAP_ENUM(Flags, GConverterFlags)
-
-  _WRAP_METHOD(Result convert(const void* inbuf, gsize inbuf_size, void* outbuf, gsize outbuf_size, Flags flags, gsize& bytes_read, gsize& bytes_written), g_converter_convert, errthrow)
+  _WRAP_METHOD(ConverterResult convert(const void* inbuf, gsize inbuf_size, void* outbuf, gsize outbuf_size, ConverterFlags flags, gsize& bytes_read, gsize& bytes_written), g_converter_convert, errthrow)
   _WRAP_METHOD(void reset(), g_converter_reset)
 
 #m4 _CONVERSION(`gsize*',`gsize&',`*($3)')
-  _WRAP_VFUNC(Result convert(const void* inbuf, gsize inbuf_size, void* outbuf, gsize outbuf_size, Flags flags, gsize& bytes_read, gsize& bytes_written), "convert", errthrow)
+  _WRAP_VFUNC(ConverterResult convert(const void* inbuf, gsize inbuf_size, void* outbuf, gsize outbuf_size, ConverterFlags flags, gsize& bytes_read, gsize& bytes_written), "convert", errthrow)
 
   _WRAP_VFUNC(void reset(), "reset")
 };
index 4f46d64..e18a328 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 8c0e39a..ae65e59 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/filterinputstream.h>
index b122ac3..e492031 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index eeb5d9d..1729aac 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/filteroutputstream.h>
index ed04a99..2961657 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 60fb023..31d50cd 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -25,6 +22,7 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(CredentialsType, GCredentialsType, NO_GTYPE)
 
 /** An object containing credentials.
  * The Credentials type is a reference-counted wrapper for native credentials.
@@ -57,14 +55,12 @@ protected:
   _IGNORE(g_credentials_new)
 
 public:
-  _WRAP_ENUM(Type, GCredentialsType, NO_GTYPE)
-
   _WRAP_CREATE()
 
   _WRAP_METHOD(Glib::ustring to_string() const, g_credentials_to_string)
 
-  _WRAP_METHOD(gpointer get_native(Type native_type), g_credentials_get_native)
-  _WRAP_METHOD(void set_native(Type native_type, gpointer native), g_credentials_set_native)
+  _WRAP_METHOD(gpointer get_native(CredentialsType native_type), g_credentials_get_native)
+  _WRAP_METHOD(void set_native(CredentialsType native_type, gpointer native), g_credentials_set_native)
   _WRAP_METHOD(bool is_same_user(const Glib::RefPtr<const Credentials>& other_credentials), g_credentials_is_same_user, errthrow)
 
   _WRAP_METHOD(uid_t get_unix_user(), g_credentials_get_unix_user, errthrow, ifdef G_OS_UNIX)
index 3665ac9..7ae9beb 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 0b5a8bc..4126c63 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/bufferedinputstream.h>
index 5e41c70..c2e4ec8 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 95c398a..a74dd46 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/bufferedoutputstream.h>
index b8012ef..2069b14 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ecd72ad..aafd8e2 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -39,10 +38,11 @@ _GMMPROC_EXTRA_NAMESPACE(DBus)
  * @newin{2,32}
  */
 class ActionGroup
-: public Glib::Object, public Gio::RemoteActionGroup
+: public Glib::Object, public ::Gio::ActionGroup, public RemoteActionGroup
 {
   _CLASS_GOBJECT(ActionGroup, GDBusActionGroup, G_DBUS_ACTION_GROUP, Glib::Object, GObject)
-  _IMPLEMENTS_INTERFACE(Gio::RemoteActionGroup)
+  _IMPLEMENTS_INTERFACE(::Gio::ActionGroup)
+  _IMPLEMENTS_INTERFACE(RemoteActionGroup)
 
 protected:
   _CTOR_DEFAULT
index 30f2366..09a2188 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ab5acd7..aa105e7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusconnection.h>
index 8c30743..d9f062c 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 931af72..03876c0 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 5fe37d9..6199e85 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -279,7 +278,7 @@ Connection::create_sync(const Glib::RefPtr<IOStream>& stream, const std::string&
   const Glib::RefPtr<AuthObserver>& observer, const Glib::RefPtr<Cancellable>& cancellable,
   ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(stream, guid, observer, cancellable, flags));
+  return Glib::RefPtr<Connection>(new Connection(stream, guid, observer, cancellable, flags));
 }
 
 // static
@@ -287,7 +286,7 @@ Glib::RefPtr<Connection>
 Connection::create_sync(const Glib::RefPtr<IOStream>& stream, const std::string& guid,
   const Glib::RefPtr<Cancellable>& cancellable, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(stream, guid, cancellable, flags));
+  return Glib::RefPtr<Connection>(new Connection(stream, guid, cancellable, flags));
 }
 
 // static
@@ -295,7 +294,7 @@ Glib::RefPtr<Connection>
 Connection::create_sync(const Glib::RefPtr<IOStream>& stream, const std::string& guid,
   const Glib::RefPtr<AuthObserver>& observer, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(stream, guid, observer, flags));
+  return Glib::RefPtr<Connection>(new Connection(stream, guid, observer, flags));
 }
 
 // static
@@ -303,7 +302,7 @@ Glib::RefPtr<Connection>
 Connection::create_sync(
   const Glib::RefPtr<IOStream>& stream, const std::string& guid, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(stream, guid, flags));
+  return Glib::RefPtr<Connection>(new Connection(stream, guid, flags));
 }
 
 // static
@@ -353,7 +352,7 @@ Connection::create_for_address_sync(const std::string& address,
   const Glib::RefPtr<AuthObserver>& observer, const Glib::RefPtr<Cancellable>& cancellable,
   ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(address, observer, cancellable, flags));
+  return Glib::RefPtr<Connection>(new Connection(address, observer, cancellable, flags));
 }
 
 // static
@@ -361,7 +360,7 @@ Glib::RefPtr<Connection>
 Connection::create_for_address_sync(
   const std::string& address, const Glib::RefPtr<Cancellable>& cancellable, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(address, cancellable, flags));
+  return Glib::RefPtr<Connection>(new Connection(address, cancellable, flags));
 }
 
 // static
@@ -369,14 +368,14 @@ Glib::RefPtr<Connection>
 Connection::create_for_address_sync(
   const std::string& address, const Glib::RefPtr<AuthObserver>& observer, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(address, observer, flags));
+  return Glib::RefPtr<Connection>(new Connection(address, observer, flags));
 }
 
 // static
 Glib::RefPtr<Connection>
 Connection::create_for_address_sync(const std::string& address, ConnectionFlags flags)
 {
-  return Glib::make_refptr_for_instance<Connection>(new Connection(address, flags));
+  return Glib::RefPtr<Connection>(new Connection(address, flags));
 }
 
 // static
index c779cc5..363e354 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -43,11 +42,11 @@ namespace DBus
 {
 
 _WRAP_ENUM(BusType, GBusType)
-_WRAP_ENUM(CallFlags, GDBusCallFlags, NO_GTYPE)
-_WRAP_ENUM(ConnectionFlags, GDBusConnectionFlags, NO_GTYPE)
-_WRAP_ENUM(SendMessageFlags, GDBusSendMessageFlags, NO_GTYPE)
-_WRAP_ENUM(SignalFlags, GDBusSignalFlags, NO_GTYPE)
-_WRAP_ENUM(SubtreeFlags, GDBusSubtreeFlags, NO_GTYPE)
+_WRAP_ENUM(CallFlags, GDBusCallFlags, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(ConnectionFlags, GDBusConnectionFlags, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(SendMessageFlags, GDBusSendMessageFlags, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(SignalFlags, GDBusSignalFlags, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(SubtreeFlags, GDBusSubtreeFlags, s#^DBUS_##, NO_GTYPE)
 
 _GMMPROC_EXTRA_NAMESPACE(DBus)
 
@@ -173,9 +172,9 @@ public:
    * Glib::ustring& signal_name, const Glib::VariantContainerBase& parameters);.
    * @endcode
    */
-  using SlotSignal = sigc::slot<void(const Glib::RefPtr<Connection>&,
+  using SlotSignal = sigc::slot<voidconst Glib::RefPtr<Connection>&,
     const Glib::ustring&, const Glib::ustring&, const Glib::ustring&,
-    const Glib::ustring&, const Glib::VariantContainerBase&)>;
+    const Glib::ustring&, const Glib::VariantContainerBase&>;
 
   /** Signature for slot used in add_filter().
    *  For example,
@@ -191,9 +190,9 @@ public:
    * drop a message can simply return <tt>0</tt>.  And filter function may
    * modify a message by copying it and return the copy.
    */
-  using SlotMessageFilter = sigc::slot<Glib::RefPtr<Message>(
+  using SlotMessageFilter = sigc::slot<Glib::RefPtr<Message>,
     const Glib::RefPtr<Connection>&,
-    const Glib::RefPtr<Message>&, bool)>;
+    const Glib::RefPtr<Message>&, bool>;
 
   /** Asynchronously connects to the message bus specified by @a bus_type.
    *
@@ -229,27 +228,27 @@ public:
     const Glib::RefPtr<AuthObserver>& observer,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new)
   static void create(const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create().
   static void create(const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
     const SlotAsyncReady& slot,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create().
   static void create(const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
     const SlotAsyncReady& slot,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_finish)
   /// @throw Glib::Error.
@@ -260,24 +259,24 @@ public:
     const Glib::RefPtr<AuthObserver>& observer,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_for_address)
   static void create_for_address(const std::string& address,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_address().
   static void create_for_address(const std::string& address,
     const Glib::RefPtr<AuthObserver>& observer,
     const SlotAsyncReady& slot,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_address().
   static void create_for_address(const std::string& address,
     const SlotAsyncReady& slot,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_for_address_finish)
   /// @throw Glib::Error.
@@ -290,7 +289,7 @@ public:
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_sync)
   /// @throw Glib::Error.
@@ -298,20 +297,20 @@ public:
     const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_sync().
   static Glib::RefPtr<Connection> create_sync(
     const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_sync().
   static Glib::RefPtr<Connection> create_sync(
     const Glib::RefPtr<IOStream>& stream,
     const std::string& guid,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_for_address_sync)
   /// @throw Glib::Error.
@@ -319,25 +318,25 @@ public:
     const std::string& address,
     const Glib::RefPtr<AuthObserver>& observer,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_connection_new_for_address_sync)
   /// @throw Glib::Error.
   static Glib::RefPtr<Connection> create_for_address_sync(
     const std::string& address,
     const Glib::RefPtr<Cancellable>& cancellable,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_address_sync().
   static Glib::RefPtr<Connection> create_for_address_sync(
     const std::string& address,
     const Glib::RefPtr<AuthObserver>& observer,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_address_sync().
   static Glib::RefPtr<Connection> create_for_address_sync(
     const std::string& address,
-    ConnectionFlags flags = Gio::DBus::ConnectionFlags::NONE);
+    ConnectionFlags flags = Gio::DBus::CONNECTION_FLAGS_NONE);
 
   /** Closes the connection. Note that this never causes the process to exit
    * (this might only happen if the other end of a shared message bus
@@ -489,11 +488,11 @@ public:
 
   /// A send_message() without an "out_serial" parameter.
   bool send_message(const Glib::RefPtr<Message>& message,
-    SendMessageFlags flags = Gio::DBus::SendMessageFlags::NONE);
+    SendMessageFlags flags = Gio::DBus::SEND_MESSAGE_FLAGS_NONE);
 
   /** Asynchronously sends message to the peer represented by the connection.
    *
-   * Unless flags contain the Gio::DBus::SendMessageFlags::PRESERVE_SERIAL
+   * Unless flags contain the Gio::DBus::SEND_MESSAGE_FLAGS_PRESERVE_SERIAL
    * flag, the serial number will be assigned by the connection and set on
    * message via Gio::DBus::Message::set_serial().
    *
@@ -509,7 +508,7 @@ public:
    * send_message_with_reply_sync() for the synchronous version.
    *
    * Note that message must be unlocked, unless flags contain the
-   * Gio::DBus::SendMessageFlags::PRESERVE_SERIAL flag.
+   * Gio::DBus::SEND_MESSAGE_FLAGS_PRESERVE_SERIAL flag.
    *
    * See the C API docs for examples.
    *
@@ -542,7 +541,7 @@ public:
    * reached. See send_message_with_reply() for the asynchronous version of
    * this method.
    *
-   * Unless flags contain the Gio::DBus::SendMessageFlags::PRESERVE_SERIAL
+   * Unless flags contain the Gio::DBus::SEND_MESSAGE_FLAGS_PRESERVE_SERIAL
    * flag, the serial number will be assigned by the connection and set on
    * message via Gio::DBus::Message::set_serial().
    *
@@ -559,7 +558,7 @@ public:
    * See the C API docs for examples.
    *
    * Note that message must be unlocked, unless flags contain the
-   * Gio::DBus::SendMessageFlags::PRESERVE_SERIAL flag.
+   * Gio::DBus::SEND_MESSAGE_FLAGS_PRESERVE_SERIAL flag.
    *
    * @param message A Message.
    * @param cancellable A Cancellable.
@@ -642,7 +641,7 @@ public:
     const Glib::RefPtr<Cancellable>&    cancellable,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
   _IGNORE(g_dbus_connection_call)
 
@@ -655,7 +654,7 @@ public:
     const SlotAsyncReady&               slot,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
 
   /** Finishes an operation started with call().
@@ -709,7 +708,7 @@ public:
     const Glib::RefPtr<Cancellable>&    cancellable,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
   _IGNORE(g_dbus_connection_call_sync)
 
@@ -721,7 +720,7 @@ public:
     const Glib::VariantContainerBase&   parameters,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
 
 #ifdef G_OS_UNIX
@@ -760,7 +759,7 @@ public:
     const Glib::RefPtr<UnixFDList>&     fd_list,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
   _IGNORE(g_dbus_connection_call_with_unix_fd_list)
 
@@ -776,7 +775,7 @@ public:
     const Glib::RefPtr<UnixFDList>&     fd_list,
     const Glib::ustring&                bus_name = Glib::ustring(),
     int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE,
+    CallFlags                           flags = Gio::DBus::CALL_FLAGS_NONE,
     const Glib::VariantType&            reply_type = Glib::VariantType());
 #endif // G_OS_UNIX
 
@@ -801,7 +800,7 @@ public:
       Glib::RefPtr<UnixFDList>&           out_fd_list{.>>},
       const Glib::ustring&                bus_name{.NULL} = Glib::ustring(),
       int                                 timeout_msec{.} = -1,
-      CallFlags                           flags{.} = Gio::DBus::CallFlags::NONE,
+      CallFlags                           flags{.} = Gio::DBus::CALL_FLAGS_NONE,
       const Glib::VariantType&            reply_type{.} = Glib::VariantType()
     ),
     g_dbus_connection_call_with_unix_fd_list_sync, errthrow, ifdef G_OS_UNIX
@@ -868,7 +867,7 @@ public:
     const Glib::ustring& member = Glib::ustring(),
     const Glib::ustring& object_path = Glib::ustring(),
     const Glib::ustring& arg0 = Glib::ustring(),
-    SignalFlags flags = Gio::DBus::SignalFlags::NONE);
+    SignalFlags flags = Gio::DBus::SIGNAL_FLAGS_NONE);
   _IGNORE(g_dbus_connection_signal_subscribe)
 
   _WRAP_METHOD(void signal_unsubscribe(guint subscription_id), g_dbus_connection_signal_unsubscribe)
@@ -977,7 +976,7 @@ public:
    *
    * When handling remote calls into any node in the subtree, first the
    * enumerate slot is used to check if the node exists. If the node
-   * exists or the Gio::DBus::SubtreeFlags::DISPATCH_TO_UNENUMERATED_NODES flag
+   * exists or the Gio::DBus::SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES flag
    * is set the introspection slot is used to check if the node supports the
    * requested method. If so, the dispatch function is used to determine where
    * to dispatch the call. The collected InterfaceVTable will be used to
@@ -1007,7 +1006,7 @@ public:
    */
   guint register_subtree(const Glib::ustring& object_path,
     const SubtreeVTable& vtable,
-    SubtreeFlags flags = Gio::DBus::SubtreeFlags::NONE);
+    SubtreeFlags flags = Gio::DBus::SUBTREE_FLAGS_NONE);
   _IGNORE(g_dbus_connection_register_subtree)
 
   _WRAP_METHOD(bool unregister_subtree(guint registration_id), g_dbus_connection_unregister_subtree)
index 555a34b..e3c93dc 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 1e52dbb..95bfe59 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
index d4e3490..f9dae85 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a2c8ece..084fa0c 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(giomm,gio)
index af4aa8e..4d2a74d 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 485d2b5..8725f38 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -38,6 +35,8 @@ class Object;
 
 _GMMPROC_EXTRA_NAMESPACE(DBus)
 
+//TODO: Have Proxy derive from this interface when there is an ABI break.
+
 /** Interface - Base type for D-Bus interfaces.
  * The Interface type is the base type for D-Bus interfaces both on the service
  * side (see InterfaceSkeleton) and client side (see Proxy).
index 50e1f9f..0c0b4e8 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusconnection.h>
 #include <giomm/dbusintrospection.h>
 #include <giomm/dbusmethodinvocation.h>
-
-using Flags = Gio::DBus::InterfaceSkeleton::Flags;
index ef7b1a2..18612d3 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -28,6 +27,8 @@ namespace Gio
 namespace DBus
 {
 
+_WRAP_ENUM(InterfaceSkeletonFlags, GDBusInterfaceSkeletonFlags, NO_GTYPE)
+
 class InterfaceInfo;
 class Connection;
 class MethodInvocation;
@@ -45,8 +46,6 @@ class InterfaceSkeleton
   _IMPLEMENTS_INTERFACE(Interface)
 
 public:
-  _WRAP_ENUM(Flags, GDBusInterfaceSkeletonFlags, NO_GTYPE)
-
   _WRAP_METHOD(void flush(), g_dbus_interface_skeleton_flush)
 
   _WRAP_METHOD(Glib::RefPtr<InterfaceInfo> get_info(), g_dbus_interface_skeleton_get_info)
@@ -72,10 +71,10 @@ public:
 
   _WRAP_METHOD(Glib::ustring get_object_path() const, g_dbus_interface_skeleton_get_object_path)
 
-  _WRAP_METHOD(Flags get_flags() const, g_dbus_interface_skeleton_get_flags)
-  _WRAP_METHOD(void set_flags(Flags flags), g_dbus_interface_skeleton_set_flags)
+  _WRAP_METHOD(InterfaceSkeletonFlags get_flags() const, g_dbus_interface_skeleton_get_flags)
+  _WRAP_METHOD(void set_flags(InterfaceSkeletonFlags flags), g_dbus_interface_skeleton_set_flags)
 
-  _WRAP_PROPERTY("g-flags", Flags)
+  _WRAP_PROPERTY("g-flags", InterfaceSkeletonFlags)
 
 #m4 _CONVERSION(`GDBusMethodInvocation*',`const Glib::RefPtr<MethodInvocation>&',`Glib::wrap($3, true)')
   _WRAP_SIGNAL(bool authorize_method(const Glib::RefPtr<MethodInvocation>& invocation), "g_authorize_method")
index c6ffd89..d47b5a9 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index c4081e7..287c2c4 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusmethodinvocation.h>
@@ -63,14 +60,14 @@ public:
    * @endcode
    */
   using SlotInterfaceMethodCall = sigc::slot<
-    void(
+    void,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::VariantContainerBase&,
-    const Glib::RefPtr<MethodInvocation>&)
+    const Glib::RefPtr<MethodInvocation>&
     >;
 
   /** The type for a slot which handles getting a property for a D-Bus
@@ -85,13 +82,13 @@ public:
    * @throw Glib::Error.
    */
   using SlotInterfaceGetProperty = sigc::slot<
-    void(
+    void,
     Glib::VariantBase&,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
-    const Glib::ustring&)
+    const Glib::ustring&
     >;
 
   /** The type for a slot which handles setting a property for a D-Bus
@@ -106,13 +103,13 @@ public:
    * @throw Glib::Error.
    */
   using SlotInterfaceSetProperty = sigc::slot<
-    bool(
+    bool,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
-    const Glib::VariantBase&)
+    const Glib::VariantBase&
     >;
 
   /** Constructs a new InterfaceVTable using the specified slots.
index 4a37d37..43f761c 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
index a99d4e3..d56f6da 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <glibmm/refptr.h>
 #include <gio/gio.h>
-#include <vector>
+#include <glibmm/arrayhandle.h>
 
 _DEFS(giomm,gio)
 _PINCLUDE(glibmm/private/object_p.h)
@@ -28,7 +26,7 @@ namespace Gio
 namespace DBus
 {
 
-_WRAP_ENUM(PropertyInfoFlags, GDBusPropertyInfoFlags, NO_GTYPE)
+_WRAP_ENUM(PropertyInfoFlags, GDBusPropertyInfoFlags, s#^DBUS_##, NO_GTYPE)
 
 /** Stores information about an annotation.
  *
@@ -41,8 +39,8 @@ class AnnotationInfo final
   _IGNORE(g_dbus_annotation_info_ref, g_dbus_annotation_info_unref)
 
 public:
-#m4 _CONVERSION(`const std::vector<Glib::RefPtr<AnnotationInfo>>&', `GDBusAnnotationInfo**',`Glib::ArrayHandler<Glib::RefPtr<AnnotationInfo>>::vector_to_array($3).data()')
-  _WRAP_METHOD(static Glib::ustring info_lookup(const std::vector<Glib::RefPtr<AnnotationInfo>>&  annotations, const Glib::ustring& name), g_dbus_annotation_info_lookup)
+#m4 _CONVERSION(`const Glib::ArrayHandle< Glib::RefPtr<AnnotationInfo> >&', `GDBusAnnotationInfo**', `const_cast<GDBusAnnotationInfo**>($3.data())')
+  _WRAP_METHOD(static Glib::ustring info_lookup(const Glib::ArrayHandle< Glib::RefPtr<AnnotationInfo> >& annotations, const Glib::ustring& name), g_dbus_annotation_info_lookup)
 };
 
 /** ArgInfo - Stores information about an argument for a method or a
index b8012ef..2069b14 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6ada9ed..f704350 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/menumodel.h>
index 751fbfd..50fe956 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 7ae6f32..2207604 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -32,10 +31,10 @@ namespace Gio
 namespace DBus
 {
 
-_WRAP_ENUM(MessageType, GDBusMessageType, NO_GTYPE)
-_WRAP_ENUM(MessageFlags, GDBusMessageFlags, NO_GTYPE)
-_WRAP_ENUM(MessageHeaderField, GDBusMessageHeaderField, NO_GTYPE)
-_WRAP_ENUM(CapabilityFlags, GDBusCapabilityFlags, NO_GTYPE)
+_WRAP_ENUM(MessageType, GDBusMessageType, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(MessageFlags, GDBusMessageFlags, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(MessageHeaderField, GDBusMessageHeaderField, s#^DBUS_##, NO_GTYPE)
+_WRAP_ENUM(CapabilityFlags, GDBusCapabilityFlags, s#^DBUS_##, NO_GTYPE)
 
 _GMMPROC_EXTRA_NAMESPACE(DBus)
 
@@ -76,7 +75,7 @@ public:
   // Ignore variable argument functions.
   _IGNORE(g_dbus_message_new_method_error, g_dbus_message_new_method_error_valist)
 
-  _WRAP_METHOD(static Glib::RefPtr<Message> create_from_blob(const guchar* blob,  gsize blob_len, CapabilityFlags capabilities = CapabilityFlags::NONE), g_dbus_message_new_from_blob, errthrow)
+  _WRAP_METHOD(static Glib::RefPtr<Message> create_from_blob(const guchar* blob,  gsize blob_len, CapabilityFlags capabilities = CAPABILITY_FLAGS_NONE), g_dbus_message_new_from_blob, errthrow)
 
 
   _WRAP_METHOD(Glib::ustring print(guint indent), g_dbus_message_print)
@@ -138,8 +137,8 @@ public:
 
   _WRAP_METHOD(void set_header(MessageHeaderField header_field, const Glib::VariantBase& value), g_dbus_message_set_header)
 
-  #m4 _CONVERSION(`guchar*',`std::vector<guchar>',`Glib::ArrayHandler<guchar>::array_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<guchar> get_header_fields() const, g_dbus_message_get_header_fields)
+  #m4 _CONVERSION(`guchar*',`Glib::ArrayHandle<guchar>',`Glib::ArrayHandle<guchar>($3)')
+  _WRAP_METHOD(Glib::ArrayHandle<guchar> get_header_fields() const, g_dbus_message_get_header_fields)
 
   _WRAP_METHOD(Glib::ustring get_destination() const, g_dbus_message_get_destination)
   _WRAP_METHOD(void set_destination(const Glib::ustring& value), g_dbus_message_set_destination)
@@ -169,7 +168,7 @@ public:
 
   _WRAP_METHOD(static gssize bytes_needed(const guchar* blob, gsize blob_len), g_dbus_message_bytes_needed, errthrow)
 
-  _WRAP_METHOD(guchar* to_blob(gsize& out_size, CapabilityFlags capabilities = CapabilityFlags::NONE), g_dbus_message_to_blob, errthrow)
+  _WRAP_METHOD(guchar* to_blob(gsize& out_size, CapabilityFlags capabilities = CAPABILITY_FLAGS_NONE), g_dbus_message_to_blob, errthrow)
 
   _WRAP_METHOD(void to_exception(), g_dbus_message_to_gerror, errthrow)
 
index 02c2c65..870b3f7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 84fecef..65e81c0 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <giomm/dbusconnection.h>
index 68334df..7e1543d 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6979d82..3be72cf 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index db1a37b..81a7a9f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 596171e..5971bf2 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusconnection.h>
@@ -25,7 +26,7 @@ namespace Gio
 namespace DBus
 {
 
-_WRAP_ENUM(BusNameOwnerFlags, GBusNameOwnerFlags)
+_WRAP_ENUM(BusNameOwnerFlags, GBusNameOwnerFlags, s#^DBUS_##)
 
 /** For example,
  * void on_bus_acquired(const Glib::RefPtr<Gio::DBus::Connection>& connection,
@@ -33,21 +34,21 @@ _WRAP_ENUM(BusNameOwnerFlags, GBusNameOwnerFlags)
  * @newin{2,28}
  * @ingroup DBus
  */
-using SlotBusAcquired = sigc::slot<void(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring)>;
+using SlotBusAcquired = sigc::slot<void, const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring>;
 
 /** For example,
  * void on_name_acquired(const Glib::RefPtr<Gio::DBus::Connection>& connection,
  * const Glib::ustring& name);
  * @ingroup DBus
  */
-using SlotNameAcquired = sigc::slot<void(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring)>;
+using SlotNameAcquired = sigc::slot<void, const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring>;
 
 /** For example,
  * void on_name_lost(const Glib::RefPtr<Gio::DBus::Connection>& connection,
  * const Glib::ustring& name);
  * @ingroup DBus
  */
-using SlotNameLost = sigc::slot<void(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring)>;
+using SlotNameLost = sigc::slot<void, const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring>;
 
 //TODO: See https://bugzilla.gnome.org/show_bug.cgi?id=646427 about the apparent uselessness of SlotNameAcquired.
 //TODO: Add example from C API in class docs.
@@ -114,7 +115,7 @@ guint own_name(
   const SlotBusAcquired& bus_acquired_slot = SlotBusAcquired(),
   const SlotNameAcquired& name_acquired_slot = SlotNameAcquired(),
   const SlotNameLost& name_lost_slot = SlotNameLost(),
-  BusNameOwnerFlags flags = Gio::DBus::BusNameOwnerFlags::NONE
+  BusNameOwnerFlags flags = Gio::DBus::BUS_NAME_OWNER_FLAGS_NONE
 );
 _IGNORE(g_bus_own_name)
 
index 4bc9ecd..eefebcc 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -146,7 +145,7 @@ Proxy::create_sync(const Glib::RefPtr<Connection>& connection, const Glib::ustri
   const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<InterfaceInfo>& info,
   ProxyFlags flags)
 {
-  return Glib::make_refptr_for_instance<Proxy>(
+  return Glib::RefPtr<Proxy>(
     new Proxy(connection, name, object_path, interface_name, cancellable, info, flags));
 }
 
@@ -155,7 +154,7 @@ Proxy::create_sync(const Glib::RefPtr<Connection>& connection, const Glib::ustri
   const Glib::ustring& object_path, const Glib::ustring& interface_name,
   const Glib::RefPtr<InterfaceInfo>& info, ProxyFlags flags)
 {
-  return Glib::make_refptr_for_instance<Proxy>(new Proxy(connection, name, object_path, interface_name, info, flags));
+  return Glib::RefPtr<Proxy>(new Proxy(connection, name, object_path, interface_name, info, flags));
 }
 
 void
@@ -181,7 +180,7 @@ Proxy::create_for_bus_sync(BusType bus_type, const Glib::ustring& name,
   const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<InterfaceInfo>& info,
   ProxyFlags flags)
 {
-  return Glib::make_refptr_for_instance<Proxy>(
+  return Glib::RefPtr<Proxy>(
     new Proxy(bus_type, name, object_path, interface_name, cancellable, info, flags));
 }
 
@@ -190,7 +189,7 @@ Proxy::create_for_bus_sync(BusType bus_type, const Glib::ustring& name,
   const Glib::ustring& object_path, const Glib::ustring& interface_name,
   const Glib::RefPtr<InterfaceInfo>& info, ProxyFlags flags)
 {
-  return Glib::make_refptr_for_instance<Proxy>(new Proxy(bus_type, name, object_path, interface_name, info, flags));
+  return Glib::RefPtr<Proxy>(new Proxy(bus_type, name, object_path, interface_name, info, flags));
 }
 
 void
@@ -202,101 +201,6 @@ Proxy::get_cached_property(Glib::VariantBase& property, const Glib::ustring& pro
   property.init(g_variant, false /* no extra reference needed */);
 }
 
-void
-Proxy::call(const Glib::ustring& method_name, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, const Glib::VariantContainerBase& parameters,
-  int timeout_msec, CallFlags flags)
-{
-  // Create a copy of the slot.
-  // A pointer to it will be passed through the callback's data parameter
-  // and deleted in the callback.
-  auto slot_copy = new SlotAsyncReady(slot);
-
-  g_dbus_proxy_call(gobj(), method_name.c_str(), const_cast<GVariant*>(parameters.gobj()),
-    static_cast<GDBusCallFlags>(flags), timeout_msec, Glib::unwrap(cancellable),
-    &SignalProxy_async_callback, slot_copy);
-}
-
-void
-Proxy::call(const Glib::ustring& method_name, const SlotAsyncReady& slot,
-  const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags)
-{
-  // Create a copy of the slot.
-  // A pointer to it will be passed through the callback's data parameter
-  // and deleted in the callback.
-  auto slot_copy = new SlotAsyncReady(slot);
-
-  g_dbus_proxy_call(gobj(), method_name.c_str(), const_cast<GVariant*>(parameters.gobj()),
-    static_cast<GDBusCallFlags>(flags), timeout_msec, nullptr, &SignalProxy_async_callback,
-    slot_copy);
-}
-
-Glib::VariantContainerBase
-Proxy::call_sync(const Glib::ustring& method_name, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::VariantContainerBase& parameters, int timeout_msec, CallFlags flags)
-{
-  GError* g_error = nullptr;
-
-  GVariant* const gvariant =
-    g_dbus_proxy_call_sync(gobj(), method_name.c_str(), const_cast<GVariant*>(parameters.gobj()),
-      static_cast<GDBusCallFlags>(flags), timeout_msec, Glib::unwrap(cancellable), &g_error);
-
-  if (g_error)
-    ::Glib::Error::throw_exception(g_error);
-
-  return Glib::VariantContainerBase(gvariant, false); // Dont' take an extra reference.
-}
-
-Glib::VariantContainerBase
-Proxy::call_sync(const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters,
-  int timeout_msec, CallFlags flags)
-{
-  GError* g_error = nullptr;
-
-  GVariant* const gvariant =
-    g_dbus_proxy_call_sync(gobj(), method_name.c_str(), const_cast<GVariant*>(parameters.gobj()),
-      static_cast<GDBusCallFlags>(flags), timeout_msec, nullptr, &g_error);
-
-  if (g_error)
-    ::Glib::Error::throw_exception(g_error);
-
-  return Glib::VariantContainerBase(gvariant, false); // Dont' take an extra reference.
-}
-
-#ifdef G_OS_UNIX
-// With a UnixFDList.
-void
-Proxy::call(const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters,
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::RefPtr<UnixFDList>& fd_list, int timeout_msec, CallFlags flags)
-{
-  // Create a copy of the slot.
-  // A pointer to it will be passed through the callback's data parameter
-  // and deleted in the callback.
-  auto slot_copy = new SlotAsyncReady(slot);
-
-  g_dbus_proxy_call_with_unix_fd_list(gobj(), method_name.c_str(),
-    const_cast<GVariant*>(parameters.gobj()), static_cast<GDBusCallFlags>(flags), timeout_msec,
-    Glib::unwrap(fd_list), Glib::unwrap(cancellable), &SignalProxy_async_callback, slot_copy);
-}
-
-// Non-cancellable version (with a UnixFDList).
-void
-Proxy::call(const Glib::ustring& method_name, const Glib::VariantContainerBase& parameters,
-  const SlotAsyncReady& slot, const Glib::RefPtr<UnixFDList>& fd_list, int timeout_msec,
-  CallFlags flags)
-{
-  // Create a copy of the slot.
-  // A pointer to it will be passed through the callback's data parameter
-  // and deleted in the callback.
-  auto slot_copy = new SlotAsyncReady(slot);
-
-  g_dbus_proxy_call_with_unix_fd_list(gobj(), method_name.c_str(),
-    const_cast<GVariant*>(parameters.gobj()), static_cast<GDBusCallFlags>(flags), timeout_msec,
-    Glib::unwrap(fd_list), nullptr, &SignalProxy_async_callback, slot_copy);
-}
-#endif // G_OS_UNIX
-
 } // namespace DBus
 
 } // namespace Gio
index bedcb83..de241b7 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
 #include <giomm/asyncresult.h>
 #include <giomm/dbusintrospection.h>
-#include <giomm/dbusinterface.h>
 #include <giomm/initable.h>
 #include <giomm/asyncinitable.h>
 #include <giomm/dbusconnection.h>
@@ -34,7 +32,7 @@ namespace DBus
 //The GMMPROC_EXTRA_NAMESPACE() macro is a hint to generate_wrap_init.pl to put it in the DBus sub-namespace
 _GMMPROC_EXTRA_NAMESPACE(DBus)
 
-_WRAP_ENUM(ProxyFlags, GDBusProxyFlags, NO_GTYPE)
+_WRAP_ENUM(ProxyFlags, GDBusProxyFlags, s#^DBUS_##, NO_GTYPE)
 
 /** A client-side proxy.
  * This is a base class used for proxies to access a D-Bus interface on
@@ -65,13 +63,11 @@ _WRAP_ENUM(ProxyFlags, GDBusProxyFlags, NO_GTYPE)
 class Proxy
 : public Glib::Object,
   public Initable,
-  public AsyncInitable,
-  public Interface
+  public AsyncInitable
 {
   _CLASS_GOBJECT(Proxy, GDBusProxy, G_DBUS_PROXY, Glib::Object, GObject)
   _IMPLEMENTS_INTERFACE(Initable)
   _IMPLEMENTS_INTERFACE(AsyncInitable)
-  _IMPLEMENTS_INTERFACE(DBus::Interface)
 
 protected:
 
@@ -82,7 +78,7 @@ protected:
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(const Glib::RefPtr<Connection>& connection,
     const Glib::ustring& name,
@@ -90,7 +86,7 @@ protected:
     const Glib::ustring& interface_name,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(const Glib::RefPtr<Connection>& connection,
     const Glib::ustring& name,
@@ -98,14 +94,14 @@ protected:
     const Glib::ustring& interface_name,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(const Glib::RefPtr<Connection>& connection,
     const Glib::ustring& name,
     const Glib::ustring& object_path,
     const Glib::ustring& interface_name,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(BusType bus_type,
     const Glib::ustring& name,
@@ -114,7 +110,7 @@ protected:
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(BusType bus_type,
     const Glib::ustring& name,
@@ -122,7 +118,7 @@ protected:
     const Glib::ustring& interface_name,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(BusType bus_type,
     const Glib::ustring& name,
@@ -130,14 +126,14 @@ protected:
     const Glib::ustring& interface_name,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   Proxy(BusType bus_type,
     const Glib::ustring& name,
     const Glib::ustring& object_path,
     const Glib::ustring& interface_name,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
 public:
 
@@ -149,7 +145,7 @@ public:
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   /// Non-cancellable version of create().
   static void create(const Glib::RefPtr<Connection>& connection,
@@ -158,7 +154,7 @@ public:
     const Glib::ustring& interface_name,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_proxy_new_finish)
   /// @throw Glib::Error.
@@ -172,7 +168,7 @@ public:
     const Glib::ustring& interface_name,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   /// Non-cancellable version of create_sync().
   static Glib::RefPtr<Proxy>
@@ -181,7 +177,7 @@ public:
     const Glib::ustring& object_path,
     const Glib::ustring& interface_name,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_proxy_new_for_bus)
   static void create_for_bus(BusType bus_type,
@@ -191,7 +187,7 @@ public:
     const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_bus().
   static void create_for_bus(BusType bus_type,
@@ -200,7 +196,7 @@ public:
     const Glib::ustring& interface_name,
     const SlotAsyncReady& slot,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_proxy_new_for_bus_finish)
   /// @throw Glib::Error.
@@ -214,7 +210,7 @@ public:
     const Glib::ustring& interface_name,
     const Glib::RefPtr<Cancellable>& cancellable,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   /// Non-cancellable version of create_for_bus_sync().
   static Glib::RefPtr<Proxy>
@@ -223,7 +219,7 @@ public:
     const Glib::ustring& object_path,
     const Glib::ustring& interface_name,
     const Glib::RefPtr<InterfaceInfo>& info = Glib::RefPtr<InterfaceInfo>(),
-    ProxyFlags flags = ProxyFlags::NONE);
+    ProxyFlags flags = PROXY_FLAGS_NONE);
 
   _WRAP_METHOD(ProxyFlags get_flags() const, g_dbus_proxy_get_flags)
 
@@ -256,31 +252,24 @@ public:
 
   _WRAP_METHOD(void set_cached_property(const Glib::ustring& property_name, const Glib::VariantBase& value), g_dbus_proxy_set_cached_property)
 
-#m4 _CONVERSION(`gchar**', `std::vector<Glib::ustring>', `Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> get_cached_property_names() const, g_dbus_proxy_get_cached_property_names)
+#m4 _CONVERSION(`gchar**', `Glib::StringArrayHandle', `Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle get_cached_property_names() const, g_dbus_proxy_get_cached_property_names)
 
   _WRAP_METHOD(void set_interface_info(const Glib::RefPtr<InterfaceInfo>& info), g_dbus_proxy_set_interface_info)
   _WRAP_METHOD(Glib::RefPtr<InterfaceInfo> get_interface_info(), g_dbus_proxy_get_interface_info)
   _WRAP_METHOD(Glib::RefPtr<const InterfaceInfo> get_interface_info() const, g_dbus_proxy_get_interface_info, constversion)
 
-  _WRAP_METHOD_DOCS_ONLY(g_dbus_proxy_call)
-  void call(
-    const Glib::ustring& method_name,
-    const SlotAsyncReady& slot,
-    const Glib::RefPtr<Cancellable>& cancellable,
-    const Glib::VariantContainerBase& parameters = Glib::VariantContainerBase(),
-    int timeout_msec = -1,
-    CallFlags flags = Gio::DBus::CallFlags::NONE
-  );
-
-  /// A non-cancellable version of call().
-  void call(
-    const Glib::ustring& method_name,
-    const SlotAsyncReady& slot,
-    const Glib::VariantContainerBase& parameters = Glib::VariantContainerBase(),
-    int timeout_msec = -1,
-    CallFlags flags = Gio::DBus::CallFlags::NONE
-  );
+  _WRAP_METHOD(
+    void call(
+      const Glib::ustring&               method_name{.},
+      const SlotAsyncReady&              slot{callback?},
+      const Glib::RefPtr<Cancellable>&   cancellable{.?},
+      const Glib::VariantContainerBase&  parameters{.} = Glib::VariantContainerBase(),
+      int                                timeout_msec{.} = -1,
+      CallFlags                          flags{.} = Gio::DBus::CALL_FLAGS_NONE
+    ),
+    g_dbus_proxy_call, slot_name slot, slot_callback SignalProxy_async_callback
+  )
 
   /** Finishes an operation started with call().
    *
@@ -292,81 +281,30 @@ public:
    */
   _WRAP_METHOD(Glib::VariantContainerBase call_finish(const Glib::RefPtr<AsyncResult>& res), g_dbus_proxy_call_finish, errthrow)
 
-//TODO: Use _WRAP_METHOD() for this?
-  /** Synchronously invokes the method_name method on proxy.
-   * See call(), the asynchronous version of this method for more information.
-   *
-   * @param method_name Name of method to invoke.
-   * @param timeout_msec The timeout in milliseconds or -1 to use the proxy
-   * default timeout.
-   * @param flags Flags from the CallFlags enumeration.
-   * @param parameters A Glib::VariantContainerBase tuple with parameters for the
-   * signal.
-   * @param cancellable A Cancellable.
-   * @result A Variant tuple with return values.
-   *
-   * @throw Glib::Error.
-   */
-  Glib::VariantContainerBase call_sync(
-    const Glib::ustring& method_name,
-    const Glib::RefPtr<Cancellable>& cancellable,
-    const Glib::VariantContainerBase& parameters = Glib::VariantContainerBase(),
-    int timeout_msec = -1,
-    CallFlags flags = Gio::DBus::CallFlags::NONE
-  );
-  _IGNORE(g_dbus_proxy_call_sync)
-
-  /// A non-cancellable version of call_sync().
-  Glib::VariantContainerBase call_sync(
-    const Glib::ustring& method_name,
-    const Glib::VariantContainerBase& parameters = Glib::VariantContainerBase(),
-    int timeout_msec = -1,
-    CallFlags flags = Gio::DBus::CallFlags::NONE
-  );
-
-
-#ifdef G_OS_UNIX
-//TODO: Use _WRAP_METHOD() for this?
-  /** Like call() but also takes a GUnixFDList object.
-   * This method is only available on UNIX.
-   *
-   * This is an asynchronous method. When the operation is finished, callback
-   * will be invoked in the thread-default main loop of the thread you are
-   * calling this method from. You can then call call_with_unix_fd_finish() to
-   * get the result of the operation. See call_sync() for the synchronous
-   * version of this function.
-   *
-   * @param method_name The name of the method to invoke.
-   * @param parameters A Glib::VariantContainerBase tuple with parameters for the
-   * method or <tt>0</tt> if not passing parameters.
-   * @param slot A SlotAsyncReady to call when the request is satisfied.
-   * @param cancellable A Cancellable.
-   * @param fd_list A UnixFDList.
-   * @param timeout_msec The timeout in milliseconds, -1 to use the default
-   * timeout or G_MAXINT for no timeout.
-   * @param flags Flags from the Gio::DBus::CallFlags enumeration.
-   * @newin{2,34}
-   */
-  void call(
-    const Glib::ustring&                method_name,
-    const Glib::VariantContainerBase&   parameters,
-    const SlotAsyncReady&               slot,
-    const Glib::RefPtr<Cancellable>&    cancellable,
-    const Glib::RefPtr<UnixFDList>&     fd_list,
-    int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE);
-  _IGNORE(g_dbus_proxy_call_with_unix_fd_list)
-
-  /** A non-cancellable version of call() (with a UnixFDList).
-   * @newin{2,34}
-   */
-  void call(
-    const Glib::ustring&                method_name,
-    const Glib::VariantContainerBase&   parameters,
-    const SlotAsyncReady&               slot,
-    const Glib::RefPtr<UnixFDList>&     fd_list,
-    int                                 timeout_msec = -1,
-    CallFlags                           flags = Gio::DBus::CallFlags::NONE);
+  _WRAP_METHOD(
+    Glib::VariantContainerBase call_sync(
+      const Glib::ustring&               method_name{.},
+      const Glib::RefPtr<Cancellable>&   cancellable{.?},
+      const Glib::VariantContainerBase&  parameters{.} = Glib::VariantContainerBase(),
+      int                                timeout_msec{.} = -1,
+      CallFlags                          flags{.} = Gio::DBus::CALL_FLAGS_NONE
+    ),
+    g_dbus_proxy_call_sync, errthrow
+  )
+
+  _WRAP_METHOD(
+    void call(
+      const Glib::ustring&                method_name{.},
+      const Glib::VariantContainerBase&   parameters{.},
+      const SlotAsyncReady&               slot{callback?},
+      const Glib::RefPtr<Cancellable>&    cancellable{.?},
+      const Glib::RefPtr<UnixFDList>&     fd_list{.},
+      int                                 timeout_msec{.} = -1,
+      CallFlags                           flags{.} = Gio::DBus::CALL_FLAGS_NONE
+    ),
+    g_dbus_proxy_call_with_unix_fd_list, ifdef G_OS_UNIX,
+      slot_name slot, slot_callback SignalProxy_async_callback
+  )
 
   /** Finishes an operation started with call() (with a UnixFDList).
    * @param res A AsyncResult obtained from the SlotAsyncReady passed to
@@ -377,7 +315,6 @@ public:
    * @newin{2,34}
    */
   _WRAP_METHOD(Glib::VariantContainerBase call_finish(const Glib::RefPtr<AsyncResult>& res{.}, Glib::RefPtr<UnixFDList>& out_fd_list{.>>}), g_dbus_proxy_call_with_unix_fd_list_finish, errthrow, ifdef G_OS_UNIX)
-#endif // G_OS_UNIX
 
   _WRAP_METHOD(
     Glib::VariantContainerBase call_sync(
@@ -387,7 +324,7 @@ public:
       const Glib::RefPtr<UnixFDList>&     fd_list{.},
       Glib::RefPtr<UnixFDList>&           out_fd_list{.>>},
       int                                 timeout_msec{.} = -1,
-      CallFlags                           flags{.} = Gio::DBus::CallFlags::NONE
+      CallFlags                           flags{.} = Gio::DBus::CALL_FLAGS_NONE
     ),
     g_dbus_proxy_call_with_unix_fd_list_sync, errthrow, ifdef G_OS_UNIX
   )
index 403bd3b..cd8ca6d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -21,8 +20,6 @@
 #include <giomm/dbusconnection.h>
 #include <giomm/dbusauthobserver.h>
 
-using Flags = Gio::DBus::Server::Flags;
-
 namespace Gio
 {
 
@@ -31,7 +28,7 @@ namespace DBus
 
 Server::Server(const std::string& address, const std::string& guid,
   const Glib::RefPtr<AuthObserver>& observer, const Glib::RefPtr<Cancellable>& cancellable,
-  Flags flags)
+  ServerFlags flags)
 : _CONSTRUCT("address", Glib::c_str_or_nullptr(address), "flags",
     static_cast<GDBusServerFlags>(flags), "guid", Glib::c_str_or_nullptr(guid),
     "authentication-observer", Glib::unwrap(observer))
@@ -40,7 +37,7 @@ Server::Server(const std::string& address, const std::string& guid,
 }
 
 Server::Server(const std::string& address, const std::string& guid,
-  const Glib::RefPtr<Cancellable>& cancellable, Flags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, ServerFlags flags)
 : _CONSTRUCT("address", Glib::c_str_or_nullptr(address), "flags",
     static_cast<GDBusServerFlags>(flags), "guid", Glib::c_str_or_nullptr(guid),
     "authentication-observer", static_cast<GDBusAuthObserver*>(nullptr))
@@ -49,7 +46,7 @@ Server::Server(const std::string& address, const std::string& guid,
 }
 
 Server::Server(const std::string& address, const std::string& guid,
-  const Glib::RefPtr<AuthObserver>& observer, Flags flags)
+  const Glib::RefPtr<AuthObserver>& observer, ServerFlags flags)
 : _CONSTRUCT("address", Glib::c_str_or_nullptr(address), "flags",
     static_cast<GDBusServerFlags>(flags), "guid", Glib::c_str_or_nullptr(guid),
     "authentication-observer", Glib::unwrap(observer))
@@ -57,7 +54,7 @@ Server::Server(const std::string& address, const std::string& guid,
   init();
 }
 
-Server::Server(const std::string& address, const std::string& guid, Flags flags)
+Server::Server(const std::string& address, const std::string& guid, ServerFlags flags)
 : _CONSTRUCT("address", Glib::c_str_or_nullptr(address), "flags",
     static_cast<GDBusServerFlags>(flags), "guid", Glib::c_str_or_nullptr(guid),
     "authentication-observer", static_cast<GDBusAuthObserver*>(nullptr))
@@ -68,29 +65,29 @@ Server::Server(const std::string& address, const std::string& guid, Flags flags)
 Glib::RefPtr<Server>
 Server::create_sync(const std::string& address, const std::string& guid,
   const Glib::RefPtr<AuthObserver>& observer, const Glib::RefPtr<Cancellable>& cancellable,
-  Flags flags)
+  ServerFlags flags)
 {
-  return Glib::make_refptr_for_instance<Server>(new Server(address, guid, observer, cancellable, flags));
+  return Glib::RefPtr<Server>(new Server(address, guid, observer, cancellable, flags));
 }
 
 Glib::RefPtr<Server>
 Server::create_sync(const std::string& address, const std::string& guid,
-  const Glib::RefPtr<Cancellable>& cancellable, Flags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, ServerFlags flags)
 {
-  return Glib::make_refptr_for_instance<Server>(new Server(address, guid, cancellable, flags));
+  return Glib::RefPtr<Server>(new Server(address, guid, cancellable, flags));
 }
 
 Glib::RefPtr<Server>
 Server::create_sync(const std::string& address, const std::string& guid,
-  const Glib::RefPtr<AuthObserver>& observer, Flags flags)
+  const Glib::RefPtr<AuthObserver>& observer, ServerFlags flags)
 {
-  return Glib::make_refptr_for_instance<Server>(new Server(address, guid, observer, flags));
+  return Glib::RefPtr<Server>(new Server(address, guid, observer, flags));
 }
 
 Glib::RefPtr<Server>
-Server::create_sync(const std::string& address, const std::string& guid, Flags flags)
+Server::create_sync(const std::string& address, const std::string& guid, ServerFlags flags)
 {
-  return Glib::make_refptr_for_instance<Server>(new Server(address, guid, flags));
+  return Glib::RefPtr<Server>(new Server(address, guid, flags));
 }
 
 } // namespace DBus
index 914dd17..64ed21b 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -29,6 +30,8 @@ namespace Gio
 namespace DBus
 {
 
+_WRAP_ENUM(ServerFlags, GDBusServerFlags, s#^DBUS_##, NO_GTYPE)
+
 _GMMPROC_EXTRA_NAMESPACE(DBus)
 
 //TODO: Add example from the C API in class docs.
@@ -52,29 +55,27 @@ class Server : public Glib::Object, public Initable
   _CLASS_GOBJECT(Server, GDBusServer, G_DBUS_SERVER, Glib::Object, GObject)
   _IMPLEMENTS_INTERFACE(Initable)
 
-public:
-  _WRAP_ENUM(Flags, GDBusServerFlags, NO_GTYPE)
-
 protected:
+
   Server(const std::string& address,
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
     const Glib::RefPtr<Cancellable>& cancellable,
-    Flags flags);
+    ServerFlags flags);
 
   Server(const std::string& address,
     const std::string& guid,
     const Glib::RefPtr<Cancellable>& cancellable,
-    Flags flags);
+    ServerFlags flags);
 
   Server(const std::string& address,
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
-    Flags flags);
+    ServerFlags flags);
 
   Server(const std::string& address,
     const std::string& guid,
-    Flags flags);
+    ServerFlags flags);
 
 public:
 
@@ -84,38 +85,38 @@ public:
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
     const Glib::RefPtr<Cancellable>& cancellable,
-    Flags flags = Gio::DBus::Server::Flags::NONE);
+    ServerFlags flags = Gio::DBus::SERVER_FLAGS_NONE);
 
   _WRAP_METHOD_DOCS_ONLY(g_dbus_server_new_sync)
   /// @throw Glib::Error.
   static Glib::RefPtr<Server> create_sync(const std::string& address,
     const std::string& guid,
     const Glib::RefPtr<Cancellable>& cancellable,
-    Flags flags = Gio::DBus::Server::Flags::NONE);
+    ServerFlags flags = Gio::DBus::SERVER_FLAGS_NONE);
 
   /// Non-cancellable version of create_sync().
   static Glib::RefPtr<Server> create_sync(const std::string& address,
     const std::string& guid,
     const Glib::RefPtr<AuthObserver>& observer,
-    Flags flags = Gio::DBus::Server::Flags::NONE);
+    ServerFlags flags = Gio::DBus::SERVER_FLAGS_NONE);
 
   /// Non-cancellable version of create_sync().
   static Glib::RefPtr<Server> create_sync(const std::string& address,
     const std::string& guid,
-    Flags flags = Gio::DBus::Server::Flags::NONE);
+    ServerFlags flags = Gio::DBus::SERVER_FLAGS_NONE);
 
   _WRAP_METHOD(void start(), g_dbus_server_start)
   _WRAP_METHOD(void stop(), g_dbus_server_stop)
   _WRAP_METHOD(bool is_active() const, g_dbus_server_is_active)
   _WRAP_METHOD(std::string get_guid() const, g_dbus_server_get_guid)
-  _WRAP_METHOD(Flags get_flags() const, g_dbus_server_get_flags)
+  _WRAP_METHOD(ServerFlags get_flags() const, g_dbus_server_get_flags)
   _WRAP_METHOD(std::string get_client_address() const, g_dbus_server_get_client_address)
 
   _WRAP_PROPERTY("active", bool)
   _WRAP_PROPERTY("address", std::string)
   _WRAP_PROPERTY("authentication-observer", Glib::RefPtr<AuthObserver>)
   _WRAP_PROPERTY("client-address", std::string)
-  _WRAP_PROPERTY("flags", Flags)
+  _WRAP_PROPERTY("flags", ServerFlags)
   _WRAP_PROPERTY("guid", std::string)
 
 #m4 _CONVERSION(`GDBusConnection*', `const Glib::RefPtr<Connection>&', `Glib::wrap($3, true)')
index 0445386..59ea274 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3c2d6d8..0fe4d53 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusmethodinvocation.h>
@@ -67,10 +64,10 @@ public:
    * @endcode
    */
   using SlotSubtreeEnumerate = sigc::slot<
-    std::vector<Glib::ustring>(
+    std::vector<Glib::ustring>,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
-    const Glib::ustring&)
+    const Glib::ustring&
     >;
 
   /** The type for a slot which handles introspecting a child node.
@@ -94,11 +91,11 @@ public:
    * @endcode
    */
   using SlotSubtreeIntrospect = sigc::slot<
-    std::vector< Glib::RefPtr<Gio::DBus::InterfaceInfo> >(
+    std::vector< Glib::RefPtr<Gio::DBus::InterfaceInfo> >,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
     const Glib::ustring&,
-    const Glib::ustring&)
+    const Glib::ustring&
     >;
 
   /** The type for a slot which handles dispatching a remote call on a child
@@ -116,12 +113,12 @@ public:
    * @endcode
    */
   using SlotSubtreeDispatch = sigc::slot<
-    const InterfaceVTable*(
+    const InterfaceVTable*,
     const Glib::RefPtr<Connection>&,
     const Glib::ustring&,
     const Glib::ustring&,
     const Glib::ustring&,
-    const Glib::ustring&)
+    const Glib::ustring&
     >;
 
   /** Constructs a new SubtreeVTable using specified slots.
index a614bce..a84de1f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ac2acf9..85844dc 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(giomm,gio)
index fa7a1ee..04878e7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
index 46d95d8..bb8b671 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/dbusconnection.h>
@@ -25,21 +26,21 @@ namespace Gio
 namespace DBus
 {
 
-_WRAP_ENUM(BusNameWatcherFlags, GBusNameWatcherFlags, NO_GTYPE)
+_WRAP_ENUM(BusNameWatcherFlags, GBusNameWatcherFlags, s#^DBUS_##, NO_GTYPE)
 
 /** For example,
  * void on_name_appeared(const Glib::RefPtr<Gio::DBus::Connection>& connection,
  * const Glib::ustring& name, const Glib::ustring& name_owner);
  * @ingroup DBus
  */
-using SlotNameAppeared = sigc::slot<void(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring, const Glib::ustring&)>;
+using SlotNameAppeared = sigc::slot<void, const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring, const Glib::ustring&>;
 
 /** For example,
  * void on_name_vanished(const Glib::RefPtr<Gio::DBus::Connection>& connection,
  * const Glib::ustring& name);
  * @ingroup DBus
  */
-using SlotNameVanished = sigc::slot<void(const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring)>;
+using SlotNameVanished = sigc::slot<void, const Glib::RefPtr<Gio::DBus::Connection>&, Glib::ustring>;
 
 //TODO: Add example from C API in class docs?
 /** Starts watching @a name on the bus specified by @a bus_type and calls
@@ -87,7 +88,7 @@ guint watch_name(
   const Glib::ustring& name,
   const SlotNameAppeared& name_appeared_slot = SlotNameAppeared(),
   const SlotNameVanished& name_vanished_slot = SlotNameVanished(),
-  BusNameWatcherFlags flags = Gio::DBus::BusNameWatcherFlags::NONE
+  BusNameWatcherFlags flags = Gio::DBus::BUS_NAME_WATCHER_FLAGS_NONE
 );
 _IGNORE(g_bus_watch_name)
 
@@ -110,7 +111,7 @@ guint watch_name(
   const Glib::ustring& name,
   const SlotNameAppeared& name_appeared_slot = SlotNameAppeared(),
   const SlotNameVanished& name_vanished_slot = SlotNameVanished(),
-  BusNameWatcherFlags flags = Gio::DBus::BusNameWatcherFlags::NONE
+  BusNameWatcherFlags flags = Gio::DBus::BUS_NAME_WATCHER_FLAGS_NONE
 );
 _IGNORE(g_bus_watch_name_on_connection)
 
index 42cfd45..27a37e7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ba65428..3f0bfd9 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -23,6 +22,9 @@ _CONFIGINCLUDE(giommconfig.h)
 _DEFS(giomm,gio)
 _PINCLUDE(glibmm/private/object_p.h)
 
+// This file is not used on Windows and Mac OS Cocoa
+_GMMPROC_WRAP_CONDITIONALLY(if !defined(G_OS_WIN32) && !defined(GLIBMM_OS_COCOA))
+
 namespace Glib
 {
 
@@ -44,7 +46,6 @@ class DesktopAppInfo
 {
   _CLASS_GOBJECT(DesktopAppInfo, GDesktopAppInfo, G_DESKTOP_APP_INFO, Glib::Object, GObject)
   _IMPLEMENTS_INTERFACE(AppInfo)
-  _GTKMMPROC_WIN32_NO_WRAP
 
 public:
   // TODO: should use _WRAP_CREATE(), but these functions do more than just call
@@ -55,8 +56,8 @@ public:
 
   _WRAP_METHOD(std::string get_filename() const, g_desktop_app_info_get_filename)
   _WRAP_METHOD(bool is_hidden() const, g_desktop_app_info_get_is_hidden)
-
-  _IGNORE(g_desktop_app_info_set_desktop_env)
+  _WRAP_METHOD(static void set_desktop_env(const std::string& desktop_env), g_desktop_app_info_set_desktop_env,
+    deprecated "Do not use this API. Since 2.42 the value of the `XDG_CURRENT_DESKTOP` environment variable will be used.")
 
 #m4 _CONVERSION(`const char* const*', `std::vector<Glib::ustring>', `Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
   _WRAP_METHOD(std::vector<Glib::ustring> get_keywords() const, g_desktop_app_info_get_keywords)
index 75bbea6..08a90d4 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 #include <glibmm/exceptionhandler.h>
 #include "slot_async.h"
 
-using StartStopType = Gio::Drive::StartStopType;
-
 namespace Gio
 {
 
 void
 Drive::eject(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -43,7 +38,7 @@ Drive::eject(
 }
 
 void
-Drive::eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
+Drive::eject(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -58,7 +53,7 @@ Drive::eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
 
 void
 Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -72,7 +67,7 @@ Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyn
 
 void
 Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  Mount::UnmountFlags flags)
+  MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -86,7 +81,7 @@ Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyn
 }
 
 void
-Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_drive_eject_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     Glib::unwrap(mount_operation),
@@ -96,7 +91,7 @@ Drive::eject(const Glib::RefPtr<MountOperation>& mount_operation, Mount::Unmount
 }
 
 void
-Drive::eject(Mount::UnmountFlags flags)
+Drive::eject(MountUnmountFlags flags)
 {
   g_drive_eject_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     nullptr, // mount_operation
@@ -139,7 +134,7 @@ Drive::poll_for_media()
 
 void
 Drive::stop(const Glib::RefPtr<MountOperation>& mount_operation,
-  const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, Mount::UnmountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -152,7 +147,7 @@ Drive::stop(const Glib::RefPtr<MountOperation>& mount_operation,
 
 void
 Drive::stop(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  Mount::UnmountFlags flags)
+  MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -165,7 +160,7 @@ Drive::stop(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsync
 
 void
 Drive::start(const Glib::RefPtr<MountOperation>& mount_operation,
-  const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, StartFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, DriveStartFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -178,7 +173,7 @@ Drive::start(const Glib::RefPtr<MountOperation>& mount_operation,
 
 void
 Drive::start(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  StartFlags flags)
+  DriveStartFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
index 12b281c..9593de9 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <glibmm/listhandle.h>
 #include <giomm/mount.h>
 #include <giomm/icon.h>
 //#include <giomm/volume.h>
@@ -31,6 +31,9 @@ typedef struct _GDriveIface GDriveIface;
 namespace Gio
 {
 
+_WRAP_ENUM(DriveStartFlags, GDriveStartFlags)
+_WRAP_ENUM(DriveStartStopType, GDriveStartStopType)
+
 /** Virtual File System drive management.
  *
  * This represent a piece of hardware connected to the machine. It's generally only created for removable hardware or hardware with removable media.
@@ -48,9 +51,6 @@ class Drive : public Glib::Interface
   _CLASS_INTERFACE(Drive, GDrive, G_DRIVE, GDriveIface)
 public:
 
-  _WRAP_ENUM(StartFlags, GDriveStartFlags)
-  _WRAP_ENUM(StartStopType, GDriveStartStopType)
-
   _WRAP_METHOD(Glib::ustring get_name() const, g_drive_get_name)
 
   _WRAP_METHOD(Glib::RefPtr<Icon> get_icon(), g_drive_get_icon, refreturn)
@@ -61,8 +61,8 @@ public:
 
   _WRAP_METHOD(bool has_volumes() const, g_drive_has_volumes)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<Volume>> get_volumes(), g_drive_get_volumes)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Volume> > get_volumes(), g_drive_get_volumes)
 
   _WRAP_METHOD(bool is_media_removable() const, g_drive_is_media_removable)
   _WRAP_METHOD(bool is_removable() const,  g_drive_is_removable)
@@ -76,21 +76,21 @@ public:
    * @param flags Flags affecting the unmount if required for eject.
    * @param cancellable A cancellable object which can be used to cancel the eject.
    */
-  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Ejects the drive.
    * @param slot A callback which will be called when the eject is completed.
    * @param flags Flags affecting the unmount if required for eject.
    */
-  void eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Ejects the drive.
    * @param flags Flags affecting the unmount if required for eject.
    */
-  void eject(Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_drive_eject)
   _IGNORE(g_drive_eject_with_operation)
 
@@ -125,13 +125,13 @@ public:
 
   _WRAP_METHOD(std::string get_identifier(const std::string& kind) const, g_drive_get_identifier)
 
-  #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> enumerate_identifiers() const, g_drive_enumerate_identifiers)
+  #m4 _CONVERSION(`char**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle enumerate_identifiers() const, g_drive_enumerate_identifiers)
 
   /** @newin{2,22} */
-  void start(const Glib::RefPtr<MountOperation>& mount_operation, const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, StartFlags flags = StartFlags::NONE);
+  void start(const Glib::RefPtr<MountOperation>& mount_operation, const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, DriveStartFlags flags = DRIVE_START_NONE);
   /** @newin{2,22} */
-  void start(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, StartFlags flags = StartFlags::NONE);
+  void start(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, DriveStartFlags flags = DRIVE_START_NONE);
   _IGNORE(g_drive_start)
   _WRAP_METHOD(bool start_finish(const Glib::RefPtr<AsyncResult>& result), g_drive_start_finish, errthrow)
   /** @newin{2,22} */
@@ -140,22 +140,30 @@ public:
   _WRAP_METHOD(bool can_start_degraded() const, g_drive_can_start_degraded)
 
   /** @newin{2,22} */
-  void stop(const Glib::RefPtr<MountOperation>& mount_operation, const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void stop(const Glib::RefPtr<MountOperation>& mount_operation, const Glib::RefPtr<Cancellable>& cancellable, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   /** @newin{2,22} */
-  void stop(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void stop(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_drive_stop)
   _WRAP_METHOD(bool stop_finish(const Glib::RefPtr<AsyncResult>& result), g_drive_stop_finish, errthrow)
   /** @newin{2,22} */
   _WRAP_METHOD(bool can_stop() const, g_drive_can_stop)
 
-  _WRAP_METHOD(StartStopType get_start_stop_type() const, g_drive_get_start_stop_type)
+  _WRAP_METHOD(DriveStartStopType get_start_stop_type() const, g_drive_get_start_stop_type)
 
   _WRAP_METHOD(Glib::ustring get_sort_key() const,  g_drive_get_sort_key)
 
-  _WRAP_SIGNAL(void changed(), changed, newin "2,20")
-  _WRAP_SIGNAL(void disconnected(), disconnected, newin "2,20")
-  _WRAP_SIGNAL(void eject_button(), eject_button, newin "2,20")
-  _WRAP_SIGNAL(void stop_button(), stop_button)
+  /** @newin{2,20}
+   */
+  _WRAP_SIGNAL(void changed(), changed, no_default_handler)
+
+  /** @newin{2,20}
+   */
+  _WRAP_SIGNAL(void disconnected(), disconnected, no_default_handler)
+
+  /** @newin{2,20}
+   */
+  _WRAP_SIGNAL(void eject_button(), eject_button, no_default_handler)
+  _WRAP_SIGNAL(void stop_button(), stop_button, no_default_handler)
 
   //_WRAP_VFUNC(Glib::ustring get_name() const, get_name)
   //Careful of ref-counting: //_WRAP_VFUNC(Glib::RefPtr<Icon> get_icon() const, get_icon)
index fb5dbea..24667b5 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 
-using Origin = Gio::Emblem::Origin;
-
 namespace Gio
 {
 
index 9a88414..fd4431e 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -26,6 +23,8 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(EmblemOrigin, GEmblemOrigin, NO_GTYPE)
+
 /** An object for emblems
  *
  * Emblem is an implementation of GIcon that supports having an emblem, which
@@ -44,9 +43,6 @@ class Emblem
   _CLASS_GOBJECT(Emblem, GEmblem, G_EMBLEM, Glib::Object, GObject)
   _IMPLEMENTS_INTERFACE(Icon)
 
-public:
-  _WRAP_ENUM(Origin, GEmblemOrigin, NO_GTYPE)
-
 protected:
   /** Creates a new emblem for @a icon.
    * @param icon A Gio::Icon containing the icon.
@@ -55,9 +51,9 @@ protected:
 
   /** Creates a new emblem for @a icon.
    * @param icon A Gio::Icon containing the icon.
-   * @param origin An Origin value defining the emblem's origin
+   * @param origin An EmblemOrigin value defining the emblem's origin
    */
- _WRAP_CTOR(Emblem(const Glib::RefPtr<Icon>& icon, Origin origin), g_emblem_new_with_origin)
+ _WRAP_CTOR(Emblem(const Glib::RefPtr<Icon>& icon, EmblemOrigin origin), g_emblem_new_with_origin)
 
 public:
   /** Creates a new emblem for @a icon.
@@ -67,13 +63,13 @@ public:
 
   /** Creates a new emblem for @a icon.
    * @param icon A Gio::Icon containing the icon.
-   * @param origin An Origin value defining the emblem's origin
+   * @param origin An EmblemOrigin value defining the emblem's origin
    */
-  _WRAP_CREATE(const Glib::RefPtr<Icon>& icon, Origin origin)
+  _WRAP_CREATE(const Glib::RefPtr<Icon>& icon, EmblemOrigin origin)
 
   _WRAP_METHOD(Glib::RefPtr<Icon> get_icon(), g_emblem_get_icon)
   _WRAP_METHOD(Glib::RefPtr<const Icon> get_icon() const, g_emblem_get_icon, constversion)
-  _WRAP_METHOD(Origin get_origin() const, g_emblem_get_origin)
+  _WRAP_METHOD(EmblemOrigin get_origin() const, g_emblem_get_origin)
 
 };
 
index faa8e37..ebf9ed1 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 8ccd5ad..31d0c78 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <glibmm/listhandle.h>
 #include <glibmm/object.h>
 #include <giomm/icon.h>
 #include <giomm/emblem.h>
@@ -80,11 +78,11 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Icon> get_icon(), g_emblemed_icon_get_icon)
   _WRAP_METHOD(Glib::RefPtr<const Icon> get_icon() const, g_emblemed_icon_get_icon, constversion)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Emblem>>',`Glib::ListHandler<Glib::RefPtr<Emblem>>::list_to_vector($3, Glib::OWNERSHIP_NONE)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<Emblem>> get_emblems(), g_emblemed_icon_get_emblems)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle<Glib::RefPtr<Emblem> >',`$2($3, Glib::OWNERSHIP_NONE)')
+  _WRAP_METHOD(Glib::ListHandle<Glib::RefPtr<Emblem> > get_emblems(), g_emblemed_icon_get_emblems)
 
-//TODO: #m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<const Emblem>>',`$2($3, Glib::OWNERSHIP_NONE)')
-//  _WRAP_METHOD(std::vector<Glib::RefPtr<const Emblem>> get_emblems() const, g_emblemed_icon_get_emblems, constversion)
+//TODO: #m4 _CONVERSION(`GList*',`Glib::ListHandle<Glib::RefPtr<const Emblem> >',`$2($3, Glib::OWNERSHIP_NONE)')
+//  _WRAP_METHOD(Glib::ListHandle<Glib::RefPtr<const Emblem> > get_emblems() const, g_emblemed_icon_get_emblems, constversion)
 
   _WRAP_METHOD(void add_emblem(const Glib::RefPtr<Emblem>& emblem), g_emblemed_icon_add_emblem)
   _WRAP_METHOD(void clear_emblems(), g_emblemed_icon_clear_emblems)
index 24ee9e8..1c574d6 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,6 +11,5 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
index 7cbe7f5..e38c5db 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -23,11 +24,12 @@ _DEFS(giomm,gio)
 namespace Gio
 {
 
-// BIG_ENDIAN and LITTLE_ENDIAN are defined as preprocessor macros somewhere.
-_WRAP_ENUM(DataStreamByteOrder, GDataStreamByteOrder, NO_GTYPE, s#ENDIAN$#ENDIAN_ORDER#)
+_WRAP_ENUM(DataStreamByteOrder, GDataStreamByteOrder, NO_GTYPE)
 _WRAP_ENUM(DataStreamNewlineType, GDataStreamNewlineType, NO_GTYPE)
+_WRAP_ENUM(ErrorEnum, GIOErrorEnum, NO_GTYPE)
 _WRAP_ENUM(SocketFamily, GSocketFamily)
 _WRAP_ENUM(TlsAuthenticationMode, GTlsAuthenticationMode)
 _WRAP_ENUM(TlsCertificateFlags, GTlsCertificateFlags)
 
 } // namespace Gio
+
index 3f6ca4c..fd123ae 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 5369fa4..7df46d2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
index 846ee18..a1ded83 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/mount.h>
@@ -223,7 +222,7 @@ File::read_async(
 
 void
 File::append_to_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  CreateFlags flags, int io_priority)
+  FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -235,7 +234,7 @@ File::append_to_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable
 }
 
 void
-File::append_to_async(const SlotAsyncReady& slot, CreateFlags flags, int io_priority)
+File::append_to_async(const SlotAsyncReady& slot, FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -249,7 +248,7 @@ File::append_to_async(const SlotAsyncReady& slot, CreateFlags flags, int io_prio
 
 void
 File::create_file_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  CreateFlags flags, int io_priority)
+  FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -261,7 +260,7 @@ File::create_file_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellab
 }
 
 void
-File::create_file_async(const SlotAsyncReady& slot, CreateFlags flags, int io_priority)
+File::create_file_async(const SlotAsyncReady& slot, FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -275,7 +274,7 @@ File::create_file_async(const SlotAsyncReady& slot, CreateFlags flags, int io_pr
 
 void
 File::create_file_readwrite_async(const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags, int io_priority)
+  const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -288,7 +287,7 @@ File::create_file_readwrite_async(const SlotAsyncReady& slot,
 
 void
 File::create_file_readwrite_async(
-  const SlotAsyncReady& slot, CreateFlags flags, int io_priority)
+  const SlotAsyncReady& slot, FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -302,7 +301,7 @@ File::create_file_readwrite_async(
 
 void
 File::replace_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const std::string& etag, bool make_backup, CreateFlags flags, int io_priority)
+  const std::string& etag, bool make_backup, FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -316,7 +315,7 @@ File::replace_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>&
 
 void
 File::replace_async(const SlotAsyncReady& slot, const std::string& etag, bool make_backup,
-  CreateFlags flags, int io_priority)
+  FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -356,7 +355,7 @@ File::open_readwrite_async(
 void
 File::replace_readwrite_async(const SlotAsyncReady& slot,
   const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag, bool make_backup,
-  CreateFlags flags, int io_priority)
+  FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -370,7 +369,7 @@ File::replace_readwrite_async(const SlotAsyncReady& slot,
 
 void
 File::replace_readwrite_async(const SlotAsyncReady& slot, const std::string& etag, bool make_backup,
-  CreateFlags flags, int io_priority)
+  FileCreateFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -581,7 +580,7 @@ File::set_display_name_async(
 
 bool
 File::copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -603,7 +602,7 @@ File::copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
 }
 
 bool
-File::copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, CopyFlags flags)
+File::copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -625,7 +624,7 @@ File::copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
 }
 
 bool
-File::copy(const Glib::RefPtr<File>& destination, CopyFlags flags)
+File::copy(const Glib::RefPtr<File>& destination, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res = g_file_copy(gobj(), Glib::unwrap(destination), static_cast<GFileCopyFlags>(flags),
@@ -640,7 +639,7 @@ File::copy(const Glib::RefPtr<File>& destination, CopyFlags flags)
 void
 File::copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress,
   const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable,
-  CopyFlags flags, int io_priority)
+  FileCopyFlags flags, int io_priority)
 {
   // Create a new pair which will hold copies of passed slots.
   // This will be deleted in the SignalProxy_file_copy_async_callback() callback
@@ -658,7 +657,7 @@ File::copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress&
 
 void
 File::copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready,
-  const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags, int io_priority)
+  const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags, int io_priority)
 {
   // Create copies of slots.
   // Pointers to them will be passed through the callbacks' data parameter
@@ -672,7 +671,7 @@ File::copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& sl
 
 void
 File::copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress,
-  const SlotAsyncReady& slot_ready, CopyFlags flags, int io_priority)
+  const SlotAsyncReady& slot_ready, FileCopyFlags flags, int io_priority)
 {
   // Create a new pair which will hold copies of passed slots.
   // This will be deleted in the SignalProxy_file_copy_async_callback() callback
@@ -690,7 +689,7 @@ File::copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress&
 
 void
 File::copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready,
-  CopyFlags flags, int io_priority)
+  FileCopyFlags flags, int io_priority)
 {
   // Create copies of slots.
   // Pointers to them will be passed through the callbacks' data parameter
@@ -703,7 +702,7 @@ File::copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& sl
 
 bool
 File::move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -725,7 +724,7 @@ File::move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
 }
 
 bool
-File::move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, CopyFlags flags)
+File::move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -747,7 +746,7 @@ File::move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot,
 }
 
 bool
-File::move(const Glib::RefPtr<File>& destination, CopyFlags flags)
+File::move(const Glib::RefPtr<File>& destination, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -805,7 +804,7 @@ File::set_attributes_finish(
 
 void
 File::mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation,
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -819,7 +818,7 @@ File::mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation,
 
 void
 File::mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation,
-  const SlotAsyncReady& slot, Mount::MountFlags flags)
+  const SlotAsyncReady& slot, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -831,7 +830,7 @@ File::mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation,
 }
 
 void
-File::mount_mountable(const SlotAsyncReady& slot, Mount::MountFlags flags)
+File::mount_mountable(const SlotAsyncReady& slot, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -843,7 +842,7 @@ File::mount_mountable(const SlotAsyncReady& slot, Mount::MountFlags flags)
 }
 
 void
-File::mount_mountable(Mount::MountFlags flags)
+File::mount_mountable(MountMountFlags flags)
 {
   g_file_mount_mountable(
     gobj(), static_cast<GMountMountFlags>(flags), nullptr, nullptr, nullptr, nullptr);
@@ -851,7 +850,7 @@ File::mount_mountable(Mount::MountFlags flags)
 
 void
 File::unmount_mountable(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -863,7 +862,7 @@ File::unmount_mountable(
 }
 
 void
-File::unmount_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
+File::unmount_mountable(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -875,7 +874,7 @@ File::unmount_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
 }
 
 void
-File::unmount_mountable(Mount::UnmountFlags flags)
+File::unmount_mountable(MountUnmountFlags flags)
 {
   g_file_unmount_mountable_with_operation(
     gobj(), static_cast<GMountUnmountFlags>(flags), nullptr, nullptr, nullptr, nullptr);
@@ -883,7 +882,7 @@ File::unmount_mountable(Mount::UnmountFlags flags)
 
 void
 File::unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -897,7 +896,7 @@ File::unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellab
 
 void
 File::unmount_mountable(const SlotAsyncReady& slot,
-  const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -910,7 +909,7 @@ File::unmount_mountable(const SlotAsyncReady& slot,
 
 void
 File::unmount_mountable(
-  const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_file_unmount_mountable_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     Glib::unwrap(mount_operation), nullptr, nullptr, nullptr);
@@ -918,7 +917,7 @@ File::unmount_mountable(
 
 void
 File::mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation,
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -932,7 +931,7 @@ File::mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation
 
 void
 File::mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation,
-  const SlotAsyncReady& slot, Mount::MountFlags flags)
+  const SlotAsyncReady& slot, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -944,7 +943,7 @@ File::mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation
 }
 
 void
-File::mount_enclosing_volume(const SlotAsyncReady& slot, Mount::MountFlags flags)
+File::mount_enclosing_volume(const SlotAsyncReady& slot, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -956,7 +955,7 @@ File::mount_enclosing_volume(const SlotAsyncReady& slot, Mount::MountFlags flags
 }
 
 void
-File::mount_enclosing_volume(Mount::MountFlags flags)
+File::mount_enclosing_volume(MountMountFlags flags)
 {
   g_file_mount_enclosing_volume(
     gobj(), static_cast<GMountMountFlags>(flags), nullptr, nullptr, nullptr, nullptr);
@@ -964,7 +963,7 @@ File::mount_enclosing_volume(Mount::MountFlags flags)
 
 void
 File::eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -978,7 +977,7 @@ File::eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable
 
 void
 File::eject_mountable(const SlotAsyncReady& slot,
-  const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -990,7 +989,7 @@ File::eject_mountable(const SlotAsyncReady& slot,
 }
 
 void
-File::eject_mountable(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+File::eject_mountable(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_file_eject_mountable_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     Glib::unwrap(mount_operation), nullptr, nullptr, nullptr);
@@ -998,7 +997,7 @@ File::eject_mountable(const Glib::RefPtr<MountOperation>& mount_operation, Mount
 
 void
 File::eject_mountable(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1010,7 +1009,7 @@ File::eject_mountable(
 }
 
 void
-File::eject_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
+File::eject_mountable(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1022,7 +1021,7 @@ File::eject_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
 }
 
 void
-File::eject_mountable(Mount::UnmountFlags flags)
+File::eject_mountable(MountUnmountFlags flags)
 {
   g_file_eject_mountable_with_operation(
     gobj(), static_cast<GMountUnmountFlags>(flags), nullptr, nullptr, nullptr, nullptr);
@@ -1090,7 +1089,7 @@ File::load_partial_contents_async(
 void
 File::replace_contents(const char* contents, gsize length, const std::string& etag,
   std::string& new_etag, const Glib::RefPtr<Cancellable>& cancellable, bool make_backup,
-  CreateFlags flags)
+  FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   gchar* c_etag_new = nullptr;
@@ -1108,7 +1107,7 @@ File::replace_contents(const char* contents, gsize length, const std::string& et
 
 void
 File::replace_contents(const char* contents, gsize length, const std::string& etag,
-  std::string& new_etag, bool make_backup, CreateFlags flags)
+  std::string& new_etag, bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   gchar* c_etag_new = nullptr;
@@ -1125,7 +1124,7 @@ File::replace_contents(const char* contents, gsize length, const std::string& et
 
 void
 File::replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag,
-  const Glib::RefPtr<Cancellable>& cancellable, bool make_backup, CreateFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   gchar* c_etag_new = nullptr;
@@ -1143,7 +1142,7 @@ File::replace_contents(const std::string& contents, const std::string& etag, std
 
 void
 File::replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag,
-  bool make_backup, CreateFlags flags)
+  bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   gchar* c_etag_new = nullptr;
@@ -1161,7 +1160,7 @@ File::replace_contents(const std::string& contents, const std::string& etag, std
 void
 File::replace_contents_async(const SlotAsyncReady& slot,
   const Glib::RefPtr<Cancellable>& cancellable, const char* contents, gsize length,
-  const std::string& etag, bool make_backup, CreateFlags flags)
+  const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1175,7 +1174,7 @@ File::replace_contents_async(const SlotAsyncReady& slot,
 
 void
 File::replace_contents_async(const SlotAsyncReady& slot, const char* contents, gsize length,
-  const std::string& etag, bool make_backup, CreateFlags flags)
+  const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1189,7 +1188,7 @@ File::replace_contents_async(const SlotAsyncReady& slot, const char* contents, g
 void
 File::replace_contents_async(const SlotAsyncReady& slot,
   const Glib::RefPtr<Cancellable>& cancellable, const std::string& contents,
-  const std::string& etag, bool make_backup, CreateFlags flags)
+  const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1203,7 +1202,7 @@ File::replace_contents_async(const SlotAsyncReady& slot,
 
 void
 File::replace_contents_async(const SlotAsyncReady& slot, const std::string& contents,
-  const std::string& etag, bool make_backup, CreateFlags flags)
+  const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1242,7 +1241,7 @@ File::replace_contents_finish(const Glib::RefPtr<AsyncResult>& result)
 void
 File::replace_contents_bytes_async(const SlotAsyncReady& slot,
   const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<const Glib::Bytes>& contents,
-  const std::string& etag, bool make_backup, CreateFlags flags)
+  const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1257,7 +1256,7 @@ File::replace_contents_bytes_async(const SlotAsyncReady& slot,
 void
 File::replace_contents_bytes_async(const SlotAsyncReady& slot,
   const Glib::RefPtr<const Glib::Bytes>& contents, const std::string& etag, bool make_backup,
-  CreateFlags flags)
+  FileCreateFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1271,7 +1270,7 @@ File::replace_contents_bytes_async(const SlotAsyncReady& slot,
 
 Glib::RefPtr<FileOutputStream>
 File::replace(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag,
-  bool make_backup, CreateFlags flags)
+  bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_replace(gobj(), Glib::c_str_or_nullptr(etag),
@@ -1284,7 +1283,7 @@ File::replace(const Glib::RefPtr<Cancellable>& cancellable, const std::string& e
 }
 
 Glib::RefPtr<FileOutputStream>
-File::replace(const std::string& etag, bool make_backup, CreateFlags flags)
+File::replace(const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_replace(gobj(), Glib::c_str_or_nullptr(etag),
@@ -1297,7 +1296,7 @@ File::replace(const std::string& etag, bool make_backup, CreateFlags flags)
 
 Glib::RefPtr<FileIOStream>
 File::replace_readwrite(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag,
-  bool make_backup, CreateFlags flags)
+  bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_replace_readwrite(gobj(), Glib::c_str_or_nullptr(etag),
@@ -1310,7 +1309,7 @@ File::replace_readwrite(const Glib::RefPtr<Cancellable>& cancellable, const std:
 }
 
 Glib::RefPtr<FileIOStream>
-File::replace_readwrite(const std::string& etag, bool make_backup, CreateFlags flags)
+File::replace_readwrite(const std::string& etag, bool make_backup, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_replace_readwrite(gobj(), Glib::c_str_or_nullptr(etag),
@@ -1396,7 +1395,7 @@ File::monitor(FileMonitorFlags flags)
 void
 File::measure_disk_usage(const Glib::RefPtr<Cancellable>& cancellable,
   const SlotFileMeasureProgress& slot_progress, guint64& disk_usage, guint64& num_dirs,
-  guint64& num_files, MeasureFlags flags)
+  guint64& num_files, FileMeasureFlags flags)
 {
   GError* gerror = nullptr;
   g_file_measure_disk_usage(gobj(), ((GFileMeasureFlags)(flags)),
@@ -1411,7 +1410,7 @@ File::measure_disk_usage(const Glib::RefPtr<Cancellable>& cancellable,
 void
 File::measure_disk_usage_async(const SlotAsyncReady& slot_ready,
   const Glib::RefPtr<Cancellable>& cancellable, const SlotFileMeasureProgress& slot_progress,
-  MeasureFlags flags, int io_priority)
+  FileMeasureFlags flags, int io_priority)
 {
   // Create a new pair which will hold copies of passed slots.
   // This will be deleted in the SignalProxy_file_measure_async_callback() callback
@@ -1431,7 +1430,7 @@ File::measure_disk_usage_async(const SlotAsyncReady& slot_ready,
 
 void
 File::start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::RefPtr<MountOperation>& start_operation, Drive::StartFlags flags)
+  const Glib::RefPtr<MountOperation>& start_operation, DriveStartFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1444,7 +1443,7 @@ File::start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable
 
 void
 File::start_mountable(const SlotAsyncReady& slot,
-  const Glib::RefPtr<MountOperation>& start_operation, Drive::StartFlags flags)
+  const Glib::RefPtr<MountOperation>& start_operation, DriveStartFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1457,7 +1456,7 @@ File::start_mountable(const SlotAsyncReady& slot,
 
 void
 File::stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-  const Glib::RefPtr<MountOperation>& start_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& start_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1470,7 +1469,7 @@ File::stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>
 
 void
 File::stop_mountable(const SlotAsyncReady& slot,
-  const Glib::RefPtr<MountOperation>& start_operation, Mount::UnmountFlags flags)
+  const Glib::RefPtr<MountOperation>& start_operation, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -1556,7 +1555,7 @@ File::set_attributes_from_info(const Glib::RefPtr<FileInfo>& info, FileQueryInfo
 
 bool
 File::copy_attributes(const Glib::RefPtr<File>& destination,
-  const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -1571,7 +1570,7 @@ File::copy_attributes(const Glib::RefPtr<File>& destination,
 }
 
 bool
-File::copy_attributes(const Glib::RefPtr<File>& destination, CopyFlags flags)
+File::copy_attributes(const Glib::RefPtr<File>& destination, FileCopyFlags flags)
 {
   GError* gerror = nullptr;
   bool res;
@@ -1586,7 +1585,7 @@ File::copy_attributes(const Glib::RefPtr<File>& destination, CopyFlags flags)
 }
 
 Glib::RefPtr<FileOutputStream>
-File::create_file(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags)
+File::create_file(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_create(gobj(), ((GFileCreateFlags)(flags)),
@@ -1598,7 +1597,7 @@ File::create_file(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flag
 }
 
 Glib::RefPtr<FileOutputStream>
-File::create_file(CreateFlags flags)
+File::create_file(FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue =
@@ -1610,7 +1609,7 @@ File::create_file(CreateFlags flags)
 }
 
 Glib::RefPtr<FileIOStream>
-File::create_file_readwrite(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags)
+File::create_file_readwrite(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_create_readwrite(gobj(), ((GFileCreateFlags)(flags)),
@@ -1622,7 +1621,7 @@ File::create_file_readwrite(const Glib::RefPtr<Cancellable>& cancellable, Create
 }
 
 Glib::RefPtr<FileIOStream>
-File::create_file_readwrite(CreateFlags flags)
+File::create_file_readwrite(FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue =
@@ -1634,7 +1633,7 @@ File::create_file_readwrite(CreateFlags flags)
 }
 
 Glib::RefPtr<FileOutputStream>
-File::append_to(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags)
+File::append_to(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::wrap(g_file_append_to(gobj(), ((GFileCreateFlags)(flags)),
@@ -1646,7 +1645,7 @@ File::append_to(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags)
 }
 
 Glib::RefPtr<FileOutputStream>
-File::append_to(CreateFlags flags)
+File::append_to(FileCreateFlags flags)
 {
   GError* gerror = nullptr;
   auto retvalue =
index 5df6972..7fb60af 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
@@ -45,7 +44,10 @@ class Mount;
 class Volume;
 
 _WRAP_ENUM(FileQueryInfoFlags, GFileQueryInfoFlags, NO_GTYPE)
+_WRAP_ENUM(FileCreateFlags, GFileCreateFlags, NO_GTYPE)
+_WRAP_ENUM(FileCopyFlags, GFileCopyFlags, NO_GTYPE)
 _WRAP_ENUM(FileMonitorFlags, GFileMonitorFlags, NO_GTYPE)
+_WRAP_ENUM(FileMeasureFlags, GFileMeasureFlags, NO_GTYPE)
 
 
 /** File and directory handling.
@@ -77,9 +79,6 @@ class File : public Glib::Interface
   _CLASS_INTERFACE(File, GFile, G_FILE, GFileIface)
 
 public:
-  _WRAP_ENUM(CreateFlags, GFileCreateFlags, NO_GTYPE)
-  _WRAP_ENUM(CopyFlags, GFileCopyFlags, NO_GTYPE)
-  _WRAP_ENUM(MeasureFlags, GFileMeasureFlags, NO_GTYPE)
 
   _IGNORE(g_file_icon_new) //g_file_icon_new is not a GFile method.
 
@@ -222,7 +221,7 @@ public:
    * the file doesn't already exist it is created.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -235,17 +234,17 @@ public:
    * If the file is a directory a Gio::Error with IS_DIRECTORY will be
    * thrown. Other errors are possible too, and depend on what kind of
    * filesystem the file is on.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param cancellable Optional Cancellable object.
    * @return A FileOutputStream.
    */
-  Glib::RefPtr<FileOutputStream> append_to(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> append_to(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Gets an output stream for appending data to the file. If
    * the file doesn't already exist it is created.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -254,10 +253,10 @@ public:
    * If the file is a directory a Gio::Error with IS_DIRECTORY will be
    * thrown. Other errors are possible too, and depend on what kind of
    * filesystem the file is on.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @return A FileOutputStream.
    */
-  Glib::RefPtr<FileOutputStream> append_to(CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> append_to(FileCreateFlags flags = FILE_CREATE_NONE);
   _IGNORE(g_file_append_to)
 
   //We renamed this to create_file from (g_file_create() and g_file_create_readwrite), to avoid confusion with static create() methods,
@@ -267,7 +266,7 @@ public:
    * The file must not already exist.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -285,16 +284,16 @@ public:
    * filesystem the file is on.
    *
    * @param cancellable A Cancellable object which can be used to cancel the operation.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @return A FileOutputStream for the newly created file.
    */
-  Glib::RefPtr<FileOutputStream> create_file(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> create_file(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Creates a new file and returns an output stream for writing to it.
    * The file must not already exist.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -308,17 +307,17 @@ public:
    * Other errors are possible too, and depend on what kind of
    * filesystem the file is on.
    *
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @return A FileOutputStream for the newly created file.
    */
-  Glib::RefPtr<FileOutputStream> create_file(CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> create_file(FileCreateFlags flags = FILE_CREATE_NONE);
   _IGNORE(g_file_create)
 
   /** Creates a new file and returns a stream for reading and writing to it.
    * The file must not already exist.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -340,16 +339,16 @@ public:
    * rather than just opening for reading or writing.
    *
    * @param cancellable A Cancellable object which can be used to cancel the operation.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @return A FileOutputStream for the newly created file.
    */
-  Glib::RefPtr<FileIOStream> create_file_readwrite(const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileIOStream> create_file_readwrite(const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Creates a new file and returns a stream for reading and writing to it.
    * The file must not already exist.
    *
    * By default files created are generally readable by everyone,
-   * but if you pass CreateFlags::PRIVATE in @a flags the file
+   * but if you pass FILE_CREATE_PRIVATE in @a flags the file
    * will be made readable only to the current user, to the level that
    * is supported on the target filesystem.
    *
@@ -367,10 +366,10 @@ public:
    * supported, so make sure you really need to do read and write streaming,
    * rather than just opening for reading or writing.
    *
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @return A FileOutputStream for the newly created file.
    */
-  Glib::RefPtr<FileIOStream> create_file_readwrite(CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileIOStream> create_file_readwrite(FileCreateFlags flags = FILE_CREATE_NONE);
   _IGNORE(g_file_create_readwrite)
 
 
@@ -380,7 +379,7 @@ public:
    * not affect an already existing copy of the file. For instance, for local files it may write to a
    * temporary file and then atomically rename over the destination when the stream is closed.
    *
-   * By default files created are generally readable by everyone, but if you pass CreateFlags::PRIVATE in
+   * By default files created are generally readable by everyone, but if you pass FILE_CREATE_PRIVATE in
    * @a flags the file will be made readable only to the current user, to the level that is supported on the
    * target filesystem.
    *
@@ -406,10 +405,10 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param etag An optional entity tag for the current Glib::File.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @return A FileOutputStream.
    */
-  Glib::RefPtr<FileOutputStream> replace(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> replace(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
 
   /** Returns an output stream for overwriting the file, possibly creating a backup copy of the file first.
@@ -417,7 +416,7 @@ public:
    * not affect an already existing copy of the file. For instance, for local files it may write to a
    * temporary file and then atomically rename over the destination when the stream is closed.
    *
-   * By default files created are generally readable by everyone, but if you pass CreateFlags::PRIVATE in
+   * By default files created are generally readable by everyone, but if you pass FILE_CREATE_PRIVATE in
    * @a flags the file will be made readable only to the current user, to the level that is supported on the
    * target filesystem.
    *
@@ -439,10 +438,10 @@ public:
    *
    * @param etag An optional entity tag for the current Glib::File.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @return A FileOutputStream.
    */
-  Glib::RefPtr<FileOutputStream> replace(const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileOutputStream> replace(const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   _IGNORE(g_file_replace)
 
@@ -453,20 +452,20 @@ public:
    * When the operation is finished, @a slot will be called. You can then call append_to_finish() to get the result of the operation.
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param cancellable A Cancellable object which can be used to cancel the operation.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void append_to_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void append_to_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asynchronously opens the file for appending.
    * For more details, see append_to() which is the synchronous version of this call.
    *
    * When the operation is finished, @a slot will be called. You can then call append_to_finish() to get the result of the operation.
    * @param slot A callback slot which will be called when the request is satisfied.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void append_to_async(const SlotAsyncReady& slot, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void append_to_async(const SlotAsyncReady& slot, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_append_to_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileOutputStream> append_to_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -483,10 +482,10 @@ public:
    *
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param cancellable A Cancellable object which can be used to cancel the operation.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void create_file_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void create_file_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asynchronously creates a new file and returns an output stream for writing to it. The file must not already exist.
    * For more details, see create_file() which is the synchronous version of this call.
@@ -494,10 +493,10 @@ public:
    * When the operation is finished, @a slot will be called. You can then call create_file_finish() to get the result of the operation.
    *
    * @param slot A callback slot which will be called when the request is satisfied.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void create_file_async(const SlotAsyncReady& slot, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void create_file_async(const SlotAsyncReady& slot, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_create_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileOutputStream> create_file_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -514,12 +513,12 @@ public:
    *
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param cancellable A Cancellable object which can be used to cancel the operation.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    *
    * @newin{2,24}
    */
-  void create_file_readwrite_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void create_file_readwrite_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asynchronously creates a new file and returns a stream for reading and
    * writing to it. The file must not already exist.
@@ -529,12 +528,12 @@ public:
    * When the operation is finished, @a slot will be called. You can then call create_file_readwrite_finish() to get the result of the operation.
    *
    * @param slot A callback slot which will be called when the request is satisfied.
-   * @param flags a set of CreateFlags.
+   * @param flags a set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    *
    * @newin{2,24}
    */
-  void create_file_readwrite_async(const SlotAsyncReady& slot, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void create_file_readwrite_async(const SlotAsyncReady& slot, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_create_readwrite_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileIOStream> create_file_readwrite_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -549,10 +548,10 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param etag An entity tag for the current Gio::File.
    * @param make_backup true if a backup of the existing file should be made.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void replace_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void replace_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asyncronously overwrites the file, replacing the contents, possibly creating a backup copy of the file first.
    * For more details, see replace() which is the synchronous version of this call.
@@ -561,10 +560,10 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param etag An entity tag for the current Gio::File.
    * @param make_backup true if a backup of the existing file should be made.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void replace_async(const SlotAsyncReady& slot, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void replace_async(const SlotAsyncReady& slot, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_replace_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileOutputStream> replace_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -634,12 +633,12 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param etag An optional entity tag for the current Glib::File.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @return A FileOutputStream.
    *
    * @newin{2,24}
    */
-  Glib::RefPtr<FileIOStream> replace_readwrite(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileIOStream> replace_readwrite(const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
 
   /** Returns an output stream for overwriting the file in readwrite mode, possibly creating a backup copy of the file first.
@@ -654,12 +653,12 @@ public:
    *
    * @param etag An optional entity tag for the current Glib::File.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @return A FileOutputStream.
    *
    * @newin{2,24}
    */
-  Glib::RefPtr<FileIOStream> replace_readwrite(const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  Glib::RefPtr<FileIOStream> replace_readwrite(const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   _IGNORE(g_file_replace_readwrite)
 
@@ -674,12 +673,12 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param etag An entity tag for the current Gio::File.
    * @param make_backup true if a backup of the existing file should be made.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    *
    * @newin{2,24}
    */
-  void replace_readwrite_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void replace_readwrite_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asyncronously overwrites the file in read-write mode, replacing the contents, possibly creating a backup copy of the file first.
    *
@@ -689,12 +688,12 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param etag An entity tag for the current Gio::File.
    * @param make_backup true if a backup of the existing file should be made.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param io_priority The I/O priority of the request.
    *
    * @newin{2,24}
    */
-  void replace_readwrite_async(const SlotAsyncReady& slot, const std::string& etag = std::string(), bool make_backup = false, CreateFlags flags = CreateFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void replace_readwrite_async(const SlotAsyncReady& slot, const std::string& etag = std::string(), bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_replace_readwrite_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileIOStream> replace_readwrite_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -719,7 +718,7 @@ public:
    *
    * For symlinks, normally the information about the target of the
    * symlink is returned, rather than information about the symlink itself.
-   * However if you pass FileQueryInfoFlags::NOFOLLOW_SYMLINKS in @a flags the
+   * However if you pass FILE_QUERY_INFO_NOFOLLOW_SYMLINKS in @a flags the
    * information about the symlink itself will be returned. Also, for symlinks
    * that point to non-existing files the information about the symlink itself
    * will be returned.
@@ -732,7 +731,7 @@ public:
    * @param flags: A set of FileQueryInfoFlags.
    * @result a FileInfo for the file, or an empty RefPtr on error.
    */
-  Glib::RefPtr<FileInfo> query_info(const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE) const;
+  Glib::RefPtr<FileInfo> query_info(const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE) const;
 
   /** Gets the requested information about the file. The result
    * is a FileInfo object that contains key-value attributes (such as the  type or size
@@ -748,7 +747,7 @@ public:
    *
    * For symlinks, normally the information about the target of the
    * symlink is returned, rather than information about the symlink itself.
-   * However if you pass FileQueryInfoFlags::NOFOLLOW_SYMLINKS in @a flags the
+   * However if you pass FILE_QUERY_INFO_NOFOLLOW_SYMLINKS in @a flags the
    * information about the symlink itself will be returned. Also, for symlinks
    * that point to non-existing files the information about the symlink itself
    * will be returned.
@@ -760,7 +759,7 @@ public:
    * @param flags: A set of FileQueryInfoFlags.
    * @result a FileInfo for the file, or an empty RefPtr on error.
    */
-  Glib::RefPtr<FileInfo> query_info(const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE) const;
+  Glib::RefPtr<FileInfo> query_info(const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE) const;
 
   _IGNORE(g_file_query_info)
 
@@ -780,7 +779,7 @@ public:
    *
    * @newin{2,18}
    */
-   FileType query_file_type(FileQueryInfoFlags flags = FileQueryInfoFlags::NONE) const;
+   FileType query_file_type(FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE) const;
 
   /** Asynchronously gets the requested information about specified file. The result is a FileInfo object that contains key-value attributes (such as type or size for the file).
    *
@@ -793,7 +792,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void query_info_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT) const;
+  void query_info_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT) const;
 
   /** Asynchronously gets the requested information about specified file. The result is a FileInfo object that contains key-value attributes (such as type or size for the file).
    *
@@ -805,7 +804,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void query_info_async(const SlotAsyncReady& slot, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT) const;
+  void query_info_async(const SlotAsyncReady& slot, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT) const;
   _IGNORE(g_file_query_info_async)
 
 
@@ -959,7 +958,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @return A FileEnumerator if successful.
    */
-  Glib::RefPtr<FileEnumerator> enumerate_children(const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE);
+  Glib::RefPtr<FileEnumerator> enumerate_children(const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE);
   _IGNORE(g_file_enumerate_children)
 
   /** Gets the requested information about the files in a directory. The result
@@ -982,7 +981,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @return A FileEnumerator if successful.
    */
-  Glib::RefPtr<FileEnumerator> enumerate_children(const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE);
+  Glib::RefPtr<FileEnumerator> enumerate_children(const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE);
   _IGNORE(g_file_enumerate_children)
 
 
@@ -998,7 +997,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void enumerate_children_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void enumerate_children_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asynchronously gets the requested information about the files in a directory. The result is a GFileEnumerator object that will give out GFileInfo objects for all the files in the directory.
    *
@@ -1010,7 +1009,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void enumerate_children_async(const SlotAsyncReady& slot, const std::string& attributes = "*", FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void enumerate_children_async(const SlotAsyncReady& slot, const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_enumerate_children_async)
 
   _WRAP_METHOD(Glib::RefPtr<FileEnumerator> enumerate_children_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -1118,11 +1117,11 @@ public:
   /** A signal handler would be, for instance:
    * void on_file_progress(goffset current_num_bytes, goffset total_num_bytes);
    */
-  using SlotFileProgress = sigc::slot<void(goffset, goffset)>;
+  using SlotFileProgress = sigc::slot<void, goffset, goffset>;
 
   /** Copies the file source to the location specified by destination. Can not handle recursive copies of directories.
-   * If the flag CopyFlags::OVERWRITE is specified an already existing destination file is overwritten.
-   * If the flag CopyFlags::NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
+   * If the flag FILE_COPY_OVERWRITE is specified an already existing destination file is overwritten.
+   * If the flag FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
    *
    * The operation can be cancelled by triggering the cancellable object from another thread. If the operation was cancelled, a Gio::Error with CANCELLED will be thrown.
    *
@@ -1130,55 +1129,55 @@ public:
    *
    * If the source file does not exist then a Gio::Error with NOT_FOUND will be thrown, independent on the status of the destination.
    *
-   * If CopyFlags::OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
+   * If FILE_COPY_OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
    *
    * If trying to overwrite a file over a directory a Gio::Error with IS_DIRECTORY will be thrown.
    * If trying to overwrite a directory with a directory a Gio::Error with WOULD_MERGE will be thrown.
    *
-   * If the source is a directory and the target does not exist, or CopyFlags::OVERWRITE is specified and the target is a file,
+   * If the source is a directory and the target does not exist, or FILE_COPY_OVERWRITE is specified and the target is a file,
    * then a Gio::Error with WOULD_RECURSE will be thrown.
    *
    * If you are interested in copying the Gio::File object itself (not the on-disk file), see File::dup().
    */
-  bool copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags = CopyFlags::NONE);
+  bool copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags = FILE_COPY_NONE);
 
   /** Copies the file source to the location specified by destination. Can not handle recursive copies of directories.
-   * If the flag CopyFlags::OVERWRITE is specified an already existing destination file is overwritten.
-   * If the flag CopyFlags::NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
+   * If the flag FILE_COPY_OVERWRITE is specified an already existing destination file is overwritten.
+   * If the flag FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
    *
    * The operation can be monitored via the @a slot callback.
    *
    * If the source file does not exist then a Gio::Error with NOT_FOUND will be thrown, independent on the status of the destination.
    *
-   * If CopyFlags::OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
+   * If FILE_COPY_OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
    *
    * If trying to overwrite a file over a directory a Gio::Error with IS_DIRECTORY will be thrown.
    * If trying to overwrite a directory with a directory a Gio::Error with WOULD_MERGE will be thrown.
    *
-   * If the source is a directory and the target does not exist, or CopyFlags::OVERWRITE is specified and the target is a file,
+   * If the source is a directory and the target does not exist, or FILE_COPY_OVERWRITE is specified and the target is a file,
    * then a Gio::Error with WOULD_RECURSE will be thrown.
    *
    * If you are interested in copying the Gio::File object itself (not the on-disk file), see File::dup().
    */
-  bool copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, CopyFlags flags = CopyFlags::NONE);
+  bool copy(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, FileCopyFlags flags = FILE_COPY_NONE);
 
   /** Copies the file source to the location specified by destination. Can not handle recursive copies of directories.
-   * If the flag CopyFlags::OVERWRITE is specified an already existing destination file is overwritten.
-   * If the flag CopyFlags::NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
+   * If the flag FILE_COPY_OVERWRITE is specified an already existing destination file is overwritten.
+   * If the flag FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
    *
    * If the source file does not exist then a Gio::Error with NOT_FOUND will be thrown, independent on the status of the destination.
    *
-   * If CopyFlags::OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
+   * If FILE_COPY_OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
    *
    * If trying to overwrite a file over a directory a Gio::Error with IS_DIRECTORY will be thrown.
    * If trying to overwrite a directory with a directory a Gio::Error with WOULD_MERGE will be thrown.
    *
-   * If the source is a directory and the target does not exist, or CopyFlags::OVERWRITE is specified and the target is a file,
+   * If the source is a directory and the target does not exist, or FILE_COPY_OVERWRITE is specified and the target is a file,
    * then a Gio::Error with WOULD_RECURSE will be thrown.
    *
    * If you are interested in copying the Gio::File object itself (not the on-disk file), see File::dup().
    */
-  bool copy(const Glib::RefPtr<File>& destination, CopyFlags flags = CopyFlags::NONE);
+  bool copy(const Glib::RefPtr<File>& destination, FileCopyFlags flags = FILE_COPY_NONE);
   _IGNORE(g_file_copy)
 
   /** Copies the file to the location specified by @a destination asynchronously.
@@ -1195,10 +1194,10 @@ public:
    * @param slot_progress The callback slot to be called with progress information
    * @param slot_ready A SlotAsyncReady to call when the request is satisfied
    * @param cancellable A Cancellable object which can be used to cancel the operation
-   * @param flags Set of CopyFlags
+   * @param flags Set of FileCopyFlags
    * @param io_priority The I/O priority of the request
    */
-  void copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress, const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags = CopyFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress, const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags = FILE_COPY_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Copies the file to the location specified by @a destination asynchronously.
    * For details of the behaviour, see copy().
@@ -1209,10 +1208,10 @@ public:
    * @param destination Destination File
    * @param slot_ready A SlotAsyncReady to call when the request is satisfied
    * @param cancellable A Cancellable object which can be used to cancel the operation
-   * @param flags Set of CopyFlags
+   * @param flags Set of FileCopyFlags
    * @param io_priority The I/O priority of the request
    */
-  void copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags = CopyFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags = FILE_COPY_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Copies the file to the location specified by @a destination asynchronously.
    * For details of the behaviour, see copy().
@@ -1227,10 +1226,10 @@ public:
    * @param destination Destination File
    * @param slot_progress The callback slot to be called with progress information
    * @param slot_ready A SlotAsyncReady to call when the request is satisfied
-   * @param flags Set of CopyFlags
+   * @param flags Set of FileCopyFlags
    * @param io_priority The I/O priority of the request
    */
-  void copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress, const SlotAsyncReady& slot_ready, CopyFlags flags = CopyFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void copy_async(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot_progress, const SlotAsyncReady& slot_ready, FileCopyFlags flags = FILE_COPY_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Copies the file to the location specified by @a destination asynchronously.
    * For details of the behaviour, see copy().
@@ -1240,10 +1239,10 @@ public:
    *
    * @param destination Destination File
    * @param slot_ready A SlotAsyncReady to call when the request is satisfied
-   * @param flags Set of CopyFlags
+   * @param flags Set of FileCopyFlags
    * @param io_priority The I/O priority of the request
    */
-  void copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready, CopyFlags flags = CopyFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void copy_async(const Glib::RefPtr<File>& destination, const SlotAsyncReady& slot_ready, FileCopyFlags flags = FILE_COPY_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_copy_async)
 
   _WRAP_METHOD(bool copy_finish(const Glib::RefPtr<AsyncResult>& res),
@@ -1254,27 +1253,27 @@ public:
    * used, otherwise a copy and delete fallback is used. The native implementation may support moving directories (for instance on moves inside
    * the same filesystem), but the fallback code does not.
    *
-   * If the flag CopyFlags::OVERWRITE is specified an already existing destination file is overwritten.
+   * If the flag FILE_COPY_OVERWRITE is specified an already existing destination file is overwritten.
    *
-   * If the flag CopyFlags::NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
+   * If the flag FILE_COPY_NOFOLLOW_SYMLINKS is specified then symlinks will be copied as symlinks, otherwise the target of the source symlink will be copied.
    *
    * The operation can be cancelled by triggering the cancellable object from another thread. If the operation was cancelled, a Gio::Error with CANCELLED will be thrown.
    *
    * The operation can be monitored via the @a slot callback.
    * If the source file does not exist then a Gio::Error with NOT_FOUND will be thrown, independent on the status of the destination.
    *
-   * If G_CopyFlags::OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
+   * If G_FILE_COPY_OVERWRITE is not specified and the target exists, then a Gio::Error with EXISTS will be thrown.
    *
    * If trying to overwrite a file over a directory a Gio::Error with IS_DIRECTORY will be thrown.
    * If trying to overwrite a directory with a directory a Gio::Error with WOULD_MERGE will be thrown.
    *
-   * If the source is a directory and the target does not exist, or CopyFlags::OVERWRITE is specified and the target is a file, then a Gio::Error with WOULD_RECURSE may be thrown (if the native move operation isn't available).
+   * If the source is a directory and the target does not exist, or FILE_COPY_OVERWRITE is specified and the target is a file, then a Gio::Error with WOULD_RECURSE may be thrown (if the native move operation isn't available).
    */
-  bool move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags = CopyFlags::NONE);
+  bool move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags = FILE_COPY_NONE);
 
-  bool move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, CopyFlags flags = CopyFlags::NONE);
+  bool move(const Glib::RefPtr<File>& destination, const SlotFileProgress& slot, FileCopyFlags flags = FILE_COPY_NONE);
 
-  bool move(const Glib::RefPtr<File>& destination, CopyFlags flags = CopyFlags::NONE);
+  bool move(const Glib::RefPtr<File>& destination, FileCopyFlags flags = FILE_COPY_NONE);
   _IGNORE(g_file_move)
 
   _WRAP_METHOD(bool make_directory(const Glib::RefPtr<Cancellable>& cancellable{?}),
@@ -1348,7 +1347,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @return <tt>true</tt> if there was any error, <tt>false</tt> otherwise.
    */
-  bool set_attributes_from_info(const Glib::RefPtr<FileInfo>& info, const Glib::RefPtr<Cancellable>& cancellable, FileQueryInfoFlags flags = FileQueryInfoFlags::NONE);
+  bool set_attributes_from_info(const Glib::RefPtr<FileInfo>& info, const Glib::RefPtr<Cancellable>& cancellable, FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE);
 
   /** Tries to set all attributes in the FileInfo on the target values,
    * not stopping on the first error.
@@ -1366,7 +1365,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @return <tt>true</tt> if there was any error, <tt>false</tt> otherwise.
    */
-  bool set_attributes_from_info(const Glib::RefPtr<FileInfo>& info, FileQueryInfoFlags flags = FileQueryInfoFlags::NONE);
+  bool set_attributes_from_info(const Glib::RefPtr<FileInfo>& info, FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE);
   _IGNORE(g_file_set_attributes_from_info)
 
 
@@ -1381,7 +1380,7 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void set_attributes_async(const Glib::RefPtr<FileInfo>& info, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void set_attributes_async(const Glib::RefPtr<FileInfo>& info, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Asynchronously sets the attributes of file with info.
    *
@@ -1393,13 +1392,13 @@ public:
    * @param flags A set of FileQueryInfoFlags.
    * @param io_priority The I/O priority of the request.
    */
-  void set_attributes_async(const Glib::RefPtr<FileInfo>& info, const SlotAsyncReady& slot, FileQueryInfoFlags flags = FileQueryInfoFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void set_attributes_async(const Glib::RefPtr<FileInfo>& info, const SlotAsyncReady& slot, FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_set_attributes_async)
   _IGNORE(g_file_set_attributes_finish) // takes GFileInfo**
 
   bool set_attributes_finish(const Glib::RefPtr<AsyncResult>& result, const Glib::RefPtr<FileInfo>& info);
 
-  _WRAP_METHOD(bool set_attribute_string(const std::string& attribute, const Glib::ustring& value, FileQueryInfoFlags flags, const Glib::RefPtr<Cancellable>& cancellable{?}),
+  _WRAP_METHOD(bool set_attribute_string(const std::string& attribute, const std::string& value, FileQueryInfoFlags flags, const Glib::RefPtr<Cancellable>& cancellable{?}),
                g_file_set_attribute_string,
                errthrow)
 
@@ -1436,7 +1435,7 @@ public:
    * @param cancellable A Cancellable object.
    * @param flags Flags affecting the operation.
    */
-  void mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Starts a @a mount_operation, mounting the volume that contains the file.
    *
@@ -1447,7 +1446,7 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_enclosing_volume(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Starts a @a mount_operation, mounting the volume that contains the file.
    *
@@ -1457,14 +1456,14 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void mount_enclosing_volume(const SlotAsyncReady& slot, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_enclosing_volume(const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
   _IGNORE(g_file_mount_enclosing_volume)
 
   /** Starts a @a mount_operation, mounting the volume that contains the file.
    *
    * @param flags Flags affecting the operation.
    */
-  void mount_enclosing_volume(Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_enclosing_volume(MountMountFlags flags = MOUNT_MOUNT_NONE);
   _IGNORE(g_file_mount_enclosing_volume)
 
   _WRAP_METHOD(bool mount_enclosing_volume_finish(const Glib::RefPtr<AsyncResult>& result),
@@ -1484,7 +1483,7 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a file of type FILE_TYPE_MOUNTABLE. Using @a mount_operation, you can request callbacks when, for instance,
    * passwords are needed during authentication.
@@ -1495,7 +1494,7 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a file of type FILE_TYPE_MOUNTABLE without user interaction.
    *
@@ -1504,13 +1503,13 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void mount_mountable(const SlotAsyncReady& slot, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_mountable(const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a file of type FILE_TYPE_MOUNTABLE without user interaction.
    *
    * @param flags Flags affecting the operation.
    */
-  void mount_mountable(Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount_mountable(MountMountFlags flags = MOUNT_MOUNT_NONE);
   _IGNORE(g_file_mount_mountable)
 
   _WRAP_METHOD(Glib::RefPtr<File> mount_mountable_finish(const Glib::RefPtr<AsyncResult>& result),
@@ -1528,7 +1527,7 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param flags Flags affecting the operation.
    */
-  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Unmounts a file of type FILE_TYPE_MOUNTABLE.
    *
@@ -1537,13 +1536,13 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void unmount_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Unmounts a file of type FILE_TYPE_MOUNTABLE.
    *
    * @param flags Flags affecting the operation.
    */
-  void unmount_mountable(Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Unmounts a file of type FILE_TYPE_MOUNTABLE.
    *
@@ -1559,7 +1558,7 @@ public:
    *
    * @newin{2,24}
    */
-  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Unmounts a file of type FILE_TYPE_MOUNTABLE.
    *
@@ -1571,7 +1570,7 @@ public:
    *
    * @newin{2,24}
    */
-  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Unmounts a file of type FILE_TYPE_MOUNTABLE.
    *
@@ -1580,7 +1579,7 @@ public:
    *
    * @newin{2,24}
    */
-  void unmount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void unmount_mountable(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   _IGNORE(g_file_unmount_mountable, g_file_unmount_mountable_finish, g_file_unmount_mountable_with_operation)
 
@@ -1599,7 +1598,7 @@ public:
    * @param cancellable A Cancellable object which can be used to cancel the operation.
    * @param flags Flags affecting the operation.
    */
-  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Starts an asynchronous eject on a mountable.
    *
@@ -1608,13 +1607,13 @@ public:
    * @param slot A callback slot which will be called when the request is satisfied.
    * @param flags Flags affecting the operation.
    */
-  void eject_mountable(const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Starts an asynchronous eject on a mountable.
    *
    * @param flags Flags affecting the operation.
    */
-  void eject_mountable(Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Starts an asynchronous eject on a mountable.
    *
@@ -1630,7 +1629,7 @@ public:
    *
    * @newin{2,24}
    */
-  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Starts an asynchronous eject on a mountable.
    *
@@ -1642,7 +1641,7 @@ public:
    *
    * @newin{2,24}
    */
-  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   /** Starts an asynchronous eject on a mountable.
    *
@@ -1651,7 +1650,7 @@ public:
    *
    * @newin{2,24}
    */
-  void eject_mountable(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject_mountable(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
   _IGNORE(g_file_eject_mountable, g_file_eject_mountable_finish, g_file_eject_mountable_with_operation)
 
@@ -1665,7 +1664,7 @@ public:
    * Normally only a subset of the file attributes are copied,
    * those that are copies in a normal file copy operation
    * (which for instance does not include e.g. mtime). However
-   * if CopyFlags::ALL_METADATA is specified in @a flags, then
+   * if FILE_COPY_ALL_METADATA is specified in @a flags, then
    * all the metadata that is possible to copy is copied.
    *
    * @param destination A File to copy attributes to.
@@ -1673,21 +1672,21 @@ public:
    * @param flags A set of FileMonitorFlags.
    * @result true if the attributes were copied successfully, false otherwise.
    */
-  bool copy_attributes(const Glib::RefPtr<File>& destination, const Glib::RefPtr<Cancellable>& cancellable, CopyFlags flags = CopyFlags::NONE);
+  bool copy_attributes(const Glib::RefPtr<File>& destination, const Glib::RefPtr<Cancellable>& cancellable, FileCopyFlags flags = FILE_COPY_NONE);
 
   /** Copies the file attributes from @a source to @a destination.
    *
    * Normally only a subset of the file attributes are copied,
    * those that are copies in a normal file copy operation
    * (which for instance does not include e.g. mtime). However
-   * if CopyFlags::ALL_METADATA is specified in @a flags, then
+   * if FILE_COPY_ALL_METADATA is specified in @a flags, then
    * all the metadata that is possible to copy is copied.
    *
    * @param destination A File to copy attributes to.
    * @param flags A set of FileMonitorFlags.
    * @result true if the attributes were copied successfully, false otherwise.
    */
-  bool copy_attributes(const Glib::RefPtr<File>& destination, CopyFlags flags = CopyFlags::NONE);
+  bool copy_attributes(const Glib::RefPtr<File>& destination, FileCopyFlags flags = FILE_COPY_NONE);
   _IGNORE(g_file_copy_attributes)
 
   /** Obtains a directory monitor for the given file.
@@ -1700,7 +1699,7 @@ public:
    * @param flags A set of FileMonitorFlags.
    * @return A FileMonitor for the file.
    */
-  Glib::RefPtr<FileMonitor> monitor_directory(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor_directory(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FILE_MONITOR_NONE);
 
   /** Obtains a directory monitor for the given file.
    * This may fail if directory monitoring is not supported.
@@ -1708,7 +1707,7 @@ public:
    * @param flags A set of FileMonitorFlags.
    * @return A FileMonitor for the file.
    */
-  Glib::RefPtr<FileMonitor> monitor_directory(FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor_directory(FileMonitorFlags flags = FILE_MONITOR_NONE);
   _IGNORE(g_file_monitor_directory)
 
   /** Obtains a file monitor for the given file. If no file notification
@@ -1721,7 +1720,7 @@ public:
    * @param flags A set of FileMonitorFlags.
    * @return A FileMonitor for the file.
    */
-  Glib::RefPtr<FileMonitor> monitor_file(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor_file(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FILE_MONITOR_NONE);
 
   /** Obtains a file monitor for the given file. If no file notification
    * mechanism exists, then regular polling of the file is used.
@@ -1732,7 +1731,7 @@ public:
    * @param flags A set of FileMonitorFlags.
    * @return A FileMonitor for the file.
    */
-  Glib::RefPtr<FileMonitor> monitor_file(FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor_file(FileMonitorFlags flags = FILE_MONITOR_NONE);
   _IGNORE(g_file_monitor_file)
 
 
@@ -1748,7 +1747,7 @@ public:
    *
    * @newin{2,18}
    */
-  Glib::RefPtr<FileMonitor> monitor(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor(const Glib::RefPtr<Cancellable>& cancellable, FileMonitorFlags flags = FILE_MONITOR_NONE);
 
   /** Obtains a file monitor for the given file. If no file notification
    * mechanism exists, then regular polling of the file is used.
@@ -1761,7 +1760,7 @@ public:
    *
    * @newin{2,18}
    */
-  Glib::RefPtr<FileMonitor> monitor(FileMonitorFlags flags = FileMonitorFlags::NONE);
+  Glib::RefPtr<FileMonitor> monitor(FileMonitorFlags flags = FILE_MONITOR_NONE);
   _IGNORE(g_file_monitor)
 
 
@@ -1803,7 +1802,7 @@ public:
   *
   * @newin{2,38}
   */
- using SlotFileMeasureProgress = sigc::slot<void(bool, guint64, guint64, guint64)>;
+ using SlotFileMeasureProgress = sigc::slot<void, bool, guint64, guint64, guint64>;
 
   //We do not use the {callback} syntax with _WRAP_METHOD here, because it expects to use user_data rather than progress_data.
   //We ignore the gboolean result, because we throw an exception if it is false.
@@ -1833,9 +1832,9 @@ public:
    * @param disk_usage The number of bytes of disk space used.
    * @param num_dirs The number of directories encountered.
    * @param num_files The number of non-directories encountered.
-   * @param flags Set of MeasureFlags.
+   * @param flags Set of FileMeasureFlags.
    */
-  void measure_disk_usage(const Glib::RefPtr<Cancellable>& cancellable, const SlotFileMeasureProgress& slot_progress, guint64& disk_usage, guint64& num_dirs, guint64& num_files, MeasureFlags flags = MeasureFlags::NONE);
+  void measure_disk_usage(const Glib::RefPtr<Cancellable>& cancellable, const SlotFileMeasureProgress& slot_progress, guint64& disk_usage, guint64& num_dirs, guint64& num_files, FileMeasureFlags flags = FILE_MEASURE_NONE);
   _IGNORE(g_file_measure_disk_usage)
 
   /** Recursively measures the disk usage of the file.
@@ -1849,10 +1848,10 @@ public:
    * @param slot_ready A SlotAsyncReady to call when the request is satisfied
    * @param cancellable A Cancellable object which can be used to cancel the operation
    * @param slot_progress The callback slot to be called with progress information
-   * @param flags Set of MeasureFlags
+   * @param flags Set of FileMeasureFlags
    * @param io_priority The I/O priority of the request
    */
-  void measure_disk_usage_async(const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, const SlotFileMeasureProgress& slot_progress, MeasureFlags flags = MeasureFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void measure_disk_usage_async(const SlotAsyncReady& slot_ready, const Glib::RefPtr<Cancellable>& cancellable, const SlotFileMeasureProgress& slot_progress, FileMeasureFlags flags = FILE_MEASURE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_measure_disk_usage_async)
 
   _WRAP_METHOD(bool measure_disk_usage_finish(const Glib::RefPtr<AsyncResult>& result, guint64& disk_usage, guint64& num_dirs, guint64& num_files), g_file_measure_disk_usage_finish, errthrow)
@@ -1879,7 +1878,7 @@ public:
   *
   * @newin{2,24}
   */
-  void start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& start_operation, Drive::StartFlags flags = Drive::StartFlags::NONE);
+  void start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& start_operation, DriveStartFlags flags = DRIVE_START_NONE);
 
  /** Starts a file of type Mountable.
   * Using @a start_operation, you can request callbacks when, for instance,
@@ -1898,7 +1897,7 @@ public:
   *
   * @newin{2,24}
   */
-  void start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& start_operation, Drive::StartFlags flags =  Drive::StartFlags::NONE);
+  void start_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& start_operation, DriveStartFlags flags =  DRIVE_START_NONE);
   _IGNORE(g_file_start_mountable)
 
   _WRAP_METHOD(bool start_mountable_finish(const Glib::RefPtr<AsyncResult>& result),
@@ -1923,7 +1922,7 @@ public:
   *
   * @newin{2,24}
   */
-  void stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& start_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<MountOperation>& start_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
 
 
  /** Stops a file of type Mountable.
@@ -1943,7 +1942,7 @@ public:
   *
   * @newin{2,24}
   */
-  void stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& start_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void stop_mountable(const SlotAsyncReady& slot, const Glib::RefPtr<MountOperation>& start_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_file_stop_mountable)
 
   _WRAP_METHOD(bool stop_mountable_finish(const Glib::RefPtr<AsyncResult>& result),
@@ -2097,7 +2096,7 @@ public:
   /** A signal handler would be, for instance:
    * bool on_read_more(const char* file_contents, goffset file_size);
    */
-  using SlotReadMore = sigc::slot<bool(const char*, goffset)>;
+  using SlotReadMore = sigc::slot<bool, const char*, goffset>;
 
   //Note that slot_read_more can be nullptr but that would not be a useful method overload, because the documentation says that it would
   //then be equivalent to load_contents_async.
@@ -2172,12 +2171,12 @@ public:
    * @param etag The old entity tag
    * for the document.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param new_etag A location to a new entity tag
    * for the document.
    * @param cancellable A Cancellable object.
    */
-  void replace_contents(const char* contents, gsize length, const std::string& etag, std::string& new_etag, const Glib::RefPtr<Cancellable>& cancellable, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents(const char* contents, gsize length, const std::string& etag, std::string& new_etag, const Glib::RefPtr<Cancellable>& cancellable, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Replaces the contents of the file with @a contents of @a length bytes.
    *
@@ -2193,11 +2192,11 @@ public:
    * @param etag The old entity tag
    * for the document.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param new_etag A location to a new entity tag
    * for the document.
    */
-  void replace_contents(const char* contents, gsize length, const std::string& etag, std::string& new_etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents(const char* contents, gsize length, const std::string& etag, std::string& new_etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Replaces the contents of the file with @a contents.
    *
@@ -2216,12 +2215,12 @@ public:
    * @param etag The old entity tag
    * for the document.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param new_etag A location to a new entity tag
    * for the document.
    * @param cancellable A Cancellable object.
    */
-  void replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag, const Glib::RefPtr<Cancellable>& cancellable, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag, const Glib::RefPtr<Cancellable>& cancellable, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   /** Replaces the contents of the file with @a contents.
    *
@@ -2236,11 +2235,11 @@ public:
    * @param etag The old entity tag
    * for the document.
    * @param make_backup <tt>true</tt> if a backup should be created.
-   * @param flags A set of CreateFlags.
+   * @param flags A set of FileCreateFlags.
    * @param new_etag A location to a new entity tag
    * for the document.
    */
-  void replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents(const std::string& contents, const std::string& etag, std::string& new_etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
   _IGNORE(g_file_replace_contents)
 
 
@@ -2267,9 +2266,9 @@ public:
   * @param length The length of @a contents in bytes.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const char* contents, gsize length, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const char* contents, gsize length, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
  /** Starts an asynchronous replacement of the file with the given
   * @a contents of @a length bytes. @a etag will replace the document's
@@ -2286,9 +2285,9 @@ public:
   * @param length The length of @a contents in bytes.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_async(const SlotAsyncReady& slot, const char* contents, gsize length, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_async(const SlotAsyncReady& slot, const char* contents, gsize length, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
  /** Starts an asynchronous replacement of the file with the given
   * @a contents of @a length bytes. @a etag will replace the document's
@@ -2309,9 +2308,9 @@ public:
   * @param contents String of contents to replace the file with.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& contents, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const std::string& contents, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
  /** Starts an asynchronous replacement of the file with the given
   * @a contents. @a etag will replace the document's
@@ -2331,9 +2330,9 @@ public:
   * @param contents String of contents to replace the file with.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_async(const SlotAsyncReady& slot, const std::string& contents, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_async(const SlotAsyncReady& slot, const std::string& contents, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   _IGNORE(g_file_replace_contents_async)
 
@@ -2373,9 +2372,9 @@ public:
   * @param contents Bytes of contents to replace the file with.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_bytes_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<const Glib::Bytes>& contents, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_bytes_async(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, const Glib::RefPtr<const Glib::Bytes>& contents, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
  /** Same as replace_contents_async() but takes a Gio::Bytes input instead.
   *
@@ -2393,9 +2392,9 @@ public:
   * @param contents Bytes of contents to replace the file with.
   * @param etag a new entity tag for the file.
   * @param make_backup true if a backup should be created.
-  * @param flags A set of CreateFlags.
+  * @param flags A set of FileCreateFlags.
   */
-  void replace_contents_bytes_async(const SlotAsyncReady& slot, const Glib::RefPtr<const Glib::Bytes>& contents, const std::string& etag, bool make_backup = false, CreateFlags flags = CreateFlags::NONE);
+  void replace_contents_bytes_async(const SlotAsyncReady& slot, const Glib::RefPtr<const Glib::Bytes>& contents, const std::string& etag, bool make_backup = false, FileCreateFlags flags = FILE_CREATE_NONE);
 
   _IGNORE(g_file_replace_contents_async)
 
index e33784c..a3884e6 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -25,7 +22,7 @@ namespace Gio
 FileAttributeInfo::FileAttributeInfo(const GFileAttributeInfo* ginfo)
 : m_name(ginfo->name ? ginfo->name : ""),
   m_type(static_cast<FileAttributeType>(ginfo->type)),
-  m_flags(static_cast<Flags>(ginfo->flags))
+  m_flags(static_cast<FileAttributeInfoFlags>(ginfo->flags))
 {
 }
 
@@ -76,7 +73,7 @@ FileAttributeInfo::get_type() const
   return m_type;
 }
 
-FileAttributeInfo::Flags
+FileAttributeInfoFlags
 FileAttributeInfo::get_flags() const
 {
   return m_flags;
index a76d04d..846c568 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <string>
@@ -27,6 +24,7 @@ namespace Gio
 {
 
 _WRAP_ENUM(FileAttributeType, GFileAttributeType)
+_WRAP_ENUM(FileAttributeInfoFlags, GFileAttributeInfoFlags)
 _WRAP_ENUM(FileAttributeStatus, GFileAttributeStatus)
 
 
@@ -38,8 +36,6 @@ class FileAttributeInfo
 {
   _CLASS_GENERIC(FileAttributeInfo, GFileAttributeInfo)
 public:
-  _WRAP_ENUM(Flags, GFileAttributeInfoFlags)
-
   explicit FileAttributeInfo(const GFileAttributeInfo* ginfo);
 
   FileAttributeInfo(const FileAttributeInfo& other);
@@ -52,12 +48,12 @@ public:
 
   std::string get_name() const;
   FileAttributeType get_type() const;
-  Flags get_flags() const;
+  FileAttributeInfoFlags get_flags() const;
 
 protected:
   std::string m_name;
   FileAttributeType m_type;
-  Flags m_flags;
+  FileAttributeInfoFlags m_flags;
 };
 
 } // namespace Gio
index 98d0efa..eee5028 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 1dcec02..5578b5b 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/fileattributeinfo.h>
@@ -30,7 +31,7 @@ namespace Gio
  * e.g. "standard::*" will return all of the keys in the "standard" namespace.
  *
  * Values are stored within the list in Gio::FileAttributeValue structures. Values can store different types, listed in the enum
- * Gio::FileAttributeType. Upon creation of a Gio::FileAttributeValue, the type will be set to Gio::FileAttributeType::INVALID.
+ * Gio::FileAttributeType. Upon creation of a Gio::FileAttributeValue, the type will be set to Gio::FILE_ATTRIBUTE_TYPE_INVALID.
  *
  * The list of possible attributes for a filesystem (pointed to by a Gio::File) is availible as a Gio::FileAttributeInfoList.
  * This list is queryable by key names as indicated earlier.
@@ -71,7 +72,7 @@ public:
 
   _WRAP_METHOD(Glib::RefPtr<FileAttributeInfoList> dup() const, g_file_attribute_info_list_dup)
 
-  _WRAP_METHOD(void add(const std::string& name, FileAttributeType type, FileAttributeInfo::Flags flags = FileAttributeInfo::Flags::NONE), g_file_attribute_info_list_add)
+  _WRAP_METHOD(void add(const std::string& name, FileAttributeType type, FileAttributeInfoFlags flags = FILE_ATTRIBUTE_INFO_NONE), g_file_attribute_info_list_add)
 };
 
 } // namespace Gio
index b59cca0..9b975bc 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ace27e5..f6e0568 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The glibmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
+#include <glibmm/arrayhandle.h>
+#include <glibmm/listhandle.h>
 #include <glibmm/priorities.h>
 #include <giomm/asyncresult.h>
 #include <giomm/cancellable.h>
@@ -97,8 +96,8 @@ public:
   void next_files_async(const SlotAsyncReady& slot, int num_files = 1, int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_file_enumerator_next_files_async)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<FileInfo>>', `Glib::ListHandler<Glib::RefPtr<FileInfo>>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<FileInfo>> next_files_finish(const Glib::RefPtr<AsyncResult>& result),
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<FileInfo> >', `$2(($3), Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<FileInfo> > next_files_finish(const Glib::RefPtr<AsyncResult>& result),
                g_file_enumerator_next_files_finish,
                errthrow)
 
index 70b732c..06d4e85 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 35d1a7a..24c3982 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index fa35995..d18d926 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 93a39a6..80399c3 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <glibmm/arrayhandle.h>
 #include <glibmm/datetime.h>
 #include <glibmm/object.h>
 #include <glibmm/timeval.h>
@@ -26,7 +26,17 @@ _PINCLUDE(glibmm/private/object_p.h)
 
 namespace Gio
 {
-_WRAP_ENUM(FileType, GFileType, NO_GTYPE)
+
+// Rename FILE_TYPE_UNKNOWN to FILE_TYPE_NOT_KNOWN because the former is a
+// define in a Windows header (winbase.h, included from windows.h).
+_WRAP_ENUM(FileType, GFileType, NO_GTYPE, s#FILE_TYPE_UNKNOWN#FILE_TYPE_NOT_KNOWN#)
+
+// Provide FILE_TYPE_UNKNOWN for backwards compatibility.
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#ifndef FILE_TYPE_UNKNOWN
+const FileType FILE_TYPE_UNKNOWN = FILE_TYPE_NOT_KNOWN;
+#endif
+#endif
 
 //TODO: attribute strings
 
@@ -85,8 +95,8 @@ public:
 
   _WRAP_METHOD(bool has_namespace(const std::string& name_space) const, g_file_info_has_namespace)
 
-  #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> list_attributes(const std::string& name_space{?}) const,
+  #m4 _CONVERSION(`char**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle list_attributes(const std::string& name_space{?}) const,
                g_file_info_list_attributes)
 
   _WRAP_METHOD(FileAttributeType get_attribute_type(const std::string& attribute) const,
@@ -96,7 +106,8 @@ public:
 
   _WRAP_METHOD(FileAttributeStatus get_attribute_status(const std::string& attribute) const, g_file_info_get_attribute_status)
 
-  _WRAP_METHOD(Glib::ustring get_attribute_string(const std::string& attribute) const,
+  //TODO: This should return a ustring instead: https://bugzilla.gnome.org/show_bug.cgi?id=615950#c7
+  _WRAP_METHOD(std::string get_attribute_string(const std::string& attribute) const,
                g_file_info_get_attribute_string)
 
 #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
@@ -121,7 +132,8 @@ public:
 
   _WRAP_METHOD(bool set_attribute_status(const std::string& attribute, FileAttributeStatus status), g_file_info_set_attribute_status)
 
-  _WRAP_METHOD(void set_attribute_string(const std::string& attribute, const Glib::ustring& attr_value),
+  //TODO: This should take a ustring value instead: https://bugzilla.gnome.org/show_bug.cgi?id=615950#c7
+  _WRAP_METHOD(void set_attribute_string(const std::string& attribute, const std::string& attr_value),
                g_file_info_set_attribute_string)
 
 #m4 _CONVERSION(`const std::vector<Glib::ustring>&',`char**',`const_cast<char**>(Glib::ArrayHandler<Glib::ustring>::vector_to_array($3).data())')
@@ -152,9 +164,11 @@ public:
   _WRAP_METHOD(bool is_symlink() const, g_file_info_get_is_symlink)
   _WRAP_METHOD(std::string get_name() const, g_file_info_get_name)
 
-  _WRAP_METHOD(Glib::ustring get_display_name() const, g_file_info_get_display_name)
+  //TODO: This should return a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(std::string get_display_name() const, g_file_info_get_display_name)
 
-  _WRAP_METHOD(Glib::ustring get_edit_name() const, g_file_info_get_edit_name)
+  //TODO: This should return a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(std::string get_edit_name() const, g_file_info_get_edit_name)
 
   _WRAP_METHOD(Glib::RefPtr<Icon> get_icon(), g_file_info_get_icon, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Icon> get_icon() const, g_file_info_get_icon, refreturn, constversion)
@@ -162,7 +176,8 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Icon> get_symbolic_icon(), g_file_info_get_symbolic_icon, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Icon> get_symbolic_icon() const, g_file_info_get_symbolic_icon, refreturn, constversion)
 
-  _WRAP_METHOD(Glib::ustring get_content_type() const, g_file_info_get_content_type)
+  //TODO: This should return a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(std::string get_content_type() const, g_file_info_get_content_type)
 
   _WRAP_METHOD(goffset get_size() const, g_file_info_get_size)
 
@@ -171,7 +186,8 @@ public:
 
   _WRAP_METHOD(std::string get_symlink_target() const, g_file_info_get_symlink_target)
 
-  _WRAP_METHOD(Glib::ustring get_etag() const, g_file_info_get_etag)
+  //TODO: This should return a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(std::string get_etag() const, g_file_info_get_etag)
 
   _WRAP_METHOD(gint32 get_sort_order() const, g_file_info_get_sort_order)
   _WRAP_METHOD(void set_attribute_mask(const Glib::RefPtr<FileAttributeMatcher>& mask),
@@ -185,14 +201,17 @@ public:
   _WRAP_METHOD(void set_is_symlink(bool symlink = true), g_file_info_set_is_symlink)
   _WRAP_METHOD(void set_name(const std::string& name), g_file_info_set_name)
 
-  _WRAP_METHOD(void set_display_name(const Glib::ustring& display_name), g_file_info_set_display_name)
+  //TODO: This should take a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(void set_display_name(const std::string& display_name), g_file_info_set_display_name)
 
-  _WRAP_METHOD(void set_edit_name(const Glib::ustring& edit_name), g_file_info_set_edit_name)
+  //TODO: This should take a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(void set_edit_name(const std::string& edit_name), g_file_info_set_edit_name)
 
   _WRAP_METHOD(void set_icon(const Glib::RefPtr<Icon>& icon), g_file_info_set_icon)
   _WRAP_METHOD(void set_symbolic_icon(const Glib::RefPtr<Icon>& icon), g_file_info_set_symbolic_icon)
 
-  _WRAP_METHOD(void set_content_type(const Glib::ustring& content_type), g_file_info_set_content_type)
+  //TODO: This should take a ustring instead. See https://bugzilla.gnome.org/show_bug.cgi?id=615950#c4
+  _WRAP_METHOD(void set_content_type(const std::string& content_type), g_file_info_set_content_type)
 
   _WRAP_METHOD(void set_size(goffset size), g_file_info_set_size)
 
index ef1b73e..9280054 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a9cca15..0159d8c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/fileinfo.h>
index 21002d3..f358384 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3f2ca9c..80c2ea7 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/fileinfo.h>
@@ -98,7 +99,7 @@ public:
   _WRAP_METHOD(Glib::RefPtr<FileInfo> query_info_finish(const Glib::RefPtr<AsyncResult>& result),
                g_file_io_stream_query_info_finish,
                errthrow)
-  _WRAP_METHOD(Glib::ustring get_etag() const, g_file_io_stream_get_etag)
+  _WRAP_METHOD(std::string get_etag() const, g_file_io_stream_get_etag)
 
 };
 
index ca5a3ac..9d1c0fe 100644 (file)
@@ -94,7 +94,6 @@ giomm_files_any_hg =                  \
        permission.hg           \
        pollableinputstream.hg          \
        pollableoutputstream.hg         \
-       propertyaction.hg \
        proxy.hg                        \
        proxyaddress.hg                 \
        proxyresolver.hg                \
@@ -137,7 +136,6 @@ giomm_files_any_hg =                        \
        zlibcompressor.hg
 
 giomm_files_posix_hg =                 \
-       desktopappinfo.hg               \
        unixconnection.hg               \
        unixcredentialsmessage.hg       \
        unixfdlist.hg                   \
@@ -146,12 +144,22 @@ giomm_files_posix_hg =                    \
        unixoutputstream.hg             \
        unixsocketaddress.hg
 
+giomm_files_not_mac =                  \
+       desktopappinfo.hg
+
 if HOST_WINDOWS_NATIVE
 giomm_files_arch_hg =
 else
+if OS_COCOA
 giomm_files_arch_hg = $(giomm_files_posix_hg)
+else
+giomm_files_arch_hg = $(giomm_files_not_mac) $(giomm_files_posix_hg)
+endif
 endif
 giomm_files_used_hg = $(giomm_files_any_hg) $(giomm_files_arch_hg)
 
-giomm_files_hg  = $(giomm_files_any_hg) $(giomm_files_posix_hg)
+giomm_files_hg = \
+  $(giomm_files_any_hg) \
+  $(giomm_files_posix_hg) \
+  $(giomm_files_not_mac)
 giomm_files_ccg = $(giomm_files_hg:.hg=.ccg)
index 5bcc977..3901af9 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
 #include <giomm/file.h>
 #include <gio/gio.h>
 
-using Event = Gio::FileMonitor::Event;
-
 namespace Gio
 {
 
index 6348ee9..2318595 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <giomm/file.h>
@@ -27,6 +24,7 @@ _PINCLUDE(gio/gio.h)
 namespace Gio
 {
 
+_WRAP_ENUM(FileMonitorEvent, GFileMonitorEvent, NO_GTYPE)
 
 class File;
 
@@ -46,8 +44,6 @@ protected:
 
 public:
 
-  _WRAP_ENUM(Event, GFileMonitorEvent, NO_GTYPE)
-
   _WRAP_METHOD(bool cancel(), g_file_monitor_cancel)
   _WRAP_METHOD(bool is_cancelled() const, g_file_monitor_is_cancelled)
   _WRAP_METHOD(void set_rate_limit(int limit_msecs), g_file_monitor_set_rate_limit)
@@ -56,7 +52,7 @@ public:
   _IGNORE(g_file_monitor_emit_event)
 
 #m4 _CONVERSION(`GFile*',`const Glib::RefPtr<File>&',`Glib::wrap($3, true)')
-  _WRAP_SIGNAL(void changed(const Glib::RefPtr<File>& file, const Glib::RefPtr<File>& other_file, Event event_type), "changed")
+  _WRAP_SIGNAL(void changed(const Glib::RefPtr<File>& file, const Glib::RefPtr<File>& other_file, FileMonitorEvent event_type), "changed")
 
   //_WRAP_VFUNC(bool cancel(), cancel);
 
index 3161de1..3901af9 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
index 5ec035a..676d196 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <giomm/file.h>
+#include <glibmm/arrayhandle.h>
 #include <glibmm/object.h>
 
 _DEFS(giomm,gio)
@@ -45,8 +43,8 @@ public:
 
   _WRAP_METHOD(std::string get_completion_suffix(const std::string& initial_text) const, g_filename_completer_get_completion_suffix)
 
-  #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> get_completions(const std::string& initial_text) const, g_filename_completer_get_completions)
+  #m4 _CONVERSION(`char**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle get_completions(const std::string& initial_text) const, g_filename_completer_get_completions)
   _WRAP_METHOD(void set_dirs_only(bool dirs_only = true), g_filename_completer_set_dirs_only)
 
   _WRAP_SIGNAL(void got_completion_data(), got_completion_data)
index 2e8040c..d118060 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3539c4c..dc82d8d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/outputstream.h>
@@ -135,7 +134,7 @@ public:
                g_file_output_stream_query_info_finish,
                refreturn, errthrow)
 
-  _WRAP_METHOD(Glib::ustring get_etag() const, g_file_output_stream_get_etag)
+  _WRAP_METHOD(std::string get_etag() const, g_file_output_stream_get_etag)
 };
 
 } // namespace Gio
index f69b83d..2ef4fcf 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index bd35f73..1549bd4 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/inputstream.h>
index 49d0402..ddcd3ef 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6af0821..7a9f762 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/outputstream.h>
index 5e79060..9d757d3 100644 (file)
@@ -1,52 +1,4 @@
 <root>
-<substitute_type_name from="GDBusActionGroup" to="Gio::DBus::ActionGroup" />
-<substitute_type_name from="GDBusConnection" to="Gio::DBus::Connection" />
-<substitute_type_name from="GDBusAuthObserver" to="Gio::DBus::AuthObserver" />
-<substitute_type_name from="GDBusMessage" to="Gio::DBus::Message" />
-<substitute_type_name from="GDBusCallFlags" to="Gio::DBus::CallFlags" />
-<substitute_type_name from="GDBusProxyFlags" to="Gio::DBus::ProxyFlags" />
-<substitute_type_name from="GDBusProxy" to="Gio::DBus::Proxy" />
-<substitute_type_name from="GDBusInterfaceInfo" to="Gio::DBus::InterfaceInfo" />
-<substitute_type_name from="GDBusServer" to="Gio::DBus::Server" />
-<substitute_type_name from="GDBusServerFlags" to="Gio::DBus::ServerFlags" />
-<substitute_type_name from="GIOErrorEnum" to="Gio::Error" />
-
-<substitute_enumerator_name from_prefix="G_APPLICATION_" to_prefix="Gio::ApplicationFlags::" />
-<!-- GConverterFlags and GConverterResult both have prefix G_CONVERTER_. -->
-<substitute_enumerator_name from_prefix="G_CONVERTER_NO_FLAGS" to_prefix="Gio::ConverterFlags::NO_FLAGS" />
-<substitute_enumerator_name from_prefix="G_CONVERTER_INPUT_AT_END" to_prefix="Gio::ConverterFlags::INPUT_AT_END" />
-<substitute_enumerator_name from_prefix="G_CONVERTER_FLUSH" to_prefix="Gio::ConverterFlags::FLUSH" />
-<substitute_enumerator_name from_prefix="G_CONVERTER_" to_prefix="Gio::ConverterResult::" />
-
-<substitute_enumerator_name from_prefix="G_IO_ERROR_" to_prefix="Gio::Error::" />
-<substitute_enumerator_name from_prefix="G_DBUS_CONNECTION_FLAGS_" to_prefix="Gio::DBus::ConnectionFlags::" />
-<substitute_enumerator_name from_prefix="G_DBUS_SEND_MESSAGE_FLAGS_" to_prefix="Gio::DBus::SendMessageFlags::" />
-<substitute_enumerator_name from_prefix="G_DBUS_MESSAGE_TYPE_" to_prefix="Gio::DBus::MessageType::" />
-<substitute_enumerator_name from_prefix="G_DBUS_ERROR_" to_prefix="Gio::DBus::Error::" />
-<substitute_enumerator_name from_prefix="G_DBUS_MESSAGE_HEADER_FIELD_" to_prefix="Gio::DBus::MessageHeaderField::" />
-<substitute_enumerator_name from_prefix="G_DBUS_MESSAGE_FLAGS_" to_prefix="Gio::DBus::MessageFlags::" />
-<substitute_enumerator_name from_prefix="G_DBUS_PROXY_FLAGS_" to_prefix="Gio::DBus::ProxyFlags::" />
-<substitute_enumerator_name from_prefix="G_DBUS_INTERFACE_SKELETON_FLAGS_" to_prefix="Gio::DBus::InterfaceSkeletonFlags::" />
-<substitute_enumerator_name from_prefix="G_BUS_NAME_OWNER_FLAGS_" to_prefix="Gio::DBus::BusNameOwnerFlags::" />
-<substitute_enumerator_name from_prefix="G_DBUS_SERVER_FLAGS_" to_prefix="Gio::DBus::ServerFlags::" />
-<substitute_enumerator_name from_prefix="G_FILE_MONITOR_" to_prefix="Gio::FileMonitorFlags::" />
-<substitute_enumerator_name from_prefix="G_FILE_TYPE_" to_prefix="Gio::FileType::" />
-<substitute_enumerator_name from_prefix="G_NETWORK_CONNECTIVITY_" to_prefix="Gio::NetworkConnectivity::" />
-<substitute_enumerator_name from_prefix="G_RESOLVER_RECORD_" to_prefix="Gio::ResolverRecordType::" />
-<substitute_enumerator_name from_prefix="G_RESOURCE_ERROR_" to_prefix="Gio::ResourceError::" />
-<substitute_enumerator_name from_prefix="G_SETTINGS_BIND_" to_prefix="Gio::SettingsBindFlags::" />
-<substitute_enumerator_name from_prefix="G_SOCKET_PROTOCOL_" to_prefix="Gio::SocketProtocol::" />
-<substitute_enumerator_name from_prefix="G_SOCKET_TYPE_" to_prefix="Gio::SocketType::" />
-<substitute_enumerator_name from_prefix="G_SOCKET_FAMILY_" to_prefix="Gio::SocketFamily::" />
-<substitute_enumerator_name from_prefix="G_IO_" to_prefix="Glib::IOCondition::" />
-<substitute_enumerator_name from_prefix="G_SOCKET_CLIENT_" to_prefix="Gio::SocketClientEvent::" />
-<substitute_enumerator_name from_prefix="G_TLS_CERTIFICATE_" to_prefix="Gio::TlsCertificateFlags::" />
-<substitute_enumerator_name from_prefix="G_TLS_REHANDSHAKE_" to_prefix="Gio::TlsRehandshakeMode::" />
-<substitute_enumerator_name from_prefix="G_TLS_DATABASE_VERIFY_" to_prefix="Gio::TlsDatabaseVerifyFlags::" />
-<substitute_enumerator_name from_prefix="G_TLS_INTERACTION_" to_prefix="Gio::TlsInteractionResult::" />
-<substitute_enumerator_name from_prefix="G_TLS_ERROR_" to_prefix="Gio::TlsError::" />
-<substitute_enumerator_name from_prefix="G_ZLIB_COMPRESSOR_FORMAT_" to_prefix="Gio::ZlibCompressorFormat::" />
-<substitute_enumerator_name from_prefix="G_UNIX_SOCKET_ADDRESS_" to_prefix="Gio::UnixSocketAddressType::" />
 <!-- These are preprocessor defines. Don't substitute. -->
 <substitute_enumerator_name from="G_MAXSSIZE" to="G_MAXSSIZE" />
 <substitute_enumerator_name from="G_MAXINT" to="G_MAXINT" />
@@ -1777,4 +1729,86 @@ errors that can happen due to races when you execute the operation.
 </return>
 </function>
 
+<function name="g_dbus_proxy_call">
+<parameters>
+<parameter name="proxy">
+<parameter_description> A #GDBusProxy.
+</parameter_description>
+</parameter>
+<parameter name="method_name">
+<parameter_description> Name of method to invoke.
+</parameter_description>
+</parameter>
+<parameter name="parameters">
+<parameter_description> A #GVariant tuple with parameters for the signal or %NULL if not passing parameters.
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> Flags from the #GDBusCallFlags enumeration.
+</parameter_description>
+</parameter>
+<parameter name="timeout_msec">
+<parameter_description> The timeout in milliseconds (with %G_MAXINT meaning
+&quot;infinite&quot;) or -1 to use the proxy default timeout.
+</parameter_description>
+</parameter>
+<parameter name="cancellable">
+<parameter_description> A #GCancellable or %NULL.
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> A #GAsyncReadyCallback to call when the request is satisfied. Use another overload
+without this parameter if your don't care about the result of the method invocation.
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> The data to pass to @callback.
+</parameter_description>
+</parameter>
+</parameters>
+</function>
+
+<function name="g_dbus_proxy_call_with_unix_fd_list">
+<parameters>
+<parameter name="proxy">
+<parameter_description> A #GDBusProxy.
+</parameter_description>
+</parameter>
+<parameter name="method_name">
+<parameter_description> Name of method to invoke.
+</parameter_description>
+</parameter>
+<parameter name="parameters">
+<parameter_description> A #GVariant tuple with parameters for the signal or %NULL if not passing parameters.
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> Flags from the #GDBusCallFlags enumeration.
+</parameter_description>
+</parameter>
+<parameter name="timeout_msec">
+<parameter_description> The timeout in milliseconds (with %G_MAXINT meaning
+&quot;infinite&quot;) or -1 to use the proxy default timeout.
+</parameter_description>
+</parameter>
+<parameter name="fd_list">
+<parameter_description> A #GUnixFDList or %NULL.
+</parameter_description>
+</parameter>
+<parameter name="cancellable">
+<parameter_description> A #GCancellable or %NULL.
+</parameter_description>
+</parameter>
+<parameter name="callback">
+<parameter_description> A #GAsyncReadyCallback to call when the request is satisfied. Use another overload
+without this parameter if your don't care about the result of the method invocation.
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> The data to pass to @callback.
+</parameter_description>
+</parameter>
+</parameters>
+</function>
+
 </root>
index 33168a0..98a7922 100644 (file)
     '("busy" "G_IO_ERROR_BUSY" "26")
     '("would-block" "G_IO_ERROR_WOULD_BLOCK" "27")
     '("host-not-found" "G_IO_ERROR_HOST_NOT_FOUND" "28")
-    '("host-was-not-found" "G_IO_ERROR_HOST_WAS_NOT_FOUND" "28")
+    '("host-not-found" "G_IO_ERROR_HOST_WAS_NOT_FOUND" "28")
     '("would-merge" "G_IO_ERROR_WOULD_MERGE" "29")
     '("failed-handled" "G_IO_ERROR_FAILED_HANDLED" "30")
     '("too-many-open-files" "G_IO_ERROR_TOO_MANY_OPEN_FILES" "31")
index 4ef9701..4d64a58 100644 (file)
@@ -6,7 +6,7 @@
      '("busy" "G_IO_ERROR_BUSY" "26")
      '("would-block" "G_IO_ERROR_WOULD_BLOCK" "27")
      '("host-not-found" "G_IO_ERROR_HOST_NOT_FOUND" "28")
-+    '("host-was-not-found" "G_IO_ERROR_HOST_WAS_NOT_FOUND" "28")
++    '("host-not-found" "G_IO_ERROR_HOST_WAS_NOT_FOUND" "28")
      '("would-merge" "G_IO_ERROR_WOULD_MERGE" "29")
      '("failed-handled" "G_IO_ERROR_FAILED_HANDLED" "30")
      '("too-many-open-files" "G_IO_ERROR_TOO_MANY_OPEN_FILES" "31")
index 31a2683..6699fdf 100644 (file)
@@ -9,6 +9,7 @@
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property name
@@ -18,6 +19,7 @@
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property parameter-type
@@ -52,7 +54,8 @@
 (define-signal action-added
   (of-object "GActionGroup")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
@@ -61,7 +64,8 @@
 (define-signal action-removed
   (of-object "GActionGroup")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
@@ -70,7 +74,8 @@
 (define-signal action-enabled-changed
   (of-object "GActionGroup")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
     '("gboolean" "p1")
@@ -80,7 +85,8 @@
 (define-signal action-state-changed
   (of-object "GActionGroup")
   (return-type "void")
-  (when "last")
+  (flags "Run Last, Must Collect")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
     '("GVariant*" "p1")
 (define-signal activate
   (of-object "GApplication")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal startup
   (of-object "GApplication")
   (return-type "void")
-  (when "first")
+  (flags "Run First")
 )
 
 (define-signal shutdown
   (of-object "GApplication")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal open
   (of-object "GApplication")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gpointer" "p0")
     '("gint" "p1")
 (define-signal command-line
   (of-object "GApplication")
   (return-type "gint")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GApplicationCommandLine*" "p0")
   )
 (define-signal handle-local-options
   (of-object "GApplication")
   (return-type "gint")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GVariantDict*" "p0")
   )
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property flags
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_APPLICATION_FLAGS_NONE")
 )
 
 (define-property resource-base-path
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property is-registered
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-remote
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property inactivity-timeout
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "0")
 )
 
 (define-property action-group
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GAppInfoMonitor
 (define-signal changed
   (of-object "GAppInfoMonitor")
   (return-type "void")
-  (when "first")
+  (flags "Run First")
 )
 
 ;; From GCancellable
 (define-signal cancelled
   (of-object "GCancellable")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GBufferedInputStream
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "4096")
 )
 
 ;; From GBufferedOutputStream
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "4096")
 )
 
 (define-property auto-grow
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GCharsetConverter
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property to-charset
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property use-fallback
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GConverterInputStream
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN")
 )
 
 (define-property newline-type
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_DATA_STREAM_NEWLINE_TYPE_LF")
 )
 
 ;; From GDataOutputStream
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN")
 )
 
 ;; From GDrive
 (define-signal changed
   (of-object "GDrive")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal disconnected
   (of-object "GDrive")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal eject-button
   (of-object "GDrive")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal stop-button
   (of-object "GDrive")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GFile
 (define-signal changed
   (of-object "GFileMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GFile*" "p0")
     '("GFile*" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "800")
 )
 
 (define-property cancelled
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GFilenameCompleter
 (define-signal got-completion-data
   (of-object "GFilenameCompleter")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GFileInputStream
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 ;; From GFilterOutputStream
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "TRUE")
 )
 
 ;; From GUnixCredentialsMessage
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "-1")
 )
 
 (define-property close-fd
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 ;; From GUnixOutputStream
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "-1")
 )
 
 (define-property close-fd
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 ;; From GUnixSocketAddress
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property path-as-array
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (deprecated #t)
+  (default-value "FALSE")
 )
 
 (define-property address-type
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_UNIX_SOCKET_ADDRESS_PATH")
 )
 
 ;; From GInputStream
 (define-signal items-changed
   (of-object "GListModel")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("guint" "p0")
     '("guint" "p1")
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property data-size
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "0")
 )
 
 (define-property realloc-function
 (define-signal items-changed
   (of-object "GMenuModel")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gint" "p0")
     '("gint" "p1")
 (define-signal changed
   (of-object "GMount")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal unmounted
   (of-object "GMount")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal pre-unmount
   (of-object "GMount")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GMountOperation
 (define-signal ask-password
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("const-gchar*" "p0")
     '("const-gchar*" "p1")
 (define-signal ask-question
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("const-gchar*" "p0")
     '("const-gchar**" "p1")
 (define-signal reply
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GMountOperationResult" "p0")
   )
 (define-signal aborted
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal show-processes
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("const-gchar*" "p0")
     '("GArray*" "p1")
 (define-signal show-unmount-progress
   (of-object "GMountOperation")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("const-gchar*" "p0")
     '("gint64" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property password
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property anonymous
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property domain
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property password-save
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_PASSWORD_SAVE_NEVER")
 )
 
 (define-property choice
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "0")
 )
 
 ;; From GNotification
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property can-acquire
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property can-release
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GPropertyAction
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property parameter-type
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property state-type
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property invert-boolean
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "FALSE")
 )
 
 ;; From GProxy
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property destination-protocol
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property destination-hostname
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property destination-port
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property username
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property password
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property uri
   (of-object "GProxyAddress")
   (prop-type "GParamString")
-  (docs "The proxy's URI")
+  (docs "The proxys URI")
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 ;; From GProxyAddressEnumerator
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property default-port
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property connectable
 (define-signal changed
   (of-object "GSettings")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
 (define-signal change-event
   (of-object "GSettings")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gpointer" "p0")
     '("gint" "p1")
 (define-signal writable-changed
   (of-object "GSettings")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
 (define-signal writable-change-event
   (of-object "GSettings")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GQuark" "p0")
   )
   (writable #t)
   (construct-only #t)
   (deprecated #t)
+  (default-value "")
 )
 
 (define-property schema-id
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property backend
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property has-unapplied
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property delay-apply
   (of-object "GSettings")
   (prop-type "GParamBoolean")
-  (docs "Whether this settings object is in 'delay-apply' mode")
+  (docs "Whether this settings object is in “delay-apply” mode")
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GSettingsBackend
 (define-signal activate
   (of-object "GSimpleAction")
   (return-type "void")
-  (when "last")
+  (flags "Run Last, Must Collect")
   (parameters
     '("GVariant*" "p0")
   )
 (define-signal change-state
   (of-object "GSimpleAction")
   (return-type "void")
-  (when "last")
+  (flags "Run Last, Must Collect")
   (parameters
     '("GVariant*" "p0")
   )
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property parameter-type
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property state-type
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SUBPROCESS_FLAGS_NONE")
 )
 
 (define-property argv
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SUBPROCESS_FLAGS_NONE")
 )
 
 ;; From GThemedIcon
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property names
 (define-property use-default-fallbacks
   (of-object "GThemedIcon")
   (prop-type "GParamBoolean")
-  (docs "Whether to use default fallbacks found by shortening the name at '-' characters. Ignores names after the first if multiple names are given.")
+  (docs "Whether to use default fallbacks found by shortening the name at “-” characters. Ignores names after the first if multiple names are given.")
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "FALSE")
 )
 
 ;; From GVolume
 (define-signal changed
   (of-object "GVolume")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 (define-signal removed
   (of-object "GVolume")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GVolumeMonitor
 (define-signal volume-added
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GVolume*" "p0")
   )
 (define-signal volume-removed
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GVolume*" "p0")
   )
 (define-signal volume-changed
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GVolume*" "p0")
   )
 (define-signal mount-added
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GMount*" "p0")
   )
 (define-signal mount-removed
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GMount*" "p0")
   )
 (define-signal mount-pre-unmount
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GMount*" "p0")
   )
 (define-signal mount-changed
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GMount*" "p0")
   )
 (define-signal drive-connected
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDrive*" "p0")
   )
 (define-signal drive-disconnected
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDrive*" "p0")
   )
 (define-signal drive-changed
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDrive*" "p0")
   )
 (define-signal drive-eject-button
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDrive*" "p0")
   )
 (define-signal drive-stop-button
   (of-object "GVolumeMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDrive*" "p0")
   )
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_ZLIB_COMPRESSOR_FORMAT_ZLIB")
 )
 
 (define-property level
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "-1")
 )
 
 (define-property file-info
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_ZLIB_COMPRESSOR_FORMAT_ZLIB")
 )
 
 (define-property file-info
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SOCKET_FAMILY_INVALID")
 )
 
 (define-property bytes
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-loopback
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-link-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-site-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-multicast
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-mc-global
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-mc-link-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-mc-node-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-mc-org-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property is-mc-site-local
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GInetSocketAddress
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property flowinfo
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property scope-id
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 ;; From GSocketAddress
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "G_SOCKET_FAMILY_INVALID")
 )
 
 ;; From GSocketAddressEnumerator
 (define-signal reload
   (of-object "GResolver")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
 )
 
 ;; From GNetworkAddress
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property port
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "0")
 )
 
 (define-property scheme
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 ;; From GNetworkMonitor
 (define-signal network-changed
   (of-object "GNetworkMonitor")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gboolean" "p0")
   )
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "G_NETWORK_CONNECTIVITY_FULL")
 )
 
 (define-property network-available
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property network-metered
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GNetworkService
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property protocol
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property domain
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property scheme
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 ;; From GSettings
 (define-signal changed
   (of-object "GSettings")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
 (define-signal change-event
   (of-object "GSettings")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gpointer" "p0")
     '("gint" "p1")
 (define-signal writable-changed
   (of-object "GSettings")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
+  (detailed #t)
   (parameters
     '("const-gchar*" "p0")
   )
 (define-signal writable-change-event
   (of-object "GSettings")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GQuark" "p0")
   )
   (writable #t)
   (construct-only #t)
   (deprecated #t)
+  (default-value "")
 )
 
 (define-property schema-id
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property backend
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property has-unapplied
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property delay-apply
   (of-object "GSettings")
   (prop-type "GParamBoolean")
-  (docs "Whether this settings object is in 'delay-apply' mode")
+  (docs "Whether this settings object is in “delay-apply” mode")
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; GSettingsSchema is neither a GObject nor a GInterface. Not checked for signals and properties.
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SOCKET_FAMILY_INVALID")
 )
 
 (define-property type
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SOCKET_TYPE_STREAM")
 )
 
 (define-property protocol
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_SOCKET_PROTOCOL_UNKNOWN")
 )
 
 (define-property fd
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "-1")
 )
 
 (define-property blocking
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property listen-backlog
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "10")
 )
 
 (define-property keepalive
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property local-address
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "0")
 )
 
 (define-property ttl
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "0")
 )
 
 (define-property broadcast
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property multicast-loopback
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property multicast-ttl
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "1")
 )
 
 ;; From GSocketClient
 (define-signal event
   (of-object "GSocketClient")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GSocketClientEvent" "p0")
     '("GSocketConnectable*" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_SOCKET_FAMILY_INVALID")
 )
 
 (define-property type
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_SOCKET_TYPE_STREAM")
 )
 
 (define-property protocol
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_SOCKET_PROTOCOL_DEFAULT")
 )
 
 (define-property local-address
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "0")
 )
 
 (define-property enable-proxy
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property tls
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property tls-validation-flags
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY | G_TLS_CERTIFICATE_NOT_ACTIVATED | G_TLS_CERTIFICATE_EXPIRED | G_TLS_CERTIFICATE_REVOKED | G_TLS_CERTIFICATE_INSECURE | G_TLS_CERTIFICATE_GENERIC_ERROR")
 )
 
 (define-property proxy-resolver
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GTcpWrapperConnection
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property private-key
   (of-object "GTlsCertificate")
   (prop-type "GParamBoxed")
-  (docs "The DER representation of the certificate's private key")
+  (docs "The DER representation of the certificates private key")
   (readable #f)
   (writable #t)
   (construct-only #t)
 (define-property private-key-pem
   (of-object "GTlsCertificate")
   (prop-type "GParamString")
-  (docs "The PEM representation of the certificate's private key")
+  (docs "The PEM representation of the certificates private key")
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property issuer
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property validation-flags
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_TLS_CERTIFICATE_UNKNOWN_CA | G_TLS_CERTIFICATE_BAD_IDENTITY | G_TLS_CERTIFICATE_NOT_ACTIVATED | G_TLS_CERTIFICATE_EXPIRED | G_TLS_CERTIFICATE_REVOKED | G_TLS_CERTIFICATE_INSECURE | G_TLS_CERTIFICATE_GENERIC_ERROR")
 )
 
 ;; From GTlsConnection
 (define-signal accept-certificate
   (of-object "GTlsConnection")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GTlsCertificate*" "p0")
     '("GTlsCertificateFlags" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 (define-property rehandshake-mode
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_TLS_REHANDSHAKE_SAFELY")
 )
 
 (define-property use-system-certdb
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (deprecated #t)
+  (default-value "TRUE")
 )
 
 (define-property database
 (define-property certificate
   (of-object "GTlsConnection")
   (prop-type "GParamObject")
-  (docs "The connection's certificate")
+  (docs "The connections certificate")
   (readable #t)
   (writable #t)
   (construct-only #f)
 (define-property peer-certificate
   (of-object "GTlsConnection")
   (prop-type "GParamObject")
-  (docs "The connection's peer's certificate")
+  (docs "The connection’s peer’s certificate")
   (readable #t)
   (writable #f)
   (construct-only #f)
 (define-property peer-certificate-errors
   (of-object "GTlsConnection")
   (prop-type "GParamFlags")
-  (docs "Errors found with the peer's certificate")
+  (docs "Errors found with the peers certificate")
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "0")
 )
 
 ;; From GTlsDatabase
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 ;; From GTlsInteraction
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_TLS_PASSWORD_NONE")
 )
 
 (define-property description
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property warning
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "")
 )
 
 ;; From GTlsServerConnection
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_TLS_AUTHENTICATION_NONE")
 )
 
 ;; From GUnixConnection
 (define-signal event
   (of-object "GSocketListener")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GSocketListenerEvent" "p0")
     '("GSocket*" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "10")
 )
 
 ;; From GSocketService
 (define-signal incoming
   (of-object "GSocketService")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GSocketConnection*" "p0")
     '("GObject*" "p1")
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "TRUE")
 )
 
 ;; From GThreadedSocketService
 (define-signal run
   (of-object "GThreadedSocketService")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GSocketConnection*" "p0")
     '("GObject*" "p1")
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "10")
 )
 
 ;; From GDBusAuthObserver
 (define-signal authorize-authenticated-peer
   (of-object "GDBusAuthObserver")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GIOStream*" "p0")
     '("GCredentials*" "p1")
 (define-signal allow-mechanism
   (of-object "GDBusAuthObserver")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("const-gchar*" "p0")
   )
 (define-signal closed
   (of-object "GDBusConnection")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("gboolean" "p0")
     '("GError*" "p1")
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property flags
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "G_DBUS_CONNECTION_FLAGS_NONE")
 )
 
 (define-property guid
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property unique-name
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property closed
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property exit-on-close
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property capabilities
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "G_DBUS_CAPABILITY_FLAGS_NONE")
 )
 
 (define-property authentication-observer
 (define-signal g-authorize-method
   (of-object "GDBusInterfaceSkeleton")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDBusMethodInvocation*" "p0")
   )
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "G_DBUS_INTERFACE_SKELETON_FLAGS_NONE")
 )
 
 ;; From GDBusObject
 (define-signal interface-added
   (of-object "GDBusObject")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDBusInterface*" "p0")
   )
 (define-signal interface-removed
   (of-object "GDBusObject")
   (return-type "void")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDBusInterface*" "p0")
   )
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 ;; From GDBusMethodInvocation
 (define-signal g-properties-changed
   (of-object "GDBusProxy")
   (return-type "void")
-  (when "last")
+  (flags "Run Last, Must Collect")
   (parameters
     '("GVariant*" "p0")
     '("const-gchar*const*" "p1")
 (define-signal g-signal
   (of-object "GDBusProxy")
   (return-type "void")
-  (when "last")
+  (flags "Run Last, Must Collect")
   (parameters
     '("const-gchar*" "p0")
     '("const-gchar*" "p1")
   (readable #f)
   (writable #t)
   (construct-only #t)
+  (default-value "G_BUS_TYPE_NONE")
 )
 
 (define-property g-name
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property g-name-owner
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property g-flags
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_DBUS_PROXY_FLAGS_NONE")
 )
 
 (define-property g-object-path
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property g-interface-name
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property g-default-timeout
   (readable #t)
   (writable #t)
   (construct-only #f)
+  (default-value "-1")
 )
 
 (define-property g-interface-info
 (define-signal new-connection
   (of-object "GDBusServer")
   (return-type "gboolean")
-  (when "last")
+  (flags "Run Last")
   (parameters
     '("GDBusConnection*" "p0")
   )
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property client-address
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "")
 )
 
 (define-property flags
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_DBUS_SERVER_FLAGS_NONE")
 )
 
 (define-property guid
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property active
   (readable #t)
   (writable #f)
   (construct-only #f)
+  (default-value "FALSE")
 )
 
 (define-property authentication-observer
index 06a331f..bf5d51a 100644 (file)
@@ -1,7 +1,9 @@
---- gio_signals.defs   2012-02-28 13:19:25.000000000 -0500
-+++ gio_signals.defs.new       2012-02-28 12:47:50.000000000 -0500
-@@ -83,7 +83,7 @@
-   (when "last")
+--- ./../../gio/src/gio_signals.defs.orig      2017-09-12 17:06:06.023464567 +0200
++++ ./../../gio/src/gio_signals.defs   2017-09-13 08:41:32.428298292 +0200
+@@ -87,11 +87,11 @@
+   (return-type "void")
+   (flags "Run Last, Must Collect")
+   (detailed #t)
    (parameters
      '("const-gchar*" "p0")
 -    '("GVariant" "p1")
@@ -9,8 +11,24 @@
    )
  )
  
-@@ -579,7 +579,7 @@
-   (when "last")
+ ;; From GApplication
+@@ -591,10 +591,11 @@
+   (prop-type "GParamBoolean")
+   (docs "Whether or not this is an abstract address")
+   (readable #t)
+   (writable #t)
+   (construct-only #t)
++  (deprecated #t)
+   (default-value "FALSE")
+ )
+ (define-property address-type
+   (of-object "GUnixSocketAddress")
+@@ -738,11 +739,11 @@
+   (of-object "GMountOperation")
+   (return-type "void")
+   (flags "Run Last")
    (parameters
      '("const-gchar*" "p0")
 -    '("GStrv*" "p1")
    )
  )
  
-@@ -849,7 +849,7 @@
+ (define-signal reply
+   (of-object "GMountOperation")
+@@ -1106,11 +1107,11 @@
+ (define-signal writable-change-event
+   (of-object "GSettings")
+   (return-type "gboolean")
+   (flags "Run Last")
+   (parameters
+-    '("guint" "p0")
++    '("GQuark" "p0")
+   )
+ )
+ (define-property settings-schema
+   (of-object "GSettings")
+@@ -1190,20 +1191,20 @@
+ (define-signal activate
+   (of-object "GSimpleAction")
    (return-type "void")
-   (when "last")
+   (flags "Run Last, Must Collect")
    (parameters
 -    '("GVariant" "p0")
 +    '("GVariant*" "p0")
    )
  )
  
-@@ -858,7 +858,7 @@
+ (define-signal change-state
+   (of-object "GSimpleAction")
    (return-type "void")
-   (when "last")
+   (flags "Run Last, Must Collect")
    (parameters
 -    '("GVariant" "p0")
 +    '("GVariant*" "p0")
    )
  )
  
-@@ -1049,6 +1049,6 @@
+ (define-property name
+   (of-object "GSimpleAction")
+@@ -1850,11 +1851,11 @@
+ (define-signal writable-change-event
+   (of-object "GSettings")
    (return-type "gboolean")
-   (when "last")
+   (flags "Run Last")
    (parameters
 -    '("guint" "p0")
 +    '("GQuark" "p0")
    )
  )
-
-@@ -1752,6 +1752,6 @@
-   (return-type "gboolean")
-   (when "last")
-   (parameters
--    '("guint" "p0")
-+    '("GQuark" "p0")
-   )
+ (define-property settings-schema
+   (of-object "GSettings")
+@@ -2345,10 +2346,11 @@
+   (prop-type "GParamBoolean")
+   (docs "Whether to verify peer certificates against the system certificate database")
+   (readable #t)
+   (writable #t)
+   (construct-only #f)
++  (deprecated #t)
+   (default-value "TRUE")
  )
-
-@@ -1824,8 +1824,8 @@
+ (define-property database
+   (of-object "GTlsConnection")
+@@ -2723,23 +2725,23 @@
+ (define-signal g-properties-changed
+   (of-object "GDBusProxy")
    (return-type "void")
-   (when "last")
+   (flags "Run Last, Must Collect")
    (parameters
 -    '("GVariant" "p0")
 -    '("GStrv*" "p1")
    )
  )
  
-@@ -1836,7 +1836,7 @@
+ (define-signal g-signal
+   (of-object "GDBusProxy")
+   (return-type "void")
+   (flags "Run Last, Must Collect")
    (parameters
      '("const-gchar*" "p0")
      '("const-gchar*" "p1")
    )
  )
  
+ (define-property g-connection
+   (of-object "GDBusProxy")
index f8c94da..4bcfa1e 100644 (file)
   (return-type "void")
 )
 
-(define-vfunc dbus_register
-  (of-object "GApplication")
-  (return-type "gboolean")
-  (parameters
-    '("GDBusConnection*" "connection")
-    '("const-gchar*" "object_path")
-    '("GError**" "error")
-  )
-)
-
-(define-vfunc dbus_unregister
+(define-vfunc shutdown
   (of-object "GApplication")
   (return-type "void")
-  (parameters
-    '("GDBusConnection*" "connection")
-    '("const-gchar*" "object_path")
-  )
 )
 
 ; GAsyncInitable
   (return-type "GObject*")
 )
 
-(define-vfunc is_tagged
-  (of-object "GAsyncResult")
-  (return-type "gboolean")
- (parameters
-  '("gpointer" "source_tag")
- )
-)
-
 ; GBufferedInputStream
 
 (define-vfunc fill
index fdc6c87..cbd6540 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 36888f7..ce9b07a 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index f8c926f..f61a2c6 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6dd4467..e4c0c0a 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 5317f38..24667b5 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 8b20c16..59c9fca 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2009 jonathon jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/socketaddress.h>
index b3b3256..24c22d9 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2009 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index f47f678..27e9e1b 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index 9716003..620f93d 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 315ed86..d122710 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -390,10 +389,11 @@ protected:
   _WRAP_METHOD(bool set_pending(), g_input_stream_set_pending, errthrow, newin "2,50")
   _WRAP_METHOD(void clear_pending(), g_input_stream_clear_pending, newin "2,50")
 
+  //TODO: When we can break ABI, add vfuncs. See https://bugzilla.gnome.org/show_bug.cgi?id=572471
 #m4 _CONVERSION(`GCancellable*', `const Glib::RefPtr<Cancellable>&', `Glib::wrap($3, true)')
-  _WRAP_VFUNC(gssize read(void* buffer, gsize count, const Glib::RefPtr<Cancellable>& cancellable), read_fn, errthrow, err_return_value -1)
-  _WRAP_VFUNC(gssize skip(gsize count, const Glib::RefPtr<Cancellable>& cancellable), skip, errthrow, err_return_value -1)
-  _WRAP_VFUNC(bool close(const Glib::RefPtr<Cancellable>& cancellable), close_fn, errthrow)
+  //_WRAP_VFUNC(gssize read(void* buffer, gsize count, const Glib::RefPtr<Cancellable>& cancellable), read_fn, errthrow, err_return_value -1)
+  //_WRAP_VFUNC(gssize skip(gsize count, const Glib::RefPtr<Cancellable>& cancellable), skip, errthrow, err_return_value -1)
+  //_WRAP_VFUNC(bool close(const Glib::RefPtr<Cancellable>& cancellable), close_fn, errthrow)
 };
 
 } // namespace Gio
index a278ddf..5807215 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -51,7 +48,7 @@ IOStream::close_async(const SlotAsyncReady& slot, int io_priority)
 
 void
 IOStream::splice_async(const Glib::RefPtr<IOStream>& stream2, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, SpliceFlags flags, int io_priority)
+  const Glib::RefPtr<Cancellable>& cancellable, IOStreamSpliceFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -64,7 +61,7 @@ IOStream::splice_async(const Glib::RefPtr<IOStream>& stream2, const SlotAsyncRea
 
 void
 IOStream::splice_async(const Glib::RefPtr<IOStream>& stream2, const SlotAsyncReady& slot,
-  SpliceFlags flags, int io_priority)
+  IOStreamSpliceFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
index 1051b96..b53be02 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -28,6 +29,8 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(IOStreamSpliceFlags, GIOStreamSpliceFlags, NO_GTYPE)
+
 /** IOStream - Base class for implementing read/write streams.
  * IOStream represents an object that has both read and write streams.
  * Generally the two streams acts as separate input and output streams, but
@@ -63,8 +66,6 @@ class IOStream : public Glib::Object
 
 public:
 
-  _WRAP_ENUM(SpliceFlags, GIOStreamSpliceFlags, NO_GTYPE)
-
   /**  Asyncronously splice the output stream to the input stream of @a
    * stream2, and splice the output stream of @a stream2 to the input stream of
    * this stream.
@@ -75,21 +76,21 @@ public:
    * @param stream2 The second IOStream.
    * @param slot A SlotAsyncReady slot.
    * @param cancellable A Cancellable object.
-   * @param flags A set of SpliceFlags.
+   * @param flags A set of IOStreamSpliceFlags.
    * @param io_priority The io priority of the request.
    *
    * @newin{2,34}
    */
   void splice_async(const Glib::RefPtr<IOStream>& stream2,
     const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable,
-    SpliceFlags flags = SpliceFlags::NONE,
+    IOStreamSpliceFlags flags = Gio::IO_STREAM_SPLICE_NONE,
     int io_priority = Glib::PRIORITY_DEFAULT);
   _IGNORE(g_io_stream_splice_async)
 
   /// A non-cancellable version of splice_async().
   void splice_async(const Glib::RefPtr<IOStream>& stream2,
     const SlotAsyncReady& slot,
-    SpliceFlags flags = SpliceFlags::NONE,
+    IOStreamSpliceFlags flags = Gio::IO_STREAM_SPLICE_NONE,
     int io_priority = Glib::PRIORITY_DEFAULT);
 
   _WRAP_METHOD(static bool splice_finish(const Glib::RefPtr<AsyncResult>& result), g_io_stream_splice_finish, errthrow)
index b6004fa..aeabe40 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3f8cec0..b7abfe9 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index 4580c5e..3b2191d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3b86e25..16b8cdd 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -63,7 +62,7 @@ public:
    *
    * @newin{2,50}
    */
-  using SlotCompare = sigc::slot<int(const Glib::RefPtr<const Glib::ObjectBase>&, const Glib::RefPtr<const Glib::ObjectBase>&)>;
+  using SlotCompare = sigc::slot<int, const Glib::RefPtr<const Glib::ObjectBase>&, const Glib::RefPtr<const Glib::ObjectBase>&>;
 
   _WRAP_METHOD(guint insert_sorted(const Glib::RefPtr<Glib::ObjectBase>& item,
     const SlotCompare& slot{compare_func}), g_list_store_insert_sorted,
@@ -175,7 +174,7 @@ public:
    *
    * @newin{2,50}
    */
-  using SlotCompare = sigc::slot<int(const Glib::RefPtr<const T_item>&, const Glib::RefPtr<const T_item>&)>;
+  using SlotCompare = sigc::slot<int, const Glib::RefPtr<const T_item>&, const Glib::RefPtr<const T_item>&>;
 
   /** Inserts @a item at a position to be determined by the @a slot.
    *
@@ -244,13 +243,13 @@ ListStore<T_item>::ListStore()
 template <typename T_item>
 Glib::RefPtr<ListStore<T_item>> ListStore<T_item>::create()
 {
-  return Glib::make_refptr_for_instance<ListStore<T_item>>(new ListStore<T_item>());
+  return Glib::RefPtr<ListStore<T_item>>(new ListStore<T_item>());
 }
 
 template <typename T_item>
 Glib::RefPtr<T_item> ListStore<T_item>::get_item(guint position)
 {
-  return std::dynamic_pointer_cast<T_item>(ListModel::get_object(position));
+  return Glib::RefPtr<T_item>::cast_dynamic(ListModel::get_object(position));
 }
 
 template <typename T_item>
@@ -310,9 +309,9 @@ int ListStore<T_item>::compare_data_func(gconstpointer a, gconstpointer b, gpoin
 
   // cast_dynamic is necessary if T_item is a user-derived class, such as
   // class MyObject : public Glib::Object
-  const Glib::RefPtr<const T_item> item_a = std::dynamic_pointer_cast<T_item>(
+  const Glib::RefPtr<const T_item> item_a = Glib::RefPtr<T_item>::cast_dynamic(
     Glib::wrap(static_cast<typename T_item::BaseObjectType*>(const_cast<gpointer>(a)), true));
-  const Glib::RefPtr<const T_item> item_b = std::dynamic_pointer_cast<T_item>(
+  const Glib::RefPtr<const T_item> item_b = Glib::RefPtr<T_item>::cast_dynamic(
     Glib::wrap(static_cast<typename T_item::BaseObjectType*>(const_cast<gpointer>(b)), true));
 
   return (*slot)(item_a, item_b);
index 9ccc741..10ddbe8 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 134d93e..0d7a485 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/icon.h>
index 38126a4..1388d7f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -30,9 +27,6 @@ public:
   {
   }
 
-  SlotWithData(const SlotWithData& src) = delete;
-  SlotWithData& operator=(const SlotWithData& src) = delete;
-
   ~SlotWithData() { delete m_slot; }
 
   void operator()() { (*m_slot)(m_data); }
@@ -65,6 +59,29 @@ destroy_data_callback(void* user_data)
 namespace Gio
 {
 
+_DEPRECATE_IFDEF_START
+void
+MemoryInputStream::add_data(const std::string& data)
+{
+  char* data_copy = g_strdup(data.c_str());
+  g_memory_input_stream_add_data(gobj(), data_copy, -1, g_free);
+}
+
+void
+MemoryInputStream::add_data(const void* data, gssize len)
+{
+  char* data_copy = nullptr;
+
+  // copy the data so that the caller doesn't need to keep the data alive
+  if (len < 0)
+    data_copy = g_strdup(static_cast<const gchar*>(data));
+  else
+    data_copy = static_cast<gchar*>(g_memdup(data, len));
+
+  g_memory_input_stream_add_data(gobj(), data_copy, len, g_free);
+}
+_DEPRECATE_IFDEF_END
+
 void
 MemoryInputStream::add_data(const void* data, gssize len, const SlotDestroyData& destroy_slot)
 {
index 156ab09..9fed8da 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -46,6 +45,27 @@ protected:
 public:
   _WRAP_CREATE()
 
+_DEPRECATE_IFDEF_START
+  /** Appends to data that can be read from the input stream.
+   *
+   * @param data Input data.
+   *
+   * @deprecated Use add_data() with SlotDestroyData or GDestroyNotify instead.
+   */
+  void add_data(const std::string& data);
+
+  /** Appends to data that can be read from the input stream.
+   *
+   * Note that the data will be copied internally and freed when no longer needed.
+   *
+   * @param data Input data.
+   * @param len Length of the data, may be -1 if data is a null-terminated string.
+   *
+   * @deprecated Use add_data() with SlotDestroyData or GDestroyNotify instead.
+   */
+  void add_data(const void* data, gssize len);
+_DEPRECATE_IFDEF_END
+
   _WRAP_METHOD(void add_data(const void* data, gssize len, GDestroyNotify destroy), g_memory_input_stream_add_data)
 
   /** For example,
@@ -55,7 +75,7 @@ public:
    *
    * @newin{2,40}
    */
-  using SlotDestroyData = sigc::slot<void(void*)>;
+  using SlotDestroyData = sigc::slot<void, void*>;
 
   /** Appends to data that can be read from the input stream.
    *
index 45f52e0..8271958 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 4b1048b..329329e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/outputstream.h>
index 969d51e..7f97a55 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index e3f1d6d..c5d3831 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/menumodel.h>
@@ -48,9 +47,10 @@ public:
 
   _WRAP_METHOD(void freeze(), g_menu_freeze)
 
-  _WRAP_METHOD(void insert_item(int position, const Glib::RefPtr<const MenuItem>& item), g_menu_insert_item)
-  _WRAP_METHOD(void prepend_item(const Glib::RefPtr<const MenuItem>& item), g_menu_prepend_item)
-  _WRAP_METHOD(void append_item(const Glib::RefPtr<const MenuItem>& item), g_menu_append_item)
+  //TODO: Make the item "const Glib::RefPtr<const MenuItem>&" when we can break ABI? The function is documented as just copying its attributes.
+  _WRAP_METHOD(void insert_item(int position, const Glib::RefPtr<MenuItem>& item), g_menu_insert_item)
+  _WRAP_METHOD(void prepend_item(const Glib::RefPtr<MenuItem>& item), g_menu_prepend_item)
+  _WRAP_METHOD(void append_item(const Glib::RefPtr<MenuItem>& item), g_menu_append_item)
   _WRAP_METHOD(void remove(int position), g_menu_remove)
   _WRAP_METHOD(void remove_all(), g_menu_remove_all)
 
@@ -62,7 +62,6 @@ public:
   _WRAP_METHOD(void prepend(const Glib::ustring& label, const Glib::ustring& detailed_action{?}), g_menu_prepend)
   _WRAP_METHOD(void append(const Glib::ustring& label, const Glib::ustring& detailed_action{?}), g_menu_append)
 
-// TODO: Should the MenuModel be const too?
   _WRAP_METHOD(void insert_section(int position, const Glib::ustring& label{?}, const Glib::RefPtr<MenuModel>& section), g_menu_insert_section)
   _WRAP_METHOD(void prepend_section(const Glib::ustring& label{?}, const Glib::RefPtr<MenuModel>& section), g_menu_prepend_section)
   _WRAP_METHOD(void append_section(const Glib::ustring& label{?}, const Glib::RefPtr<MenuModel>& section), g_menu_append_section)
index 83ea74a..7c74164 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 0e2c941..16bfb3b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -39,7 +38,10 @@ public:
 
   _WRAP_METHOD(Glib::ustring get_name() const, g_menu_attribute_iter_get_name)
 
-  _WRAP_METHOD(Glib::VariantBase get_value() const, g_menu_attribute_iter_get_value)
+  //TODO: When we can break ABI, remove the method overload and just make it const.
+  //It makes no sense to return const by value.
+  _WRAP_METHOD(Glib::VariantBase get_value(), g_menu_attribute_iter_get_value)
+  _WRAP_METHOD(const Glib::VariantBase get_value() const, g_menu_attribute_iter_get_value, constversion)
 
   _WRAP_METHOD(bool next(), g_menu_attribute_iter_next)
 };
index 2f6dc38..a9a3ee5 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -43,6 +42,14 @@ MenuItem::MenuItem(const Glib::RefPtr<MenuModel>& submenu) : _CONSTRUCT()
   set_submenu(submenu);
 }
 
+_DEPRECATE_IFDEF_START
+void
+MenuItem::set_action_and_target(const Glib::ustring& action)
+{
+  g_menu_item_set_action_and_target_value(gobj(), action.c_str(), nullptr);
+}
+_DEPRECATE_IFDEF_END
+
 void
 MenuItem::set_action(const Glib::ustring& action)
 {
index 3830880..3215ec1 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -102,6 +101,7 @@ GMenuItem * g_menu_item_new_section                 (const Glib::ustring& label,
   //void set_attribute(const Glib::ustring& attribute, const T_Value& value) const;
 
   _WRAP_METHOD(void set_attribute_value(const Glib::ustring& attribute, const Glib::VariantBase& value), g_menu_item_set_attribute_value)
+  _WRAP_METHOD(void set_attribute(const Glib::ustring& attribute, const Glib::VariantBase& value), g_menu_item_set_attribute_value, deprecated "Use set_attribute() instead.")
   _IGNORE(g_menu_item_set_attribute)
 
 //These are documented as transfer-full, so we don't need to use refreturn.
@@ -119,11 +119,19 @@ GMenuItem * g_menu_item_new_section                 (const Glib::ustring& label,
   //void get_attribute(const Glib::ustring& attribute, T_Value& value) const;
   //_WRAP_METHOD(Glib::VariantBase get_attribute_value(const Glib::ustring& attribute, const Glib::VariantType& expected_type{?}) const, g_menu_item_get_attribute_value)
 
+  _WRAP_METHOD(Glib::VariantBase get_attribute(const Glib::ustring& attribute, const Glib::VariantType& expected_type{?}) const, g_menu_item_get_attribute_value, deprecated "Use get_attribute_value() instead.")
   _WRAP_METHOD(Glib::VariantBase get_attribute_value(const Glib::ustring& attribute, const Glib::VariantType& expected_type{?}) const, g_menu_item_get_attribute_value)
 
   // Ignore varargs function.
   _IGNORE(g_menu_item_get_attribute)
 
+_DEPRECATE_IFDEF_START
+  /** Unsets the target for the specified @a action.
+   * @deprecated Use set_action() or unset_target() instead.
+   */
+  void set_action_and_target(const Glib::ustring& action);
+_DEPRECATE_IFDEF_END
+
   /** Sets the action for the menu item.
    * See set_action_and_target().
    *
index 542e46d..190f557 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index b3606d0..8cba9df 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 48b9b2b..9adbe29 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index bf29a12..36a5ea7 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -132,13 +131,16 @@ public:
 #m4begin
 dnl See the .ccg implementation for how this conversion works.
 
+  //TODO: When we can break ABI, remove the method overload and just make it const.
+  //It makes no sense to return const by value.
   _CONVERSION(`MenuAttribute',`const gchar*',`giomm_get_menu_attribute($3)')
 #m4end
 
   //TODO: Add a get_item_attribute() templated method to get values directly
   //instead of returning a Glib::VariantBase?
 
-  _WRAP_METHOD(Glib::VariantBase get_item_attribute(int item_index, MenuAttribute attribute, const Glib::VariantType& expected_type) const, g_menu_model_get_item_attribute_value)
+  _WRAP_METHOD(Glib::VariantBase get_item_attribute(int item_index, MenuAttribute attribute, const Glib::VariantType& expected_type), g_menu_model_get_item_attribute_value)
+  _WRAP_METHOD(const Glib::VariantBase get_item_attribute(int item_index, MenuAttribute attribute, const Glib::VariantType& expected_type) const, g_menu_model_get_item_attribute_value, constversion)
 
   // Ignore varargs function
   _IGNORE(g_menu_model_get_item_attribute)
index 2ba1001..939931d 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
@@ -29,7 +26,7 @@ namespace Gio
 
 void
 Mount::unmount(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -42,7 +39,7 @@ Mount::unmount(
 }
 
 void
-Mount::unmount(const SlotAsyncReady& slot, UnmountFlags flags)
+Mount::unmount(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -56,7 +53,7 @@ Mount::unmount(const SlotAsyncReady& slot, UnmountFlags flags)
 }
 
 void
-Mount::unmount(UnmountFlags flags)
+Mount::unmount(MountUnmountFlags flags)
 {
   g_mount_unmount_with_operation(gobj(), GMountUnmountFlags(flags),
     nullptr, // mount_operation
@@ -67,7 +64,7 @@ Mount::unmount(UnmountFlags flags)
 
 void
 Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -80,7 +77,7 @@ Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAs
 
 void
 Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  UnmountFlags flags)
+  MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -93,7 +90,7 @@ Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAs
 }
 
 void
-Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, UnmountFlags flags)
+Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_mount_unmount_with_operation(gobj(), GMountUnmountFlags(flags), Glib::unwrap(mount_operation),
     nullptr, // cancellable
@@ -103,7 +100,7 @@ Mount::unmount(const Glib::RefPtr<MountOperation>& mount_operation, UnmountFlags
 
 void
 Mount::remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, MountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -116,7 +113,7 @@ Mount::remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncRea
 
 void
 Mount::remount(
-  const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, MountFlags flags)
+  const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -128,21 +125,21 @@ Mount::remount(
 }
 
 void
-Mount::remount(const Glib::RefPtr<MountOperation>& operation, MountFlags flags)
+Mount::remount(const Glib::RefPtr<MountOperation>& operation, MountMountFlags flags)
 {
   g_mount_remount(gobj(), static_cast<GMountMountFlags>(flags), Glib::unwrap(operation), nullptr,
     nullptr, nullptr);
 }
 
 void
-Mount::remount(MountFlags flags)
+Mount::remount(MountMountFlags flags)
 {
   g_mount_remount(gobj(), static_cast<GMountMountFlags>(flags), nullptr, nullptr, nullptr, nullptr);
 }
 
 void
 Mount::eject(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -155,7 +152,7 @@ Mount::eject(
 }
 
 void
-Mount::eject(const SlotAsyncReady& slot, UnmountFlags flags)
+Mount::eject(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -169,7 +166,7 @@ Mount::eject(const SlotAsyncReady& slot, UnmountFlags flags)
 }
 
 void
-Mount::eject(UnmountFlags flags)
+Mount::eject(MountUnmountFlags flags)
 {
   g_mount_eject_with_operation(gobj(), GMountUnmountFlags(flags),
     nullptr, // mount_operation
@@ -180,7 +177,7 @@ Mount::eject(UnmountFlags flags)
 
 void
 Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -193,7 +190,7 @@ Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyn
 
 void
 Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  UnmountFlags flags)
+  MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -206,7 +203,7 @@ Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyn
 }
 
 void
-Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, UnmountFlags flags)
+Mount::eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_mount_eject_with_operation(gobj(), GMountUnmountFlags(flags), Glib::unwrap(mount_operation),
     nullptr, // cancellable
index 3356ec3..6078d7d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <giomm/drive.h>
@@ -35,6 +34,8 @@ typedef struct _GMountIface GMountIface;
 namespace Gio
 {
 
+_WRAP_ENUM(MountUnmountFlags, GMountUnmountFlags, NO_GTYPE)
+_WRAP_ENUM(MountMountFlags, GMountMountFlags, NO_GTYPE)
 
 class File;
 class Drive;
@@ -57,8 +58,6 @@ class Mount : public Glib::Interface
   _CLASS_INTERFACE(Mount, GMount, G_MOUNT, GMountIface)
 
 public:
-  _WRAP_ENUM(UnmountFlags, GMountUnmountFlags, NO_GTYPE)
-  _WRAP_ENUM(MountFlags, GMountMountFlags, NO_GTYPE)
 
   _WRAP_METHOD(Glib::RefPtr<File> get_root(), g_mount_get_root, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const File> get_root() const, g_mount_get_root, refreturn, constversion)
@@ -82,12 +81,12 @@ public:
   _WRAP_METHOD(bool can_unmount() const, g_mount_can_unmount)
   _WRAP_METHOD(bool can_eject() const, g_mount_can_eject)
 
-  void unmount(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags = UnmountFlags::NONE);
-  void unmount(const SlotAsyncReady& slot, UnmountFlags flags = UnmountFlags::NONE);
-  void unmount(UnmountFlags flags = UnmountFlags::NONE);
-  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, UnmountFlags flags = UnmountFlags::NONE);
-  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, UnmountFlags flags = UnmountFlags::NONE);
-  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags = UnmountFlags::NONE);
+  void unmount(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void unmount(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void unmount(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void unmount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_mount_unmount)
   _IGNORE(g_mount_unmount_with_operation)
 
@@ -106,7 +105,7 @@ public:
    * @param cancellable A cancellable object which can be used to cancel the operation.
    * @param flags Flags affecting the operation.
    */
-  void remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountFlags flags = MountFlags::NONE);
+  void remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Remounts a mount.
    * This is an asynchronous operation, and is finished by calling mount_finish() with the AsyncResult data returned in the callback slot.
@@ -119,7 +118,7 @@ public:
    * @param slot A callback which will be called when the operation is completed or canceled.
    * @param flags Flags affecting the operation.
    */
-  void remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, MountFlags flags = MountFlags::NONE);
+  void remount(const Glib::RefPtr<MountOperation>& operation, const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Remounts a mount.
    *
@@ -130,7 +129,7 @@ public:
    * @param operation A mount operation.
    * @param flags Flags affecting the operation.
    */
-  void remount(const Glib::RefPtr<MountOperation>& operation, MountFlags flags = MountFlags::NONE);
+  void remount(const Glib::RefPtr<MountOperation>& operation, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Remounts a mount, without user interaction.
    *
@@ -140,18 +139,18 @@ public:
    *
    * @param flags Flags affecting the operation.
    */
-  void remount(MountFlags flags = MountFlags::NONE);
+  void remount(MountMountFlags flags = MOUNT_MOUNT_NONE);
   _IGNORE(g_mount_remount)
 
 
   _WRAP_METHOD(bool remount_finish(const Glib::RefPtr<AsyncResult>& result), g_mount_remount_finish, errthrow)
 
-  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags = UnmountFlags::NONE);
-  void eject(const SlotAsyncReady& slot, UnmountFlags flags = UnmountFlags::NONE);
-  void eject(UnmountFlags flags = UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, UnmountFlags flags = UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, UnmountFlags flags = UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, UnmountFlags flags = UnmountFlags::NONE);
+  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_mount_eject)
   _IGNORE(g_mount_eject_with_operation)
 
@@ -207,7 +206,7 @@ public:
   void guess_content_type_sync(bool force_rescan = true);
   _IGNORE(g_mount_guess_content_type_sync)
 
-  #m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
+  #m4 _CONVERSION(`gchar**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
 
   /** Finishes guessing content types of the Mount.
    * If any errors occurred during the operation, an exception will be thrown.
@@ -220,7 +219,7 @@ public:
    * @return An array of content types.
    * @throw Glib::Error
    */
-  _WRAP_METHOD(std::vector<Glib::ustring> guess_content_type_finish(const Glib::RefPtr<AsyncResult>& result), g_mount_guess_content_type_finish, errthrow)
+  _WRAP_METHOD(Glib::StringArrayHandle guess_content_type_finish(const Glib::RefPtr<AsyncResult>& result), g_mount_guess_content_type_finish, errthrow)
 
   _WRAP_METHOD(bool is_shadowed() const, g_mount_is_shadowed)
   _WRAP_METHOD(void shadow(), g_mount_shadow)
@@ -232,7 +231,7 @@ public:
 
   _WRAP_SIGNAL(void changed(), changed)
   _WRAP_SIGNAL(void unmounted(), unmounted)
-  _WRAP_SIGNAL(void pre_unmount(), pre_unmount)
+  _WRAP_SIGNAL(void pre_unmount(), pre_unmount, no_default_handler)
 
   //There are no properties.
 };
index 4aa7761..228e6fd 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 7b2cc68..1e12852 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
+#include <glibmm/arrayhandle.h>
 
 _DEFS(giomm,gio)
 _PINCLUDE(glibmm/private/object_p.h)
@@ -78,18 +80,20 @@ public:
 #m4 _CONVERSION(`const char*',`const Glib::ustring&',__GCHARP_TO_USTRING)
   _WRAP_SIGNAL(void ask_password(const Glib::ustring& message, const Glib::ustring& default_user, const Glib::ustring& default_domain, AskPasswordFlags flags), ask_password)
 
-  //TODO: We really need some test to make sure that our use of ArrayHandler is correct. murrayc.
-#m4 _CONVERSION(`const std::vector<Glib::ustring>&',`const gchar**',`const_cast<const gchar**>(Glib::ArrayHandler<Glib::ustring>::vector_to_array($3).data())')
-#m4 _CONVERSION(`const gchar**',`const std::vector<Glib::ustring>&',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_SIGNAL(void ask_question(const Glib::ustring& message, const std::vector<Glib::ustring>& choices), ask_question)
+  //TODO: We really need some test to make sure that our use of StringArrayHandle is correct. murrayc.
+#m4 _CONVERSION(`const Glib::StringArrayHandle&',`const gchar**',`const_cast<const gchar**>(($3).data())')
+#m4 _CONVERSION(`const gchar**',`const Glib::StringArrayHandle&',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_SIGNAL(void ask_question(const Glib::ustring& message, const Glib::StringArrayHandle& choices), ask_question)
 
   _WRAP_SIGNAL(void reply(MountOperationResult result), reply)
-  _WRAP_SIGNAL(void aborted(), aborted)
+
+  //TODO: Remove no_default_handler when we can break ABI:
+  _WRAP_SIGNAL(void aborted(), aborted, no_default_handler)
 
   //TODO: The array of char* is not very pleasant to wrap:
   //_WRAP_SIGNAL( void show_processes(const Glib::ustring& message, GArray* processes, const gchar *choices[]);
 
-  _WRAP_SIGNAL(void show_unmount_progress(const Glib::ustring& message, gint64 time_left, gint64 bytes_left), "show_unmount_progress")
+  _WRAP_SIGNAL(void show_unmount_progress(const Glib::ustring& message, gint64 time_left, gint64 bytes_left), "show_unmount_progress", no_default_handler)
 
   _WRAP_PROPERTY("username", Glib::ustring)
   _WRAP_PROPERTY("password", Glib::ustring)
index 43e2d87..6f2f99d 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 5e6aeff..ff5e123 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 1b940c5..1cd79ef 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
index ca84559..4ed6fc9 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <giomm/initable.h>
+#include <glibmm/interface.h>
 #include <giomm/asyncresult.h>
 #include <giomm/cancellable.h>
 #include <giomm/socketconnectable.h>
 #include <gio/gio.h>
 
 _DEFS(giomm,gio)
-_PINCLUDE(giomm/private/initable_p.h)
+_PINCLUDE(glibmm/private/interface_p.h)
 _PINCLUDE(gio/gio.h)
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -39,9 +38,9 @@ _WRAP_ENUM(NetworkConnectivity, GNetworkConnectivity, NO_GTYPE)
  *
  * @newin{2,44}
  */
-class NetworkMonitor : public Initable
+class NetworkMonitor : public Glib::Interface
 {
-  _CLASS_INTERFACE(NetworkMonitor, GNetworkMonitor, G_NETWORK_MONITOR, GNetworkMonitorInterface, Initable, GInitable)
+  _CLASS_INTERFACE(NetworkMonitor, GNetworkMonitor, G_NETWORK_MONITOR, GNetworkMonitorInterface)
 
 public:
   _WRAP_METHOD(static Glib::RefPtr<NetworkMonitor> get_default(), g_network_monitor_get_default, newin "2,44")
index 251999b..a081e60 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index e5288e8..581fc78 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 2ab0384..df9a7ee 100644 (file)
@@ -27,6 +27,7 @@ namespace Gio
 {
 class Icon;
 
+_WRAP_ENUM(NotificationPriority, GNotificationPriority, newin "2,44")
 
 /** User Notifications (pop up messages).
  *
@@ -64,16 +65,14 @@ protected:
   _IGNORE(g_notification_new)
 
 public:
-  _WRAP_ENUM(Priority, GNotificationPriority, newin "2,44")
-
   _WRAP_METHOD_DOCS_ONLY(g_notification_new)
   _WRAP_CREATE(const Glib::ustring& title)
 
   _WRAP_METHOD(void set_title(const Glib::ustring& title), g_notification_set_title)
   _WRAP_METHOD(void set_body(const Glib::ustring& body), g_notification_set_body)
   _WRAP_METHOD(void set_icon(const Glib::RefPtr<Icon>& icon), g_notification_set_icon)
-  _IGNORE(g_notification_set_urgent)
-  _WRAP_METHOD(void set_priority(Priority priority = Priority::NORMAL), g_notification_set_priority, newin "2,44")
+  _WRAP_METHOD(void set_urgent(bool urgent = true), g_notification_set_urgent, deprecated "Use set_priority() instead.")
+  _WRAP_METHOD(void set_priority(NotificationPriority priority = NOTIFICATION_PRIORITY_NORMAL), g_notification_set_priority, newin "2,44")
 
   _WRAP_METHOD(void add_button(const Glib::ustring& label, const Glib::ustring& detailed_action), g_notification_add_button)
 
index 46cfdd1..6ba8fe4 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -22,8 +19,6 @@
 #include <glibmm/exceptionhandler.h>
 #include "slot_async.h"
 
-using SpliceFlags = Gio::OutputStream::SpliceFlags;
-
 namespace Gio
 {
 
@@ -81,7 +76,7 @@ OutputStream::write_all_async(
 
 void
 OutputStream::splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, SpliceFlags flags, int io_priority)
+  const Glib::RefPtr<Cancellable>& cancellable, OutputStreamSpliceFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -95,7 +90,7 @@ OutputStream::splice_async(const Glib::RefPtr<InputStream>& source, const SlotAs
 
 void
 OutputStream::splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot,
-  SpliceFlags flags, int io_priority)
+  OutputStreamSpliceFlags flags, int io_priority)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -231,7 +226,7 @@ OutputStream::write_bytes_async(
 
 gssize
 OutputStream::splice(const Glib::RefPtr<InputStream>& source,
-  const Glib::RefPtr<Cancellable>& cancellable, SpliceFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, OutputStreamSpliceFlags flags)
 {
   GError* gerror = nullptr;
   gssize retvalue = g_output_stream_splice(gobj(), Glib::unwrap(source),
@@ -243,7 +238,7 @@ OutputStream::splice(const Glib::RefPtr<InputStream>& source,
 }
 
 gssize
-OutputStream::splice(const Glib::RefPtr<InputStream>& source, SpliceFlags flags)
+OutputStream::splice(const Glib::RefPtr<InputStream>& source, OutputStreamSpliceFlags flags)
 {
   GError* gerror = nullptr;
   gssize retvalue = g_output_stream_splice(
index d3b517a..835a0a5 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -27,6 +26,7 @@ _PINCLUDE(gio/gio.h) // for GOutputStreamSpliceFlags
 namespace Gio
 {
 
+_WRAP_ENUM(OutputStreamSpliceFlags, GOutputStreamSpliceFlags, NO_GTYPE)
 
 /** Base class for implementing streaming output.
  *
@@ -42,7 +42,6 @@ protected:
   _CTOR_DEFAULT
 
 public:
-  _WRAP_ENUM(SpliceFlags, GOutputStreamSpliceFlags, NO_GTYPE)
 
   _WRAP_METHOD(gssize write(const void* buffer, gsize count, const Glib::RefPtr<Cancellable>& cancellable{?}),
                g_output_stream_write,
@@ -205,21 +204,21 @@ public:
   /** Splices an input stream into an output stream.
    *
    * @param source An InputStream.
-   * @param flags A set of SpliceFlags.
+   * @param flags A set of OutputStreamSpliceFlags.
    * @param cancellable A Cancellable object.
    * ignore.
    * @return A #gssize containing the size of the data spliced.
    */
-  gssize splice(const Glib::RefPtr<InputStream>& source, const Glib::RefPtr<Cancellable>& cancellable, SpliceFlags flags = SpliceFlags::NONE);
+  gssize splice(const Glib::RefPtr<InputStream>& source, const Glib::RefPtr<Cancellable>& cancellable, OutputStreamSpliceFlags flags = OUTPUT_STREAM_SPLICE_NONE);
 
   /** Splices an input stream into an output stream.
    *
    * @param source An InputStream.
-   * @param flags A set of SpliceFlags.
+   * @param flags A set of OutputStreamSpliceFlags.
    * ignore.
    * @return A #gssize containing the size of the data spliced.
    */
-  gssize splice(const Glib::RefPtr<InputStream>& source, SpliceFlags flags = SpliceFlags::NONE);
+  gssize splice(const Glib::RefPtr<InputStream>& source, OutputStreamSpliceFlags flags = OUTPUT_STREAM_SPLICE_NONE);
   _IGNORE(g_output_stream_splice)
 
   _WRAP_METHOD(bool flush(const Glib::RefPtr<Cancellable>& cancellable{?}),
@@ -411,10 +410,10 @@ public:
    * @param source An InputStream.
    * @param slot Callback slot to call when the request is satisfied.
    * @param cancellable Cancellable object.
-   * @param flags A set of SpliceFlags.
+   * @param flags A set of OutputStreamSpliceFlags.
    * @param io_priority The io priority of the request.
    */
-  void splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, SpliceFlags flags = SpliceFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, OutputStreamSpliceFlags flags = OUTPUT_STREAM_SPLICE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   /** Splices a stream asynchronously.
    *  When the operation is finished @a slot will be called.
@@ -426,10 +425,10 @@ public:
    *
    * @param source An InputStream.
    * @param slot Callback slot to call when the request is satisfied.
-   * @param flags A set of SpliceFlags.
+   * @param flags A set of OutputStreamSpliceFlags.
    * @param io_priority The io priority of the request.
    */
-  void splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot, SpliceFlags flags = SpliceFlags::NONE, int io_priority = Glib::PRIORITY_DEFAULT);
+  void splice_async(const Glib::RefPtr<InputStream>& source, const SlotAsyncReady& slot, OutputStreamSpliceFlags flags = OUTPUT_STREAM_SPLICE_NONE, int io_priority = Glib::PRIORITY_DEFAULT);
 
   _IGNORE(g_output_stream_splice_async)
 
@@ -503,12 +502,13 @@ protected:
   _WRAP_METHOD(bool set_pending(), g_output_stream_set_pending, errthrow, newin "2,50")
   _WRAP_METHOD(void clear_pending(), g_output_stream_clear_pending, newin "2,50")
 
+  //TODO: When we can break ABI, add vfuncs. See https://bugzilla.gnome.org/show_bug.cgi?id=572471
 #m4 _CONVERSION(`GCancellable*', `const Glib::RefPtr<Cancellable>&', `Glib::wrap($3, true)')
 #m4 _CONVERSION(`GInputStream*', `const Glib::RefPtr<InputStream>&', `Glib::wrap($3, true)')
-  _WRAP_VFUNC(gssize write(const void* buffer, gsize count, const Glib::RefPtr<Cancellable>& cancellable), write_fn, errthrow, err_return_value -1)
-  _WRAP_VFUNC(gssize splice(const Glib::RefPtr<InputStream>& source, const Glib::RefPtr<Cancellable>& cancellable{.}, SpliceFlags flags{.}), splice, errthrow, err_return_value -1)
-  _WRAP_VFUNC(bool flush(const Glib::RefPtr<Cancellable>& cancellable), flush, errthrow)
-  _WRAP_VFUNC(bool close(const Glib::RefPtr<Cancellable>& cancellable), close_fn, errthrow)
+  //_WRAP_VFUNC(gssize write(const void* buffer, gsize count, const Glib::RefPtr<Cancellable>& cancellable), write_fn, errthrow, err_return_value -1)
+  //_WRAP_VFUNC(gssize splice(const Glib::RefPtr<InputStream>& source, const Glib::RefPtr<Cancellable>& cancellable{.}, OutputStreamSpliceFlags flags{.}), splice, errthrow, err_return_value -1)
+  //_WRAP_VFUNC(bool flush(const Glib::RefPtr<Cancellable>& cancellable), flush, errthrow)
+  //_WRAP_VFUNC(bool close(const Glib::RefPtr<Cancellable>& cancellable), close_fn, errthrow)
 };
 
 } // namespace Gio
index 6957457..f647cbe 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6405ece..d702b5b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 8e0aacb..2bd4c95 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a5dcddf..7dc7a45 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -33,8 +32,6 @@ class Cancellable;
 //TODO: Instead derive from InputStream, when we can break ABI,
 //because the GPollableInputStream interface requires the GInputStream interface.
 //LoadableIcon does a similar thing correctly, for instance.
-// However, GInputStream is an actuall class, deriving from GObject,
-// but GPollableInputStream is a GInterface, that "requires" GInputStream.
 
 /** PollableInputStream - Interface for pollable input streams.
  * PollableInputStream is implemented by InputStreams that can be polled for
index 8e0aacb..2bd4c95 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 2ab20cb..88915c1 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -33,8 +32,6 @@ class Cancellable;
 //TODO: Instead derive from OutputStream, when we can break ABI,
 //because the GPollableOutputStream interface requires the GOutputStream interface.
 //LoadableIcon does a similar thing correctly, for instance.
-// However, GOutputStream is an actual class, deriving from GObject,
-// but GPollableOutputStream is a GInterface, that "requires" GOutputStream.
 
 /** PollableOutputStream - Interface for pollable output streams.
  * PollableOutputStream is implemented by OutputStreams that can be polled for
diff --git a/gio/src/propertyaction.hg b/gio/src/propertyaction.hg
deleted file mode 100644 (file)
index 5037146..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Copyright (C) 2017 The giomm Development Team
- *
- * 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.1 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <glibmm/object.h>
-#include <glibmm/refptr.h>
-#include <giomm/action.h>
-
-_DEFS(giomm,gio)
-_PINCLUDE(glibmm/private/object_p.h)
-
-namespace Gio
-{
-/** An Action reflecting a Glib::Object property.
- *
- * A %PropertyAction is a way to get an Action with a state value
- * reflecting and controlling the value of a Glib::Object property.
- *
- * The state of the action will correspond to the value of the property.
- * Changing it will change the property (assuming the requested value
- * matches the requirements as specified in the GParamSpec, used when the
- * property was installed).
- *
- * Only the most common types are presently supported. Booleans are
- * mapped to booleans, strings to strings, signed/unsigned integers to
- * int32/uint32 and floats and doubles to doubles.
- *
- * If the property is an enum then the state will be string-typed and
- * conversion will automatically be performed between the enum value and
- * "nick" string as per the GEnumValue table.
- *
- * Flags types are not currently supported.
- *
- * Properties of object types, boxed types and pointer types are not
- * supported and probably never will be.
- *
- * Properties of Glib::Variant types are not currently supported.
- *
- * If the property is boolean-valued then the action will have a nullptr
- * parameter type, and activating the action (with no parameter) will
- * toggle the value of the property.
- *
- * In all other cases, the parameter type will correspond to the type of
- * the property.
- *
- * The general idea here is to reduce the number of locations where a
- * particular piece of state is kept (and therefore has to be synchronised
- * between). %PropertyAction does not have a separate state that is kept
- * in sync with the property value -- its state is the property value.
- *
- * For example, it might be useful to create an Action corresponding to
- * property_visible_child_name() of a Gtk::Stack so that the current
- * page can be switched from a menu. The active radio indication in the
- * menu is then directly determined from the active page of the Gtk::Stack.
- *
- * An anti-example would be binding property_active_id() on a Gtk::ComboBox.
- * This is because the state of the combobox itself is probably uninteresting
- * and is actually being used to control something else.
- *
- * Another anti-example would be to bind to property_visible_child_name()
- * of a Gtk::Stack if this value is actually stored in Gio::Settings.
- * In that case, the real source of the value is
- * Gio::Settings. If you want an Action to control a setting stored in
- * Gio::Settings, see Gio::Settings::create_action() instead, and possibly
- * combine its use with Gio::Settings::bind().
- *
- * @newin{2,52}
- */
-class PropertyAction : public Glib::Object, public Action
-{
-  _CLASS_GOBJECT(PropertyAction, GPropertyAction, G_PROPERTY_ACTION, Glib::Object, GObject)
-  _IMPLEMENTS_INTERFACE(Action)
-
-protected:
-  PropertyAction(const Glib::ustring& name, const Glib::PropertyProxy_Base& property_proxy,
-    bool invert_boolean = false);
-
-public:
-  /** Creates an Action corresponding to the value of property @a property_proxy.
-   *
-   * The property must be existent and readable and writable (and not construct-only).
-   *
-   * This function takes a reference on the property's object and doesn't
-   * release it until the action is destroyed.
-   *
-   * @param name The name of the action to create.
-   * @param property_proxy The property to bind.
-   * @param invert_boolean If <tt>true</tt>, the state of the action will be
-   *        the negation of the property value, provided the property is boolean.
-   * @return A new %PropertyAction.
-   *
-   * @newin{2,52}
-   */
-  _WRAP_CREATE(const Glib::ustring& name, const Glib::PropertyProxy_Base& property_proxy,
-    bool invert_boolean = false)
-
-  _WRAP_PROPERTY("name", Glib::ustring, newin "2,52")
-  _WRAP_PROPERTY("parameter-type", Glib::VariantType, newin "2,52")
-  _WRAP_PROPERTY("enabled", bool, newin "2,52")
-  _WRAP_PROPERTY("state-type", Glib::VariantType, newin "2,52")
-  _WRAP_PROPERTY("state", Glib::VariantBase, newin "2,52")
-  //_WRAP_PROPERTY("object", Glib::ObjectBase) // write-only, construct-only
-  //_WRAP_PROPERTY("property-name", Glib::ustring) // write-only, construct-only
-  _WRAP_PROPERTY("invert-boolean", bool, newin "2,52")
-
-  // There are no methods (apart from ctor and create), signals or vfuncs.
-};
-
-} // namespace Gio
index f744a77..bac28f6 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a7d5808..4fb94d2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
index ab1fdd7..bc4b3d7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 glibmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index f1bb09c..5d64bdd 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2009 The glibmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/inetsocketaddress.h>
index f9303e3..9d0a0a3 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6bf449e..43c2af4 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
@@ -52,7 +49,7 @@ public:
 
   _WRAP_METHOD(bool is_supported() const, g_proxy_resolver_is_supported)
 
-  //TODO: Use std::string instead of ustring?:
+  //TODO: Use std::string instead of ustring (StringArrayHandle uses ustring)?:
 #m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::ustring> lookup(const Glib::ustring& uri,
                                                 const Glib::RefPtr<Cancellable>& cancellable), g_proxy_resolver_lookup, errthrow)
index be265e5..a92a9fb 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Gio
index 57ec71d..e3b3cd6 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <giomm/actiongroup.h>
+#include <glibmm/interface.h>
 
 _DEFS(giomm,gio)
-_PINCLUDE(giomm/private/actiongroup_p.h)
+_PINCLUDE(glibmm/private/interface_p.h)
 _PINCLUDE(gio/gio.h)
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -30,6 +29,12 @@ typedef struct _GRemoteActionGroupInterface GRemoteActionGroupInterface;
 namespace Gio
 {
 
+
+//TODO: Instead derive from ActionGroup, when we can break ABI,
+//because the GRemoteActionGroup interface requires the GActionGroup interface.
+//LoadableIcon does a similar thing correctly, for instance.
+
+
 /** RemoteActionGroup - a ActionGroup that interacts with other processes.
  * The RemoteActionGroup interface is implemented by ActionGroup instances that
  * either transmit action invocations to other processes or receive action
@@ -51,9 +56,9 @@ namespace Gio
  * platform data for action invocations that arrive by way of D-Bus.
  * @newin{2,32}
  */
-class RemoteActionGroup : public ActionGroup
+class RemoteActionGroup : public Glib::Interface
 {
-  _CLASS_INTERFACE(RemoteActionGroup, GRemoteActionGroup, G_REMOTE_ACTION_GROUP, GRemoteActionGroupInterface, ActionGroup, GActionGroup)
+  _CLASS_INTERFACE(RemoteActionGroup, GRemoteActionGroup, G_REMOTE_ACTION_GROUP, GRemoteActionGroupInterface)
 
 public:
   _WRAP_METHOD(void activate_action(const Glib::ustring& action_name, const Glib::VariantBase& parameter, const Glib::VariantBase& platform_data), g_remote_action_group_activate_action_full)
@@ -61,8 +66,8 @@ public:
 
 #m4 _CONVERSION(`GVariant*',`const Glib::VariantBase&',`Glib::wrap($3, true)')
 
-  _WRAP_VFUNC(void activate_action_full(const Glib::ustring& action_name, const Glib::VariantBase& parameter, const Glib::VariantBase& platform_data), "activate_action_full")
-  _WRAP_VFUNC(void change_action_state_full(const Glib::ustring& action_name, const Glib::VariantBase& value, const Glib::VariantBase& platform_data), "change_action_state_full")
+  _WRAP_VFUNC(void activate_action(const Glib::ustring& action_name, const Glib::VariantBase& parameter, const Glib::VariantBase& platform_data), "activate_action_full")
+  _WRAP_VFUNC(void change_action_state(const Glib::ustring& action_name, const Glib::VariantBase& value, const Glib::VariantBase& platform_data), "change_action_state_full")
 };
 
 } // namespace Gio
index 7838f19..77b6f5e 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 #include <glibmm/error.h>
 #include "slot_async.h"
 
-namespace {
-
-struct SrvTargetListTraits
-{
-  using CppType = Gio::SrvTarget;
-  using CType = const GSrvTarget*;
-  using CTypeNonConst = GSrvTarget*;
-
-  static CType to_c_type(const CppType& item) { return item.gobj(); }
-  static CType to_c_type(CType ptr) { return ptr; }
-  static CppType to_cpp_type(CType item) { return CppType(const_cast<CTypeNonConst>(item), true /* take_copy */); }
-  static void release_c_type(CType item) { g_srv_target_free(const_cast<CTypeNonConst>(item)); }
-};
-
-} // anonymous namespace
-
 namespace Gio
 {
 
@@ -111,7 +94,7 @@ Resolver::lookup_service_async(const Glib::ustring& service, const Glib::ustring
 }
 
 void
-Resolver::lookup_records_async(const Glib::ustring& rrname, RecordType record_type,
+Resolver::lookup_records_async(const Glib::ustring& rrname, ResolverRecordType record_type,
   const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable)
 {
   auto slot_copy = new SlotAsyncReady(slot);
@@ -123,7 +106,7 @@ Resolver::lookup_records_async(const Glib::ustring& rrname, RecordType record_ty
 
 void
 Resolver::lookup_records_async(
-  const Glib::ustring& rrname, RecordType record_type, const SlotAsyncReady& slot)
+  const Glib::ustring& rrname, ResolverRecordType record_type, const SlotAsyncReady& slot)
 {
   auto slot_copy = new SlotAsyncReady(slot);
 
index b360f5c..e01be3c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -36,6 +35,8 @@ class VariantContainerBase;
 namespace Gio
 {
 
+_WRAP_ENUM(ResolverRecordType, GResolverRecordType)
+
 /** Asynchronous and cancellable DNS resolver
  *
  * Resolver provides cancellable synchronous and asynchronous DNS resolution,
@@ -57,8 +58,6 @@ class Resolver
 protected:
 
 public:
-  _WRAP_ENUM(RecordType, GResolverRecordType)
-
   static Glib::RefPtr<Resolver> get_default();
   _IGNORE(g_resolver_get_default)
   static void set_default(const Glib::RefPtr<Resolver>& resolver);
@@ -67,8 +66,8 @@ public:
   // g_resolver_free_addresses is just a C convenience function
   _IGNORE(g_resolver_free_addresses)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<InetAddress>>',`Glib::ListHandler<Glib::RefPtr<InetAddress>>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<InetAddress>> lookup_by_name(const Glib::ustring& hostname, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_by_name, errthrow)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<InetAddress> >',`$2($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<InetAddress> > lookup_by_name(const Glib::ustring& hostname, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_by_name, errthrow)
 
   /** Begins asynchronously resolving hostname to determine its associated IP address(es), and eventually calls @a slot, which must call
    * lookup_by_name_finish() to get the result. See lookup_by_name() for more details.
@@ -88,7 +87,7 @@ public:
   void lookup_by_name_async(const Glib::ustring& hostname, const SlotAsyncReady& slot);
   _IGNORE(g_resolver_lookup_by_name_async)
 
-  _WRAP_METHOD(std::vector<Glib::RefPtr<InetAddress>> lookup_by_name_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_by_name_finish, errthrow)
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<InetAddress> > lookup_by_name_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_by_name_finish, errthrow)
 
   _WRAP_METHOD(Glib::ustring lookup_by_address(const Glib::RefPtr<InetAddress>& address, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_by_address, errthrow)
 
@@ -112,8 +111,8 @@ public:
 
   _WRAP_METHOD(Glib::ustring lookup_by_address_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_by_address_finish, errthrow)
 
-#m4 _CONVERSION(`GList*',`std::vector<SrvTarget>',`Glib::ListHandler<SrvTarget, SrvTargetListTraits>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<SrvTarget> lookup_service(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_service, errthrow)
+#m4 _CONVERSION(`GList*',`ListHandle_SrvTarget',`$2($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(ListHandle_SrvTarget lookup_service(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_service, errthrow)
 
   /** Begins asynchronously performing a DNS SRV lookup for the given service and protocol in the given domain, and eventually calls callback,
    * which must call lookup_service_finish() to get the final result. See glookup_service() for more details.
@@ -137,11 +136,11 @@ public:
   void lookup_service_async(const Glib::ustring& service, const Glib::ustring& protocol, const Glib::ustring& domain, const SlotAsyncReady& slot);
   _IGNORE(g_resolver_lookup_service_async)
 
-  _WRAP_METHOD(std::vector<SrvTarget> lookup_service_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_service_finish, errthrow)
+  _WRAP_METHOD(ListHandle_SrvTarget lookup_service_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_service_finish, errthrow)
 
 #m4 _CONVERSION(`GList*',`std::vector<Glib::VariantContainerBase>',`Glib::ListHandler<Glib::VariantContainerBase>::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
 
-  _WRAP_METHOD(std::vector<Glib::VariantContainerBase> lookup_records(const Glib::ustring& rrname, RecordType record_type, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_records, errthrow)
+  _WRAP_METHOD(std::vector<Glib::VariantContainerBase> lookup_records(const Glib::ustring& rrname, ResolverRecordType record_type, const Glib::RefPtr<Cancellable>& cancellable{?}), g_resolver_lookup_records, errthrow)
 
   /** Begins asynchronously performing a DNS lookup for the given @a rrname,
    * and eventually calls @a slot, which must call lookup_records_finish() to
@@ -154,17 +153,18 @@ public:
    * @newin{2,36}
    */
   void lookup_records_async(const Glib::ustring& rrname,
-    RecordType record_type, const SlotAsyncReady& slot,
+    ResolverRecordType record_type, const SlotAsyncReady& slot,
     const Glib::RefPtr<Cancellable>& cancellable);
   _IGNORE(g_resolver_lookup_records_async)
 
   /// A non-cancellable version of lookup_records_async().
   void lookup_records_async(const Glib::ustring& rrname,
-    RecordType record_type, const SlotAsyncReady& slot);
+    ResolverRecordType record_type, const SlotAsyncReady& slot);
 
   _WRAP_METHOD(std::vector<Glib::VariantContainerBase> lookup_records_finish(const Glib::RefPtr<AsyncResult>& result), g_resolver_lookup_records_finish, errthrow)
 
-  _WRAP_SIGNAL(void reload(), reload)
+  //TODO: Remove no_default_handler when we can break ABI:
+  _WRAP_SIGNAL(void reload(), reload, no_default_handler)
 };
 
 std::string hostname_to_ascii (const Glib::ustring& hostname);
index 7a579b4..78479de 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 
 namespace Gio
 {
-// Hand-coded because we want Flags& instead of guint32&.
+// Hand-coded because we want ResourceFlags& instead of guint32&.
 void
-Resource::get_info(const std::string& path, gsize& size, Flags& flags,
-  LookupFlags lookup_flags) const
+Resource::get_info(const std::string& path, gsize& size, ResourceFlags& flags,
+  ResourceLookupFlags lookup_flags) const
 {
   guint32 file_flags = 0;
   GError* gerror = nullptr;
@@ -32,11 +31,11 @@ Resource::get_info(const std::string& path, gsize& size, Flags& flags,
     (GResourceLookupFlags)lookup_flags, &size, &file_flags, &gerror);
   if (gerror)
     ::Glib::Error::throw_exception(gerror);
-  flags = static_cast<Flags>(file_flags);
+  flags = static_cast<ResourceFlags>(file_flags);
 }
 
 void
-Resource::get_file_exists(const std::string& path, LookupFlags lookup_flags) const
+Resource::get_file_exists(const std::string& path, ResourceLookupFlags lookup_flags) const
 {
   GError* gerror = nullptr;
   g_resource_get_info(const_cast<GResource*>(gobj()), path.c_str(),
@@ -46,17 +45,17 @@ Resource::get_file_exists(const std::string& path, LookupFlags lookup_flags) con
 }
 
 bool
-Resource::get_file_exists_nothrow(const std::string& path, LookupFlags lookup_flags) const
+Resource::get_file_exists_nothrow(const std::string& path, ResourceLookupFlags lookup_flags) const
 {
   return g_resource_get_info(const_cast<GResource*>(gobj()), path.c_str(),
     (GResourceLookupFlags)lookup_flags, nullptr, nullptr, nullptr);
 }
 
-// Hand-coded because we want Flags& instead of guint32&.
+// Hand-coded because we want ResourceFlags& instead of guint32&.
 // static
 void
 Resource::get_info_global(
-  const std::string& path, gsize& size, Flags& flags, LookupFlags lookup_flags)
+  const std::string& path, gsize& size, ResourceFlags& flags, ResourceLookupFlags lookup_flags)
 {
   guint32 file_flags = 0;
   GError* gerror = nullptr;
@@ -66,12 +65,12 @@ Resource::get_info_global(
     path.c_str(), (GResourceLookupFlags)lookup_flags, &size, &file_flags, &gerror);
   if (gerror)
     ::Glib::Error::throw_exception(gerror);
-  flags = static_cast<Flags>(file_flags);
+  flags = static_cast<ResourceFlags>(file_flags);
 }
 
 // static
 void
-Resource::get_file_exists_global(const std::string& path, LookupFlags lookup_flags)
+Resource::get_file_exists_global(const std::string& path, ResourceLookupFlags lookup_flags)
 {
   GError* gerror = nullptr;
   g_resources_get_info(path.c_str(), (GResourceLookupFlags)lookup_flags, nullptr, nullptr, &gerror);
@@ -81,7 +80,7 @@ Resource::get_file_exists_global(const std::string& path, LookupFlags lookup_fla
 
 // static
 bool
-Resource::get_file_exists_global_nothrow(const std::string& path, LookupFlags lookup_flags)
+Resource::get_file_exists_global_nothrow(const std::string& path, ResourceLookupFlags lookup_flags)
 {
   return g_resources_get_info(
     path.c_str(), (GResourceLookupFlags)lookup_flags, nullptr, nullptr, nullptr);
index 96f3b51..be41fac 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
@@ -35,6 +34,9 @@ namespace Gio
  */
 _WRAP_GERROR(ResourceError, GResourceError, G_RESOURCE_ERROR, NO_GTYPE, newin "2,34")
 
+_WRAP_ENUM(ResourceFlags, GResourceFlags, newin "2,44")
+_WRAP_ENUM(ResourceLookupFlags, GResourceLookupFlags, newin "2,44")
+
 /** %Resource framework.
  *
  * Applications and libraries often contain binary or textual data that is
@@ -131,16 +133,13 @@ class Resource final
   _IGNORE(g_resource_ref, g_resource_unref)
 
 public:
-  _WRAP_ENUM(Flags, GResourceFlags, newin "2,44")
-  _WRAP_ENUM(LookupFlags, GResourceLookupFlags, newin "2,44")
-
   _WRAP_METHOD(static Glib::RefPtr<Resource> create_from_data(const Glib::RefPtr<const Glib::Bytes>& data), g_resource_new_from_data, errthrow, newin "2,44")
   _WRAP_METHOD(static Glib::RefPtr<Resource> create_from_file(const std::string& filename), g_resource_load, errthrow, newin "2,44")
-  _WRAP_METHOD(Glib::RefPtr<InputStream> open_stream(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE) const, g_resource_open_stream, errthrow, newin "2,44")
-  _WRAP_METHOD(Glib::RefPtr<const Glib::Bytes> lookup_data(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE) const, g_resource_lookup_data, errthrow, newin "2,44")
+  _WRAP_METHOD(Glib::RefPtr<InputStream> open_stream(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const, g_resource_open_stream, errthrow, newin "2,44")
+  _WRAP_METHOD(Glib::RefPtr<const Glib::Bytes> lookup_data(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const, g_resource_lookup_data, errthrow, newin "2,44")
 
 #m4 _CONVERSION(`char**',`std::vector<std::string>',`Glib::ArrayHandler<std::string>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<std::string> enumerate_children(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE) const, g_resource_enumerate_children, errthrow, newin "2,44")
+  _WRAP_METHOD(std::vector<std::string> enumerate_children(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const, g_resource_enumerate_children, errthrow, newin "2,44")
 
   /** Looks for a file at the specified @a path in the resource and
    * if found returns information about it.
@@ -152,10 +151,10 @@ public:
    * @param path A pathname inside the resource.
    * @param[out] size A location to place the length of the contents of the file.
    * @param[out] flags A location to place the flags about the file.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @throw Gio::ResourceError if the file was not found.
    */
-  void get_info(const std::string& path, gsize& size, Flags& flags, LookupFlags lookup_flags = LookupFlags::NONE) const;
+  void get_info(const std::string& path, gsize& size, ResourceFlags& flags, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const;
   _IGNORE(g_resource_get_info)
 
   /** Looks for a file at the specified @a path in the resource.
@@ -165,10 +164,10 @@ public:
    * @newin{2,44}
    *
    * @param path A pathname inside the resource.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @throw Gio::ResourceError if the file was not found.
    */
-  void get_file_exists(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE) const;
+  void get_file_exists(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const;
 
   /** Looks for a file at the specified @a path in the resource.
    *
@@ -178,17 +177,17 @@ public:
    * @newin{2,44}
    *
    * @param path A pathname inside the resource.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @return <tt>true</tt> if the file was found, <tt>false</tt> if there were errors.
    */
-  bool get_file_exists_nothrow(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE) const;
+  bool get_file_exists_nothrow(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE) const;
 
   // 'register' is a keyword. Can't be the name of a method.
   _WRAP_METHOD(void register_global(), g_resources_register, newin "2,44")
   _WRAP_METHOD(void unregister_global(), g_resources_unregister, newin "2,44")
-  _WRAP_METHOD(static Glib::RefPtr<InputStream> open_stream_global(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE), g_resources_open_stream, errthrow, newin "2,44")
-  _WRAP_METHOD(static Glib::RefPtr<const Glib::Bytes> lookup_data_global(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE), g_resources_lookup_data, errthrow, newin "2,44")
-  _WRAP_METHOD(static std::vector<std::string> enumerate_children_global(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE), g_resources_enumerate_children, errthrow, newin "2,44")
+  _WRAP_METHOD(static Glib::RefPtr<InputStream> open_stream_global(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE), g_resources_open_stream, errthrow, newin "2,44")
+  _WRAP_METHOD(static Glib::RefPtr<const Glib::Bytes> lookup_data_global(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE), g_resources_lookup_data, errthrow, newin "2,44")
+  _WRAP_METHOD(static std::vector<std::string> enumerate_children_global(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE), g_resources_enumerate_children, errthrow, newin "2,44")
 
   /** Looks for a file at the specified @a path in the set of
    * globally registered resources and if found returns information about it.
@@ -200,10 +199,10 @@ public:
    * @param path A pathname inside the resource.
    * @param[out] size A location to place the length of the contents of the file.
    * @param[out] flags A location to place the flags about the file.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @throw Gio::ResourceError if the file was not found.
    */
-  static void get_info_global(const std::string& path, gsize& size, Flags& flags, LookupFlags lookup_flags = LookupFlags::NONE);
+  static void get_info_global(const std::string& path, gsize& size, ResourceFlags& flags, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE);
   _IGNORE(g_resources_get_info)
 
   /** Looks for a file at the specified @a path in the set of
@@ -214,10 +213,10 @@ public:
    * @newin{2,44}
    *
    * @param path A pathname inside the resource.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @throw Gio::ResourceError if the file was not found.
    */
-  static void get_file_exists_global(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE);
+  static void get_file_exists_global(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE);
 
   /** Looks for a file at the specified @a path in the set of
    * globally registered resources.
@@ -228,10 +227,10 @@ public:
    * @newin{2,44}
    *
    * @param path A pathname inside the resource.
-   * @param lookup_flags A LookupFlags.
+   * @param lookup_flags A ResourceLookupFlags.
    * @return <tt>true</tt> if the file was found, <tt>false</tt> if there were errors.
    */
-  static bool get_file_exists_global_nothrow(const std::string& path, LookupFlags lookup_flags = LookupFlags::NONE);
+  static bool get_file_exists_global_nothrow(const std::string& path, ResourceLookupFlags lookup_flags = RESOURCE_LOOKUP_FLAGS_NONE);
 
   _IGNORE(g_static_resource_init, g_static_resource_fini, g_static_resource_get_resource)dnl//Used only by the glib-compile-resources command
 };
index 43f4afe..937ee25 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 79c0d07..ec3a635 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/cancellable.h>
index 183dcf8..05595ac 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 #include <glibmm/exceptionhandler.h>
 #include <glibmm/vectorutils.h>
-#include <giomm/settingsschema.h>
 
 namespace Gio
 {
@@ -55,7 +53,7 @@ Settings::get_default_value(const Glib::ustring& key, Glib::VariantBase& value)
 }
 void
 Settings::bind(
-  const Glib::ustring& key, const Glib::PropertyProxy_Base& property_proxy, BindFlags flags)
+  const Glib::ustring& key, const Glib::PropertyProxy_Base& property_proxy, SettingsBindFlags flags)
 {
   bind(key, property_proxy.get_object(), property_proxy.get_name(), flags);
 }
@@ -67,4 +65,14 @@ Settings::bind_writable(
   bind_writable(key, property_proxy.get_object(), property_proxy.get_name(), inverted);
 }
 
+_DEPRECATE_IFDEF_START
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+std::vector<Glib::ustring>
+Settings::list_schemas()
+{
+  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(
+    g_settings_list_schemas(), Glib::OWNERSHIP_NONE);
+}
+G_GNUC_END_IGNORE_DEPRECATIONS
+_DEPRECATE_IFDEF_END
 }
index a55a694..029eb6a 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
 
+#include <glibmm/arrayhandle.h>
 #include <glibmm/object.h>
 #include <glibmm/variant.h>
 #include <giomm/action.h>
@@ -26,7 +26,8 @@ _PINCLUDE(glibmm/private/object_p.h)
 
 namespace Gio
 {
-class SettingsSchema;
+
+  _WRAP_ENUM(SettingsBindFlags, GSettingsBindFlags)
 
 /** A high-level API for application settings
  *
@@ -39,22 +40,17 @@ class Settings : public Glib::Object
 {
   _CLASS_GOBJECT(Settings, GSettings, G_SETTINGS, Glib::Object, GObject)
 
-public:
-  _WRAP_ENUM(BindFlags, GSettingsBindFlags)
-
 protected:
   _WRAP_CTOR(Settings(const Glib::ustring& schema_id), g_settings_new)
   _WRAP_CTOR(Settings(const Glib::ustring& schema_id, const Glib::ustring& path), g_settings_new_with_path)
   //TODO: Requires SettingsBackend: _WRAP_CTOR(Settings(const Glib::ustring& schema_id, const Glib::RefPtr<SettingsBackend>& backend), g_settings_new_with_backend)
   //TODO: Requires SettingsBackend: _WRAP_CTOR(Settings(const Glib::ustring& schema_id, const Glib::RefPtr<SettingsBackend>& backend, const Glib::ustring& path), g_settings_new_with_backend_and_path)
-  //TODO: Requires SettingsBackend: _WRAP_CTOR(Settings(const Glib::RefPtr<SettingsSchema>& settings_schema, const Glib::RefPtr<SettingsBackend>& backend, const Glib::ustring& path), g_settings_new_full)
 
 public:
   _WRAP_CREATE(const Glib::ustring& schema_id)
   _WRAP_CREATE(const Glib::ustring& schema_id, const Glib::ustring& path)
   //TODO: Requires SettingsBackend: _WRAP_CREATE(const Glib::ustring& schema_id, const Glib::RefPtr<SettingsBackend>& backend)
   //TODO: Requires SettingsBackend: _WRAP_CREATE(const Glib::ustring& schema_id, const Glib::RefPtr<SettingsBackend>& backend, const Glib::ustring& path)
-  //TODO: Requires SettingsBackend: _WRAP_CREATE(const Glib::RefPtr<SettingsSchema>& settings_schema, const Glib::RefPtr<SettingsBackend>& backend, const Glib::ustring& path)
 
   //TODO: Rename these to get/set_*_value_variant() and add templated get/set_*_value() methods as elsewhere?
   _WRAP_METHOD(bool set_value(const Glib::ustring& key, const Glib::VariantBase& value),  g_settings_set_value)
@@ -139,6 +135,7 @@ public:
   _WRAP_METHOD(gint64 get_int64(const Glib::ustring& key) const, g_settings_get_int64)
   _WRAP_METHOD(void set_int64(const Glib::ustring& key, gint64 value), g_settings_set_int64)
   _WRAP_METHOD(guint get_uint(const Glib::ustring& key) const, g_settings_get_uint)
+  _WRAP_METHOD(void set_uiint(const Glib::ustring& key, guint value), g_settings_set_uint, deprecated "Use set_uint() instead.")
   _WRAP_METHOD(void set_uint(const Glib::ustring& key, guint value), g_settings_set_uint)
   _WRAP_METHOD(guint64 get_uint64(const Glib::ustring& key) const, g_settings_get_uint64)
   _WRAP_METHOD(void set_uint64(const Glib::ustring& key, guint64 value), g_settings_set_uint64)
@@ -149,14 +146,18 @@ public:
   _WRAP_METHOD(double get_double(const Glib::ustring& key) const, g_settings_get_double)
   _WRAP_METHOD(void set_double(const Glib::ustring& key, double value), g_settings_set_double)
 
-  #m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> get_string_array(const Glib::ustring& key) const, g_settings_get_strv)
+  #m4 _CONVERSION(`gchar**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle get_string_array(const Glib::ustring& key) const, g_settings_get_strv)
 
-  _WRAP_METHOD(bool set_string_array(const Glib::ustring& key, const std::vector<Glib::ustring>& value), g_settings_set_strv)
+  _WRAP_METHOD(bool set_string_array(const Glib::ustring& key,  const Glib::StringArrayHandle& value), g_settings_set_strv)
 
   _WRAP_METHOD(int get_enum(const Glib::ustring& key) const, g_settings_get_enum)
+  _WRAP_METHOD(bool get_enum(const Glib::ustring& key, int value), g_settings_set_enum,
+    deprecated "This method is misnamed. Use set_enum() instead.")
   _WRAP_METHOD(bool set_enum(const Glib::ustring& key, int value), g_settings_set_enum)
   _WRAP_METHOD(guint get_flags(const Glib::ustring& key) const, g_settings_get_flags)
+  _WRAP_METHOD(bool get_flags(const Glib::ustring& key, guint value), g_settings_set_flags,
+    deprecated "This method is misnamed. Use set_flags() instead.")
   _WRAP_METHOD(bool set_flags(const Glib::ustring& key, guint value), g_settings_set_flags)
 
   // Ignore varargs functions.
@@ -173,17 +174,27 @@ public:
 
   _WRAP_METHOD(void reset(const Glib::ustring& key), g_settings_reset)
 
+_DEPRECATE_IFDEF_START
+//We must hand-code this because gmmproc is confused by the static keyword with the vector.
+//#m4 _CONVERSION(`const gchar*const*',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_NONE)')
+  _WRAP_METHOD_DOCS_ONLY(g_settings_list_schemas)
+  static std::vector<Glib::ustring> list_schemas();
+  _IGNORE(g_settings_list_schemas)
+_DEPRECATE_IFDEF_END
+
 #m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
   _WRAP_METHOD(std::vector<Glib::ustring> list_children() const, g_settings_list_children)
-  _IGNORE(g_settings_list_keys)
+  _WRAP_METHOD(std::vector<Glib::ustring> list_keys() const, g_settings_list_keys, deprecated "Use SettingsSchema::list_kes().")
 
   _IGNORE(g_settings_get_range, g_settings_list_relocatable_schemas) // deprecated
 
-  _IGNORE(g_settings_range_check)
+  _WRAP_METHOD(bool range_check(const Glib::ustring& key, const Glib::VariantBase& value) const, g_settings_range_check,
+    deprecated "Use g_settings_schema_key_range_check() instead.")
+  //TODO: Wrap GSettingsSchema
 
 #m4 _CONVERSION(`Glib::ObjectBase*',`gpointer',(gpointer)$3->gobj())
-  _WRAP_METHOD(void bind(const Glib::ustring& key, Glib::ObjectBase* object, const Glib::ustring& property, BindFlags flags = BindFlags::DEFAULT), g_settings_bind)
-  void bind(const Glib::ustring& key, const Glib::PropertyProxy_Base& property_proxy, BindFlags flags = BindFlags::DEFAULT);
+  _WRAP_METHOD(void bind(const Glib::ustring& key, Glib::ObjectBase* object, const Glib::ustring& property, SettingsBindFlags flags=SETTINGS_BIND_DEFAULT), g_settings_bind)
+  void bind(const Glib::ustring& key, const Glib::PropertyProxy_Base& property_proxy, SettingsBindFlags flags=SETTINGS_BIND_DEFAULT);
   // TODO: implement bind_with_mapping
   _WRAP_METHOD(void bind_writable(const Glib::ustring& key, Glib::ObjectBase* object, const Glib::ustring& property, bool inverted=false), g_settings_bind_writable)
   void bind_writable(const Glib::ustring& key, const Glib::PropertyProxy_Base& property_proxy, bool inverted=false);
@@ -196,18 +207,19 @@ public:
   _WRAP_PROPERTY("delay-apply", bool)
   _WRAP_PROPERTY("has-unapplied", bool)
   _WRAP_PROPERTY("path", std::string)
-  _IGNORE_PROPERTY("schema")
+  _WRAP_PROPERTY("schema", Glib::ustring, deprecated "Use the 'schema-id' property instead. In a future version, this property may instead refer to a SettingsSchema.")
   _WRAP_PROPERTY("schema-id", Glib::ustring)
 
-  _WRAP_PROPERTY("settings-schema", Glib::RefPtr<SettingsSchema>, newin "2,52")
+  //TODO: _WRAP_PROPERTY("settings-schema", Glib::RefPtr<SettingsSchema>)
 
-  //TODO?: _WRAP_SIGNAL(bool change_event(const std::vector<Glib::QueryQuark>&  keys, int n_keys), "change-event")
+  //TODO?: _WRAP_SIGNAL(bool change_event(const Glib::ArrayHandle<Glib::QueryQuark>& keys, int n_keys), "change-event")
 
+  //TODO: Remove two_signal_methods when we can break ABI.
 #m4 _CONVERSION(`const char*',`const Glib::ustring&',__GCHARP_TO_USTRING)
-  _WRAP_SIGNAL(void changed(const Glib::ustring& key), "changed", detail_name key)
+  _WRAP_SIGNAL(void changed(const Glib::ustring& key), "changed", detail_name key, two_signal_methods)
 
   _WRAP_SIGNAL(bool writable_change_event(GQuark key), "writable-change-event")
-  _WRAP_SIGNAL(void writable_changed(const Glib::ustring& key), writable_changed)
+  _WRAP_SIGNAL(void writable_changed(const Glib::ustring& key), writable_changed, detail_name key, two_signal_methods)
 };
 
 } // namespace Gio
index 27d1a1e..1c73326 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index c5f6c95..843f96d 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
 
 #include <giomm/settingsschemakey.h>
+#include <glibmm/arrayhandle.h>
 
 _DEFS(giomm,gio)
 _PINCLUDE(glibmm/private/object_p.h)
index 27d1a1e..1c73326 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index cf5f0da..4734ca0 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
index 27d1a1e..1c73326 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index f330945..5975c38 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
index 42b236e..d4fb0e1 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index fe7e669..5874112 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 3a80251..e33de0b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 36dd91b..770b029 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -49,7 +48,11 @@ public:
   _WRAP_METHOD_DOCS_ONLY(g_simple_action_group_new)
   _WRAP_CREATE()
 
-  _IGNORE(g_simple_action_group_lookup, g_simple_action_group_insert, g_simple_action_group_remove)
+  _WRAP_METHOD(Glib::RefPtr<Action> lookup(const Glib::ustring& action_name), g_simple_action_group_lookup, refreturn, deprecated "Use ActionMap::lookup_action() instead")
+  _WRAP_METHOD(Glib::RefPtr<const Action> lookup(const Glib::ustring& action_name) const, g_simple_action_group_lookup, refreturn, constversion, deprecated "Use ActionMap::lookup_action() instead")
+
+  _WRAP_METHOD(void insert(const Glib::RefPtr<Action>& action), g_simple_action_group_insert, deprecated "Use ActionMap::add_action() instead")
+  _WRAP_METHOD(void remove(const Glib::ustring& action_name), g_simple_action_group_remove, deprecated "Use ActionMap::remove_action() instead")
 
   _IGNORE(g_simple_action_group_add_entries) // deprecated
 };
index e627cda..cb85474 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index c6a2ea3..cce3b6b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/permission.h>
index 4e4910c..767882e 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
 #include <giomm/socketsource.h>
 #include "slot_async.h"
 
-using Type = Gio::Socket::Type;
-using Protocol = Gio::Socket::Protocol;
-
 namespace Gio
 {
 
-Socket::Socket(SocketFamily family, Type type, Protocol protocol,
+Socket::Socket(SocketFamily family, SocketType type, SocketProtocol protocol,
   const Glib::RefPtr<Cancellable>& cancellable)
 : _CONSTRUCT("family", int(family), "type", int(type), "protocol", int(protocol))
 {
@@ -43,17 +37,17 @@ Socket::Socket(int fd, const Glib::RefPtr<Cancellable>& cancellable) : _CONSTRUC
 
 // static
 Glib::RefPtr<Socket>
-Socket::create(SocketFamily family, Type type, Protocol protocol,
+Socket::create(SocketFamily family, SocketType type, SocketProtocol protocol,
   const Glib::RefPtr<Cancellable>& cancellable)
 {
-  return Glib::make_refptr_for_instance<Socket>(new Socket(family, type, protocol, cancellable));
+  return Glib::RefPtr<Socket>(new Socket(family, type, protocol, cancellable));
 }
 
 // static
 Glib::RefPtr<Socket>
 Socket::create_from_fd(int fd, const Glib::RefPtr<Cancellable>& cancellable)
 {
-  return Glib::make_refptr_for_instance<Socket>(new Socket(fd, cancellable));
+  return Glib::RefPtr<Socket>(new Socket(fd, cancellable));
 }
 
 gssize
@@ -117,7 +111,10 @@ Socket::send_with_blocking(
 Glib::RefPtr<SocketSource>
 Socket::create_source(Glib::IOCondition condition, const Glib::RefPtr<Cancellable>& cancellable)
 {
-  return SocketSource::create(gobj(), condition, cancellable);
+  // The corresponding unreference() takes place in the dtor
+  // of the Glib::RefPtr<Socket> object below.
+  reference();
+  return SocketSource::create(Glib::RefPtr<Socket>(this), condition, cancellable);
 }
 
 } // namespace Gio
index 55a3ce9..b3b0e29 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/iochannel.h>
@@ -31,6 +30,9 @@ namespace Gio
 {
 class SocketSource;
 
+_WRAP_ENUM(SocketType, GSocketType)
+_WRAP_ENUM(SocketProtocol, GSocketProtocol)
+_WRAP_ENUM(SocketMsgFlags, GSocketMsgFlags)
 
 /** @defgroup NetworkIO Portable Network I/O Functionality
  */
@@ -88,13 +90,8 @@ class Socket : public Glib::Object, public Initable
   _CLASS_GOBJECT(Socket, GSocket, G_SOCKET, Glib::Object, GObject)
   _IMPLEMENTS_INTERFACE(Initable)
 
-public:
-  _WRAP_ENUM(Type, GSocketType)
-  _WRAP_ENUM(Protocol, GSocketProtocol)
-  _WRAP_ENUM(MsgFlags, GSocketMsgFlags)
-
 protected:
-  Socket(SocketFamily family, Type type, Protocol protocol,
+  Socket(SocketFamily family, SocketType type, SocketProtocol protocol,
          const Glib::RefPtr<Cancellable>& cancellable);
 
   Socket(int fd, const Glib::RefPtr<Cancellable>& cancellable);
@@ -106,7 +103,7 @@ public:
    * @throw Glib::Error
    */
   static Glib::RefPtr<Socket>
-  create(SocketFamily family, Type type, Protocol protocol,
+  create(SocketFamily family, SocketType type, SocketProtocol protocol,
          const Glib::RefPtr<Cancellable>& cancellable = Glib::RefPtr<Cancellable>());
 
   // gmmproc thinks that this function should be wrapped in this class because
@@ -280,8 +277,8 @@ public:
   _WRAP_METHOD(int get_fd() const, g_socket_get_fd)
   _WRAP_METHOD(Glib::RefPtr<SocketAddress> get_local_address() const, g_socket_get_local_address, errthrow)
   _WRAP_METHOD(Glib::RefPtr<SocketAddress> get_remote_address() const, g_socket_get_remote_address, errthrow)
-  _WRAP_METHOD(Protocol get_protocol() const, g_socket_get_protocol)
-  _WRAP_METHOD(Type get_socket_type() const, g_socket_get_socket_type)
+  _WRAP_METHOD(SocketProtocol get_protocol() const, g_socket_get_protocol)
+  _WRAP_METHOD(SocketType get_socket_type() const, g_socket_get_socket_type)
   _WRAP_METHOD(bool speaks_ipv4() const, g_socket_speaks_ipv4)
 
   _WRAP_METHOD(Glib::RefPtr<Credentials> get_credentials(), g_socket_get_credentials, errthrow)
@@ -322,9 +319,9 @@ public:
   _WRAP_PROPERTY("local-address", Glib::RefPtr<SocketAddress>)
   _WRAP_PROPERTY("remote-address", Glib::RefPtr<SocketAddress>)
   _WRAP_PROPERTY("timeout", guint)
-  _WRAP_PROPERTY("protocol", Protocol)
+  _WRAP_PROPERTY("protocol", SocketProtocol)
   _WRAP_PROPERTY("broadcast", bool)
-  _WRAP_PROPERTY("type", Type)
+  _WRAP_PROPERTY("type", SocketType)
   _WRAP_PROPERTY("ttl", guint)
   _WRAP_PROPERTY("multicast-loopback", bool)
   _WRAP_PROPERTY("multicast-ttl", guint)
index eb8adb6..f5d23a7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index ed7cf8f..713986b 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 405773f..9e01483 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2009 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 01a137a..28cf187 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index c3ec6f0..8339f12 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 26f0bd6..4b896a1 100644 (file)
@@ -1,3 +1,5 @@
+// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -61,10 +62,10 @@ public:
   _WRAP_CREATE()
   _WRAP_METHOD(SocketFamily get_family() const, g_socket_client_get_family)
   _WRAP_METHOD(void set_family(SocketFamily family), g_socket_client_set_family)
-  _WRAP_METHOD(Socket::Type get_socket_type() const, g_socket_client_get_socket_type)
-  _WRAP_METHOD(void set_socket_type(Socket::Type type), g_socket_client_set_socket_type)
-  _WRAP_METHOD(Socket::Protocol get_protocol() const, g_socket_client_get_protocol)
-  _WRAP_METHOD(void set_protocol(Socket::Protocol protocol), g_socket_client_set_protocol)
+  _WRAP_METHOD(SocketType get_socket_type() const, g_socket_client_get_socket_type)
+  _WRAP_METHOD(void set_socket_type(SocketType type), g_socket_client_set_socket_type)
+  _WRAP_METHOD(SocketProtocol get_protocol() const, g_socket_client_get_protocol)
+  _WRAP_METHOD(void set_protocol(SocketProtocol protocol), g_socket_client_set_protocol)
   _WRAP_METHOD(Glib::RefPtr<SocketAddress> get_local_address(), g_socket_client_get_local_address)
   _WRAP_METHOD(Glib::RefPtr<const SocketAddress> get_local_address() const, g_socket_client_get_local_address, constversion)
   _WRAP_METHOD(void set_local_address(const Glib::RefPtr<SocketAddress>& address), g_socket_client_set_local_address)
@@ -159,8 +160,8 @@ public:
 
   _WRAP_PROPERTY("family", SocketFamily)
   _WRAP_PROPERTY("local-address", Glib::RefPtr<SocketAddress>)
-  _WRAP_PROPERTY("protocol", Socket::Protocol)
-  _WRAP_PROPERTY("type", Socket::Type)
+  _WRAP_PROPERTY("protocol", SocketProtocol)
+  _WRAP_PROPERTY("type", SocketType)
   _WRAP_PROPERTY("timeout", guint)
   _WRAP_PROPERTY("enable-proxy", bool)
   _WRAP_PROPERTY("tls", bool)
@@ -169,7 +170,7 @@ public:
 
 #m4 _CONVERSION(`GSocketConnectable*',`const Glib::RefPtr<SocketConnectable>&',`Glib::wrap($3)')
 #m4 _CONVERSION(`GIOStream*',`const Glib::RefPtr<IOStream>&',`Glib::wrap($3)')
-  _WRAP_SIGNAL(void event(SocketClientEvent event, const Glib::RefPtr<SocketConnectable>& connectable, const Glib::RefPtr<IOStream>& connection), event)
+  _WRAP_SIGNAL(void event(SocketClientEvent event, const Glib::RefPtr<SocketConnectable>& connectable, const Glib::RefPtr<IOStream>& connection), event, no_default_handler)
 };
 
 } // namespace Gio
index 0f94c18..a4150d7 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2009 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 812df3d..266a8a6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index 4c71d8f..13c2569 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 5ac0b2d..1c9a738 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index e7119a3..b921f77 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 834393b..96e5f36 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 4185651..c48dbb8 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -36,8 +33,8 @@ SocketListener::add_socket(const Glib::RefPtr<Socket>& socket)
 }
 
 bool
-SocketListener::add_address(const Glib::RefPtr<SocketAddress>& address, Socket::Type type,
-  Socket::Protocol protocol, const Glib::RefPtr<Glib::Object>& source_object,
+SocketListener::add_address(const Glib::RefPtr<SocketAddress>& address, SocketType type,
+  SocketProtocol protocol, const Glib::RefPtr<Glib::Object>& source_object,
   Glib::RefPtr<SocketAddress>& effective_address)
 {
   GError* gerror = nullptr;
@@ -55,8 +52,8 @@ SocketListener::add_address(const Glib::RefPtr<SocketAddress>& address, Socket::
 }
 
 bool
-SocketListener::add_address(const Glib::RefPtr<SocketAddress>& address, Socket::Type type,
-  Socket::Protocol protocol, Glib::RefPtr<SocketAddress>& effective_address)
+SocketListener::add_address(const Glib::RefPtr<SocketAddress>& address, SocketType type,
+  SocketProtocol protocol, Glib::RefPtr<SocketAddress>& effective_address)
 {
   GError* gerror = nullptr;
   GSocketAddress* retaddr = nullptr;
index d463e44..4520635 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -66,11 +63,11 @@ public:
   bool add_socket(const Glib::RefPtr<Socket>& socket);
 
   _WRAP_METHOD_DOCS_ONLY(g_socket_listener_add_address)
-bool add_address(const Glib::RefPtr<SocketAddress>& address, Socket::Type type, Socket::Protocol protocol, const Glib::RefPtr<Glib::Object>& source_object, Glib::RefPtr<SocketAddress>& effective_address);
+bool add_address(const Glib::RefPtr<SocketAddress>& address, SocketType type, SocketProtocol protocol, const Glib::RefPtr<Glib::Object>& source_object, Glib::RefPtr<SocketAddress>& effective_address);
   _IGNORE(g_socket_listener_add_address)
 
   _WRAP_METHOD_DOCS_ONLY(g_socket_listener_add_address)
-  bool add_address(const Glib::RefPtr<SocketAddress>& address, Socket::Type type, Socket::Protocol protocol, Glib::RefPtr<SocketAddress>& effective_address);
+  bool add_address(const Glib::RefPtr<SocketAddress>& address, SocketType type, SocketProtocol protocol, Glib::RefPtr<SocketAddress>& effective_address);
 
   _WRAP_METHOD(bool add_inet_port(guint16 port, const Glib::RefPtr<Glib::Object>& source_object), g_socket_listener_add_inet_port, errthrow)
 
index 58f3251..990512f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index cc025ca..a21eb18 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/socketlistener.h>
index 931000c..6dfac73 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2008 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 0625461..5ca8f60 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <glibmm/value.h>
+#include <glibmm/listhandle.h>
+
+// unfortunately we need to include the C header for the type traits
+// implementation
+#include <gio/gio.h>
 
 _DEFS(giomm,gio)
 
@@ -55,6 +58,23 @@ public:
 
 };
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+struct SrvTargetListTraits
+{
+  using CppType = Gio::SrvTarget;
+  using CType = const GSrvTarget*;
+  using CTypeNonConst = GSrvTarget*;
+
+  static CType to_c_type(const CppType& item) { return item.gobj(); }
+  static CType to_c_type(CType ptr) { return ptr; }
+  static CppType to_cpp_type(CType item) { return CppType(const_cast<CTypeNonConst>(item), true /* take_copy */); }
+  static void release_c_type(CType item) { g_srv_target_free(const_cast<CTypeNonConst>(item)); }
+};
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+using ListHandle_SrvTarget = Glib::ListHandle<Gio::SrvTarget, SrvTargetListTraits>;
 
 } // namespace Gio
 
index 6e07769..5a8b3d2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index edaa3f7..6352c17 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 58b9f17..8571d6d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index a469007..420d17a 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/tcpconnection.h>
index e9a7f30..48b7686 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index f077f48..ab0bed1 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -78,8 +77,8 @@ public:
   _WRAP_METHOD(void prepend_name(const std::string& iconname), g_themed_icon_prepend_name)
   _WRAP_METHOD(void append_name(const std::string& iconname), g_themed_icon_append_name)
 
-  #m4 _CONVERSION(`const gchar* const*',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> get_names() const, g_themed_icon_get_names)
+  #m4 _CONVERSION(`const gchar* const*',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle get_names() const, g_themed_icon_get_names)
 
   //There are no signals.
 
index 58f3251..990512f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index d14a545..ef23974 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/socketservice.h>
index 2df281e..57fdd6a 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -25,7 +24,7 @@ namespace Gio
 Glib::RefPtr<TlsCertificate>
 TlsCertificate::create_from_pem(const std::string& data, gssize length)
 {
-  return Glib::make_refptr_for_instance<TlsCertificate>(new TlsCertificate(data, length));
+  return Glib::RefPtr<TlsCertificate>(new TlsCertificate(data, length));
 }
 
 } // namesapce Gio
index 80484fb..09c992e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index e18f6c7..c2785a4 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 599a3de..40af030 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index 61f13d9..4ec8d7e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 319c052..bee6d66 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -64,7 +63,10 @@ public:
   _WRAP_METHOD(void set_rehandshake_mode(TlsRehandshakeMode mode), g_tls_connection_set_rehandshake_mode)
   _WRAP_METHOD(TlsRehandshakeMode get_rehandshake_mode() const, g_tls_connection_get_rehandshake_mode)
 
-  _IGNORE(g_tls_connection_set_use_system_certdb, g_tls_connection_get_use_system_certdb)
+  _WRAP_METHOD(void set_use_system_certdb(bool use_system_certdb = true), g_tls_connection_set_use_system_certdb,
+    deprecated "Use set_database() instead.")
+  _WRAP_METHOD(bool get_use_system_certdb() const, g_tls_connection_get_use_system_certdb,
+    deprecated "Use get_database() instead.")
 
   _WRAP_METHOD(Glib::RefPtr<TlsDatabase> get_database(), g_tls_connection_get_database)
   _WRAP_METHOD(Glib::RefPtr<const TlsDatabase> get_database() const, g_tls_connection_get_database, constversion)
@@ -91,7 +93,7 @@ public:
   _WRAP_PROPERTY("peer-certificate-errors", TlsCertificateFlags)
   _WRAP_PROPERTY("rehandshake-mode", TlsRehandshakeMode)
   _WRAP_PROPERTY("require-close-notify", bool)
-  _IGNORE_PROPERTY("use-system-certdb")
+  _WRAP_PROPERTY("use-system-certdb", bool, deprecated "Use property_database() instead.")
 
 #m4 _CONVERSION(`GTlsCertificate*',`const Glib::RefPtr<const TlsCertificate>&',`Glib::wrap($3, true)')
   _WRAP_SIGNAL(bool accept_certificate(const Glib::RefPtr<const TlsCertificate>& peer_cert, TlsCertificateFlags errors), "accept_certificate")
index 2bf254f..e464c17 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
@@ -21,7 +20,3 @@
 #include <giomm/tlscertificate.h>
 #include <giomm/tlsinteraction.h>
 #include "slot_async.h"
-
-
-using VerifyFlags = Gio::TlsDatabase::VerifyFlags;
-using LookupFlags = Gio::TlsDatabase::LookupFlags;
index 0be174a..52d1a25 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -33,6 +32,9 @@ class ByteArray;
 namespace Gio
 {
 
+_WRAP_ENUM(TlsDatabaseVerifyFlags, GTlsDatabaseVerifyFlags)
+_WRAP_ENUM(TlsDatabaseLookupFlags, GTlsDatabaseLookupFlags)
+
 class Cancellable;
 class SocketConnectable;
 class TlsCertificate;
@@ -58,65 +60,64 @@ public:
   //TODO?: Have a constant for the C macro G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER (which is a string)?
   //TODO?: Have a constant for the C macro G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT (which is a string)?
 
-  _WRAP_ENUM(VerifyFlags, GTlsDatabaseVerifyFlags)
-  _WRAP_ENUM(LookupFlags, GTlsDatabaseLookupFlags)
-
-  _WRAP_METHOD(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.} = VerifyFlags::NONE) const, g_tls_database_verify_chain, errthrow)
-  _WRAP_METHOD(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.} = VerifyFlags::NONE) const, g_tls_database_verify_chain_async, slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_METHOD(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseVerifyFlags flags{.} = TLS_DATABASE_VERIFY_NONE) const, g_tls_database_verify_chain, errthrow)
+  _WRAP_METHOD(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseVerifyFlags flags{.} = TLS_DATABASE_VERIFY_NONE) const, g_tls_database_verify_chain_async, slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_METHOD(TlsCertificateFlags verify_chain_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_verify_chain_finish, errthrow)
 
-  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_issuer, errthrow)
-  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificate_issuer, errthrow, constversion)
+  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificate_issuer, errthrow)
+  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE) const, g_tls_database_lookup_certificate_issuer, errthrow, constversion)
 
-  _WRAP_METHOD(void lookup_certificate_issuer_async(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_issuer_async, slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_METHOD(void lookup_certificate_issuer_async(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificate_issuer_async, slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificate_issuer_finish, errthrow)
 
 #m4 _CONVERSION(`GList*',`std::vector< Glib::RefPtr<TlsCertificate> >',`Glib::ListHandler< Glib::RefPtr<TlsCertificate> >::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificates_issued_by, errthrow)
+  _WRAP_METHOD(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = Gio::TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificates_issued_by, errthrow)
 
 #m4 _CONVERSION(`GList*',`std::vector< Glib::RefPtr<const TlsCertificate> >',`Glib::ListHandler< Glib::RefPtr<const TlsCertificate> >::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector< Glib::RefPtr<const TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificates_issued_by, errthrow)
+  _WRAP_METHOD(std::vector< Glib::RefPtr<const TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = Gio::TLS_DATABASE_LOOKUP_NONE) const, g_tls_database_lookup_certificates_issued_by, errthrow)
 
-  _WRAP_METHOD(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificates_issued_by_async, slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_METHOD(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = Gio::TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificates_issued_by_async, slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_METHOD(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificates_issued_by_finish, errthrow)
 
   _WRAP_METHOD(Glib::ustring create_certificate_handle(const Glib::RefPtr<const TlsCertificate>& certificate) const, g_tls_database_create_certificate_handle)
 
-  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_for_handle, errthrow)
-  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificate_for_handle, errthrow, constversion)
+  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificate_for_handle, errthrow)
+  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE) const, g_tls_database_lookup_certificate_for_handle, errthrow, constversion)
 
-  _WRAP_METHOD(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_for_handle_async, slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_METHOD(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.} = TLS_DATABASE_LOOKUP_NONE), g_tls_database_lookup_certificate_for_handle_async, slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificate_for_handle_finish, errthrow)
 
 #m4 _CONVERSION(`GTlsCertificate*',`const Glib::RefPtr<TlsCertificate>&',`Glib::wrap($3, true)')
 #m4 _CONVERSION(`GSocketConnectable*',`const Glib::RefPtr<const SocketConnectable>&',`Glib::wrap($3, true)')
 #m4 _CONVERSION(`GTlsInteraction*',`const Glib::RefPtr<TlsInteraction>&',`Glib::wrap($3, true)')
 
-  _WRAP_VFUNC(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.}) const, "verify_chain", errthrow)
-  _WRAP_VFUNC(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.}) const, "verify_chain_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseVerifyFlags flags{.}) const, "verify_chain", errthrow)
+  _WRAP_VFUNC(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseVerifyFlags flags{.}) const, "verify_chain_async", slot_name slot, slot_callback SignalProxy_async_callback)
 
 #m4 _CONVERSION(`GAsyncResult*',`const Glib::RefPtr<AsyncResult>&',`Glib::wrap($3, true)')
 
   _WRAP_VFUNC(TlsCertificateFlags verify_chain_finish(const Glib::RefPtr<AsyncResult>& result), "verify_chain_finish", errthrow)
 
+dnl// create_certificate_handle_vfunc() shall return a newly allocated string.
 #m4 _CONVERSION(`GTlsCertificate*',`const Glib::RefPtr<const TlsCertificate>&',`Glib::wrap($3, true)')
+#m4 _CONVERSION(`gchar*',`Glib::ustring',`Glib::convert_return_gchar_ptr_to_ustring($3)')
   _WRAP_VFUNC(Glib::ustring create_certificate_handle(const Glib::RefPtr<const TlsCertificate>& certificate) const, "create_certificate_handle")
 
 #m4 _CONVERSION(`Glib::RefPtr<TlsCertificate>',`GTlsCertificate*',`G_TLS_CERTIFICATE(g_object_ref(Glib::unwrap($3)))')
 
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_for_handle", errthrow)
-  _WRAP_VFUNC(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_for_handle_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificate_for_handle", errthrow)
+  _WRAP_VFUNC(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificate_for_handle_async", slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_for_handle_finish", errthrow)
 
-  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_issuer", errthrow)
-  _WRAP_VFUNC(void lookup_certificate_issuer_async(const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificate_issuer_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificate_issuer", errthrow)
+  _WRAP_VFUNC(void lookup_certificate_issuer_async(const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificate_issuer_async", slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_issuer_finish", errthrow)
 
 #m4 _CONVERSION(`std::vector< Glib::RefPtr<TlsCertificate> >',`GList*',`g_list_copy(Glib::ListHandler< Glib::RefPtr<TlsCertificate> >::vector_to_list($3).data())')
 #m4 _CONVERSION(`GByteArray*',`const Glib::RefPtr<Glib::ByteArray>&',`Glib::wrap($3, true)')
 
-  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificates_issued_by", errthrow)
-  _WRAP_VFUNC(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.}), "lookup_certificates_issued_by_async", slot_name slot, slot_callback SignalProxy_async_callback)
+  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificates_issued_by", errthrow)
+  _WRAP_VFUNC(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction, const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, TlsDatabaseLookupFlags flags{.}), "lookup_certificates_issued_by_async", slot_name slot, slot_callback SignalProxy_async_callback)
   _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(const Glib::RefPtr<AsyncResult>& result), "lookup_certificates_issued_by_finish", errthrow)
 };
 
index d76f332..eb7ed06 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 08650c5..bed39f8 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/tlsdatabase.h>
index a55675f..2252149 100644 (file)
@@ -1,3 +1,4 @@
+
 /* Copyright (C) 2012 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -11,8 +12,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 1f48904..09bb2cb 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 5a4c31c..8cba83c 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
-
-using Flags = Gio::TlsPassword::Flags;
index 7e2ec17..28a5413 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
@@ -23,6 +22,7 @@ _PINCLUDE(glibmm/private/object_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(TlsPasswordFlags, GTlsPasswordFlags)
 
 /** TlsPassword - TLS Passwords for prompting.
  * Holds a password used in TLS.
@@ -32,15 +32,12 @@ class TlsPassword : public Glib::Object
 {
   _CLASS_GOBJECT(TlsPassword, GTlsPassword, G_TLS_PASSWORD, Glib::Object, GObject)
 
-public:
-  _WRAP_ENUM(Flags, GTlsPasswordFlags)
-
 protected:
-  _WRAP_CTOR(TlsPassword(const Glib::ustring& description{.}, Flags flags{.} = Flags::NONE), g_tls_password_new)
+  _WRAP_CTOR(TlsPassword(const Glib::ustring& description{.}, TlsPasswordFlags flags{.} = Gio::TLS_PASSWORD_NONE), g_tls_password_new)
 
 public:
   _WRAP_METHOD_DOCS_ONLY(g_tls_password_new)
-  _WRAP_CREATE(const Glib::ustring& description{.}, Flags flags{.} = Flags::NONE)
+  _WRAP_CREATE(const Glib::ustring& description{.}, TlsPasswordFlags flags{.} = Gio::TLS_PASSWORD_NONE)
 
   _WRAP_METHOD(const guchar* get_value(gsize& length{?}) const, g_tls_password_get_value)
 
@@ -53,14 +50,14 @@ public:
   _WRAP_METHOD(Glib::ustring get_description() const, g_tls_password_get_description)
   _WRAP_METHOD(void set_description(const Glib::ustring& description), g_tls_password_set_description)
 
-  _WRAP_METHOD(Flags get_flags() const, g_tls_password_get_flags)
-  _WRAP_METHOD(void set_flags(Flags flags), g_tls_password_set_flags)
+  _WRAP_METHOD(TlsPasswordFlags get_flags() const, g_tls_password_get_flags)
+  _WRAP_METHOD(void set_flags(TlsPasswordFlags flags), g_tls_password_set_flags)
 
   _WRAP_METHOD(Glib::ustring get_warning() const, g_tls_password_get_warning)
   _WRAP_METHOD(void set_warning(const Glib::ustring& warning), g_tls_password_set_warning)
 
   _WRAP_PROPERTY("description", Glib::ustring)
-  _WRAP_PROPERTY("flags", Flags)
+  _WRAP_PROPERTY("flags", TlsPasswordFlags)
   _WRAP_PROPERTY("warning", Glib::ustring)
 
 #m4 _CONVERSION(`gsize*', `gsize&', `*($3)')
index 4f97609..01cfc85 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index dbf1a41..a9b52a4 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
index 20a3cde..3b9929c 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 8134ad6..1ddd1d2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 Jonathon Jongsma
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 47a59dd..f3fc155 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gunixcredentialsmessage.h>
index 1ad9523..9ba8239 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/socketcontrolmessage.h>
index d24555c..f35d700 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gunixfdlist.h>
@@ -21,7 +20,7 @@
 namespace Gio
 {
 
-UnixFDList::UnixFDList(const std::vector<int>&  fds)
+UnixFDList::UnixFDList(const Glib::ArrayHandle<int>& fds)
 : // Mark this class as non-derived to allow C++ vfuncs to be skipped.
   Glib::ObjectBase(nullptr),
   // g_unix_fd_list_new_from_array() must be called.
@@ -29,11 +28,11 @@ UnixFDList::UnixFDList(const std::vector<int>&  fds)
   // _CONSTRUCT() + g_unit_fd_list_append() is not an alternative.
   // g_unit_fd_list_append() duplicates the file descriptor,
   // but g_unix_fd_list_new_from_array() does not.
-  Glib::Object((GObject*)g_unix_fd_list_new_from_array(Glib::ArrayHandler<int>::vector_to_array(fds).data(), fds.size()))
+  Glib::Object((GObject*)g_unix_fd_list_new_from_array(fds.data(), fds.size()))
 {
 }
 
-UnixFDList::UnixFDList(const std::vector<int>&  fds, int n_fds)
+UnixFDList::UnixFDList(const Glib::ArrayHandle<int>& fds, int n_fds)
 : // Mark this class as non-derived to allow C++ vfuncs to be skipped.
   Glib::ObjectBase(nullptr),
   // g_unix_fd_list_new_from_array() must be called.
@@ -41,28 +40,28 @@ UnixFDList::UnixFDList(const std::vector<int>&  fds, int n_fds)
   // _CONSTRUCT() + g_unit_fd_list_append() is not an alternative.
   // g_unit_fd_list_append() duplicates the file descriptor,
   // but g_unix_fd_list_new_from_array() does not.
-  Glib::Object((GObject*)g_unix_fd_list_new_from_array(Glib::ArrayHandler<int>::vector_to_array(fds).data(), n_fds))
+  Glib::Object((GObject*)g_unix_fd_list_new_from_array(fds.data(), n_fds))
 {
 }
 
-const std::vector<int>
+const Glib::ArrayHandle<int>
 UnixFDList::peek_fds() const
 {
   int length = 0;
   const auto fds = g_unix_fd_list_peek_fds(const_cast<GUnixFDList*>(gobj()), &length);
   // The array is terminated with a -1, but that terminating element is
   // not included in the length that g_unix_fd_list_peek_fds() returns.
-  return Glib::ArrayHandler<int>::array_to_vector(fds, length, Glib::OWNERSHIP_NONE);
+  return Glib::ArrayHandle<int>(fds, length, Glib::OWNERSHIP_NONE);
 }
 
-std::vector<int>
+Glib::ArrayHandle<int>
 UnixFDList::steal_fds()
 {
   int length = 0;
   const auto fds = g_unix_fd_list_steal_fds(gobj(), &length);
   // The array is terminated with a -1, but that terminating element is
   // not included in the length that g_unix_fd_list_steal_fds() returns.
-  return Glib::ArrayHandler<int>::array_to_vector(fds, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<int>(fds, length, Glib::OWNERSHIP_DEEP);
 }
 
 } // namespace Gio
index b85804f..838793f 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
+#include <glibmm/arrayhandle.h>
 
 _DEFS(giomm,gio)
 _PINCLUDE(glibmm/private/object_p.h)
@@ -43,9 +43,9 @@ protected:
   _CTOR_DEFAULT
   _IGNORE(g_unix_fd_list_new)
 
-  explicit UnixFDList(const std::vector<int>&  fds);
+  explicit UnixFDList(const Glib::ArrayHandle<int>& fds);
 
-  explicit UnixFDList(const std::vector<int>&  fds, int n_fds);
+  explicit UnixFDList(const Glib::ArrayHandle<int>& fds, int n_fds);
   _IGNORE(g_unix_fd_list_new_from_array)
 
 public:
@@ -60,10 +60,10 @@ public:
    * @param fds The list of file descriptors to use for creation.
    * @return A new UnixFDList.
    */
-  _WRAP_CREATE(const std::vector<int>&  fds)
+  _WRAP_CREATE(const Glib::ArrayHandle<int>& fds)
 
   _WRAP_METHOD_DOCS_ONLY(g_unix_fd_list_new_from_array)
-  _WRAP_CREATE(const std::vector<int>&  fds, int n_fds)
+  _WRAP_CREATE(const Glib::ArrayHandle<int>& fds, int n_fds)
 
   _WRAP_METHOD(int get_length() const, g_unix_fd_list_get_length)
   _WRAP_METHOD(int get(int index) const, g_unix_fd_list_get, errthrow)
@@ -77,7 +77,7 @@ public:
    *
    * @newin{2,28}
    */
-  const std::vector<int> peek_fds() const;
+  const Glib::ArrayHandle<int> peek_fds() const;
   _IGNORE(g_unix_fd_list_peek_fds)
 
   /** Returns the array of file descriptors that is contained in this object.
@@ -92,7 +92,7 @@ public:
    *
    * @newin{2,28}
    */
-  std::vector<int> steal_fds();
+  Glib::ArrayHandle<int> steal_fds();
   _IGNORE(g_unix_fd_list_steal_fds)
 
   _WRAP_METHOD_DOCS_ONLY(g_unix_fd_list_append)
index a88cf4f..b7b6f55 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gunixfdmessage.h>
 namespace Gio
 {
 
-std::vector<int>
+Glib::ArrayHandle<int>
 UnixFDMessage::steal_fds()
 {
   int length = 0;
   const auto fds = g_unix_fd_message_steal_fds(gobj(), &length);
   // The array is terminated with a -1, but that terminating element is
   // not included in the length that g_unix_fd_message_steal_fds() returns.
-  return Glib::ArrayHandler<int>::array_to_vector(fds, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<int>(fds, length, Glib::OWNERSHIP_DEEP);
 }
 
 } // namespace Gio
index f25dacc..f418f94 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <glibmm/arrayhandle.h>
 #include <giomm/socketcontrolmessage.h>
 
 _DEFS(giomm,gio)
@@ -71,7 +71,7 @@ public:
    *
    * @newin{2,28}
    */
-  std::vector<int> steal_fds();
+  Glib::ArrayHandle<int> steal_fds();
   _IGNORE(g_unix_fd_message_steal_fds)
 
   _WRAP_PROPERTY("fd-list", Glib::RefPtr<UnixFDList>)
index 61fd7b0..30fcbd2 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index afb5111..de00b22 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/inputstream.h>
index 98fab0c..12a276f 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 97c27d5..7c8f2f6 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 1ecd417..5e6d1de 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 3b98cc4..be49ac4 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/outputstream.h>
index 8b5b480..9c8b042 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2010 The giomm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gunixsocketaddress.h>
 
-using Type = Gio::UnixSocketAddress::Type;
-
 namespace Gio
 {
 
 Glib::RefPtr<UnixSocketAddress>
-UnixSocketAddress::create(const std::string& path, Type type, int path_len)
+UnixSocketAddress::create(const std::string& path, UnixSocketAddressType type, int path_len)
 {
   return Glib::wrap(reinterpret_cast<GUnixSocketAddress*>(g_unix_socket_address_new_with_type(
     path.c_str(), path_len, static_cast<GUnixSocketAddressType>(type))));
index 2e1d754..5cfdc94 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -25,6 +24,8 @@ _PINCLUDE(giomm/private/socketaddress_p.h)
 namespace Gio
 {
 
+_WRAP_ENUM(UnixSocketAddressType, GUnixSocketAddressType)
+
 class ByteArray;
 
 /** UnixSocketAddress - UNIX SocketAddress.
@@ -50,15 +51,12 @@ class UnixSocketAddress
   _CLASS_GOBJECT(UnixSocketAddress, GUnixSocketAddress, G_UNIX_SOCKET_ADDRESS, SocketAddress, GSocketAddress)
   _GTKMMPROC_WIN32_NO_WRAP
 
-public:
-  _WRAP_ENUM(Type, GUnixSocketAddressType)
-
 protected:
  _WRAP_CTOR(UnixSocketAddress(const std::string& path), g_unix_socket_address_new)
 
  //TODO: Possibly add when g_unix_socket_address_new_with_type() does not do
  //more than call g_object_new() (maybe file a bug).
- //_WRAP_CTOR(UnixSocketAddress(const std::string& path, int path_len = -1, Type type = Type::PATH), g_unix_socket_address_new_with_type)
+ //_WRAP_CTOR(UnixSocketAddress(const std::string& path, int path_len = -1, UnixSocketAddressType type = Gio::UNIX_SOCKET_ADDRESS_PATH), g_unix_socket_address_new_with_type)
 
 public:
  _WRAP_METHOD_DOCS_ONLY(g_unix_socket_address_new)
@@ -67,24 +65,23 @@ public:
  //TODO: Add when the above constructor is included, removing the handwritten
  //create() method for it below.
  //_WRAP_METHOD_DOCS_ONLY(g_unix_socket_address_new_with_type)
- //_WRAP_CREATE(const std::string& path, int path_len = -1, Type type = Type::PATH)
+ //_WRAP_CREATE(const std::string& path, int path_len = -1, UnixSocketAddressType type = Gio::UNIX_SOCKET_ADDRESS_PATH)
 
  _WRAP_METHOD_DOCS_ONLY(g_unix_socket_address_new_with_type)
  static Glib::RefPtr<UnixSocketAddress> create(const std::string& path,
-   Type type = Type::ABSTRACT,
-   int path_len = -1);
+   UnixSocketAddressType type, int path_len = -1);
 
  // Deprecated.
  _IGNORE(g_unix_socket_address_get_is_abstract)
 
- _WRAP_METHOD(Type get_address_type() const, g_unix_socket_address_get_address_type)
+ _WRAP_METHOD(UnixSocketAddressType get_address_type() const, g_unix_socket_address_get_address_type)
  _WRAP_METHOD(std::string get_path() const, g_unix_socket_address_get_path)
  _IGNORE(g_unix_socket_address_get_path_len)
 
  _WRAP_METHOD(static bool abstract_names_supported(), g_unix_socket_address_abstract_names_supported)
 
-  _IGNORE_PROPERTY("abstract")
-  _WRAP_PROPERTY("address-type", Type)
+  _WRAP_PROPERTY("abstract", bool, deprecated "Use property_address_type() instead, which distinguishes between zero-padded and non-zero-padded abstract addresses.")
+  _WRAP_PROPERTY("address-type", UnixSocketAddressType)
   _WRAP_PROPERTY("path", std::string)
   _WRAP_PROPERTY("path-as-array", Glib::RefPtr<ByteArray>)
 };
index 9ba1898..2d1d01a 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
@@ -29,7 +26,7 @@ namespace Gio
 
 void
 Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -42,7 +39,7 @@ Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsy
 
 void
 Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  Mount::MountFlags flags)
+  MountMountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -55,7 +52,7 @@ Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsy
 }
 
 void
-Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, Mount::MountFlags flags)
+Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, MountMountFlags flags)
 {
   g_volume_mount(gobj(), static_cast<GMountMountFlags>(flags), Glib::unwrap(mount_operation),
     nullptr, // cancellable
@@ -63,7 +60,7 @@ Volume::mount(const Glib::RefPtr<MountOperation>& mount_operation, Mount::MountF
 }
 
 void
-Volume::mount(Mount::MountFlags flags)
+Volume::mount(MountMountFlags flags)
 {
   g_volume_mount(gobj(), static_cast<GMountMountFlags>(flags), nullptr,
     nullptr, // cancellable
@@ -72,7 +69,7 @@ Volume::mount(Mount::MountFlags flags)
 
 void
 Volume::eject(
-  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -85,7 +82,7 @@ Volume::eject(
 }
 
 void
-Volume::eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
+Volume::eject(const SlotAsyncReady& slot, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -99,7 +96,7 @@ Volume::eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags)
 }
 
 void
-Volume::eject(Mount::UnmountFlags flags)
+Volume::eject(MountUnmountFlags flags)
 {
   g_volume_eject_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     nullptr, // mount_operation
@@ -110,7 +107,7 @@ Volume::eject(Mount::UnmountFlags flags)
 
 void
 Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags)
+  const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -124,7 +121,7 @@ Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsy
 
 void
 Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot,
-  Mount::UnmountFlags flags)
+  MountUnmountFlags flags)
 {
   // Create a copy of the slot.
   // A pointer to it will be passed through the callback's data parameter
@@ -138,7 +135,7 @@ Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsy
 }
 
 void
-Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags)
+Volume::eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags)
 {
   g_volume_eject_with_operation(gobj(), static_cast<GMountUnmountFlags>(flags),
     Glib::unwrap(mount_operation),
index f6339c9..a1488d8 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <giomm/file.h>
@@ -98,7 +97,7 @@ public:
    * @param cancellable A cancellable object which can be used to cancel the operation.
    * @param flags Flags affecting the operation.
    */
-  void mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a volume.
    * This is an asynchronous operation, and is finished by calling mount_finish() with the AsyncResult data returned in the callback slot.
@@ -107,20 +106,20 @@ public:
    * @param slot A callback which will be called when the operation is completed or canceled.
    * @param flags Flags affecting the operation.
    */
-  void mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a volume.
    *
    * @param mount_operation A mount operation.
    * @param flags Flags affecting the operation.
    */
-  void mount(const Glib::RefPtr<MountOperation>& mount_operation, Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount(const Glib::RefPtr<MountOperation>& mount_operation, MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   /** Mounts a volume.
    *
    * @param flags Flags affecting the operation.
    */
-  void mount(Mount::MountFlags flags = Mount::MountFlags::NONE);
+  void mount(MountMountFlags flags = MOUNT_MOUNT_NONE);
 
   _IGNORE(g_volume_mount)
 
@@ -128,12 +127,12 @@ public:
                g_volume_mount_finish,
                errthrow)
 
-  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
-  void eject(const Glib::RefPtr<MountOperation>& mount_operation, Mount::UnmountFlags flags = Mount::UnmountFlags::NONE);
+  void eject(const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, const Glib::RefPtr<Cancellable>& cancellable, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, const SlotAsyncReady& slot, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
+  void eject(const Glib::RefPtr<MountOperation>& mount_operation, MountUnmountFlags flags = MOUNT_UNMOUNT_NONE);
   _IGNORE(g_volume_eject)
   _IGNORE(g_volume_eject_with_operation)
 
@@ -145,8 +144,8 @@ public:
   _WRAP_METHOD(std::string get_identifier(const std::string& kind) const,
                g_volume_get_identifier)
 
-  #m4 _CONVERSION(`char**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(std::vector<Glib::ustring> enumerate_identifiers() const,
+  #m4 _CONVERSION(`char**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(Glib::StringArrayHandle enumerate_identifiers() const,
                g_volume_enumerate_identifiers)
 
   _WRAP_METHOD(Glib::RefPtr<File> get_activation_root(), g_volume_get_activation_root)
index 48ac82a..59e4bd5 100644 (file)
@@ -1,5 +1,3 @@
-// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-
 /* Copyright (C) 2007 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 6eb5c65..24c62fb 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _CONFIGINCLUDE(giommconfig.h)
@@ -43,19 +42,20 @@ public:
 
   _WRAP_METHOD(static Glib::RefPtr<VolumeMonitor> get(), g_volume_monitor_get)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Drive>>',`Glib::ListHandler<Glib::RefPtr<Drive>>::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<Drive>> get_connected_drives(), g_volume_monitor_get_connected_drives)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Drive> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Drive> > get_connected_drives(), g_volume_monitor_get_connected_drives)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Volume>>',`Glib::ListHandler<Glib::RefPtr<Volume>>::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<Volume>> get_volumes(), g_volume_monitor_get_volumes)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Volume> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Volume> > get_volumes(), g_volume_monitor_get_volumes)
 
-#m4 _CONVERSION(`GList*',`std::vector<Glib::RefPtr<Mount>>',`Glib::ListHandler<Glib::RefPtr<Mount>>::list_to_vector($3, Glib::OWNERSHIP_SHALLOW)')
-  _WRAP_METHOD(std::vector<Glib::RefPtr<Mount>> get_mounts(), g_volume_monitor_get_mounts)
+#m4 _CONVERSION(`GList*',`Glib::ListHandle< Glib::RefPtr<Mount> >',`$2($3, Glib::OWNERSHIP_SHALLOW)')
+  _WRAP_METHOD(Glib::ListHandle< Glib::RefPtr<Mount> > get_mounts(), g_volume_monitor_get_mounts)
 
   _WRAP_METHOD(Glib::RefPtr<Volume> get_volume_for_uuid(const std::string& uuid), g_volume_monitor_get_volume_for_uuid, refreturn)
   _WRAP_METHOD(Glib::RefPtr<Mount> get_mount_for_uuid(const std::string& uuid), g_volume_monitor_get_mount_for_uuid, refreturn)
 
-  _IGNORE(g_volume_monitor_adopt_orphan_mount)
+  _WRAP_METHOD(static Glib::RefPtr<Volume> adopt_orphan_mount(const Glib::RefPtr<Mount>& mount), g_volume_monitor_adopt_orphan_mount,
+    deprecated "Instead of using this function, create shadow mounts with the URI of the mount you intend to adopt.")
 
 #m4 _CONVERSION(`GVolume*',`const Glib::RefPtr<Volume>&',`Glib::wrap($3, true)')
   _WRAP_SIGNAL(void volume_added(const Glib::RefPtr<Volume>& volume), volume_added)
@@ -73,8 +73,9 @@ public:
   _WRAP_SIGNAL(void drive_disconnected(const Glib::RefPtr<Drive>& drive), drive_disconnected)
   _WRAP_SIGNAL(void drive_changed(const Glib::RefPtr<Drive>& drive), drive_changed)
 
-  _WRAP_SIGNAL(void drive_eject_button(const Glib::RefPtr<Drive>& drive), drive_eject_button)
-  _WRAP_SIGNAL(void drive_stop_button(const Glib::RefPtr<Drive>& drive), drive_stop_button)
+  //TODO: Remove no_default_handler when we can break ABI:
+  _WRAP_SIGNAL(void drive_eject_button(const Glib::RefPtr<Drive>& drive), drive_eject_button, no_default_handler)
+  _WRAP_SIGNAL(void drive_stop_button(const Glib::RefPtr<Drive>& drive), drive_stop_button, no_default_handler)
 
   //TODO: Use ListHandle?
   //_WRAP_VFUNC(GList* get_volumes(), get_volumes)
index 4366e58..37de341 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 223b617..58e7cc8 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index 4366e58..37de341 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <gio/gio.h>
index 7ae8166..aab9763 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
index a9e90e0..ac753ce 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef _GLIBMM_H
  *
  * If your  source file is @c program.cc, you can compile it with:
  * @code
- * g++ program.cc -o program  `pkg-config --cflags --libs glibmm-2.54 giomm-2.54`
+ * g++ program.cc -o program  `pkg-config --cflags --libs glibmm-2.4 giomm-2.4`
  * @endcode
  *
  * Alternatively, if using autoconf, use the following in @c configure.ac:
  * @code
- * PKG_CHECK_MODULES([GLIBMM], [glibmm-2.54 giomm-2.54])
+ * PKG_CHECK_MODULES([GLIBMM], [glibmm-2.4 giomm-2.4])
  * @endcode
  * Then use the generated @c GLIBMM_CFLAGS and @c GLIBMM_LIBS variables in the
  * project Makefile.am files. For example:
 //#include <glibmm/i18n.h> //This must be included by the application, after system headers such as
 //<iostream>.
 
+// Include this first because we need it to be the first thing to include <glib.h>,
+// so we can do an undef trick to still use deprecated API in the header:
+#include <glibmm/thread.h>
+
+#include <glibmm/threads.h>
+
+#include <glibmm/arrayhandle.h>
 #include <glibmm/balancedtree.h>
 #include <glibmm/base64.h>
 #ifndef GLIBMM_INCLUDED_FROM_WRAP_INIT_CC
 #include <glibmm/exception.h>
 #include <glibmm/exceptionhandler.h>
 #include <glibmm/fileutils.h>
+#include <glibmm/helperlist.h>
 #include <glibmm/interface.h>
 #include <glibmm/iochannel.h>
 #include <glibmm/init.h>
 #include <glibmm/keyfile.h>
+#include <glibmm/streamiochannel.h>
+#include <glibmm/listhandle.h>
 #include <glibmm/main.h>
 #include <glibmm/markup.h>
 #include <glibmm/miscutils.h>
 #include <glibmm/shell.h>
 #include <glibmm/signalproxy_connectionnode.h>
 #include <glibmm/signalproxy.h>
+#include <glibmm/slisthandle.h>
 #include <glibmm/spawn.h>
 #include <glibmm/stringutils.h>
+#include <glibmm/threadpool.h>
 #include <glibmm/timer.h>
 #include <glibmm/timeval.h>
 #include <glibmm/timezone.h>
 #include <glibmm/uriutils.h>
 #include <glibmm/ustring.h>
 #include <glibmm/value.h>
+#include <glibmm/valuearray.h>
 #include <glibmm/variant.h>
 #include <glibmm/variantdict.h>
 #include <glibmm/variantiter.h>
 #include <glibmm/varianttype.h>
 #include <glibmm/vectorutils.h>
+#include <glibmm/weakref.h>
 #include <glibmm/wrap.h>
 
 #endif /* _GLIBMM_H */
index 25e6c16..b08f62d 100644 (file)
@@ -16,6 +16,6 @@ Name: glibmm
 Description: C++ wrapper for GLib
 Version: @PACKAGE_VERSION@
 URL: http://www.gtkmm.org/
-Requires: gobject-2.0 sigc++-3.0
+Requires: gobject-2.0 sigc++-2.0
 Libs: -L${libdir} -lglibmm-@GLIBMM_API_VERSION@
 Cflags: -I${includedir}/@GLIBMM_MODULE_NAME@ -I${libdir}/@GLIBMM_MODULE_NAME@/include
diff --git a/glib/glibmm/arrayhandle.cc b/glib/glibmm/arrayhandle.cc
new file mode 100644 (file)
index 0000000..3a388b6
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2011 The glibmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/arrayhandle.h>
+
+namespace Glib
+{
+
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::~ArrayHandle() noexcept
+{
+  if (parray_ && ownership_ != Glib::OWNERSHIP_NONE)
+  {
+    if (ownership_ != Glib::OWNERSHIP_SHALLOW)
+    {
+      // Deep ownership: release each container element.
+      const CType* const pend = parray_ + size_;
+      for (const CType* p = parray_; p != pend; ++p)
+        Tr::release_c_type(*p);
+    }
+    g_free(const_cast<CType*>(parray_));
+  }
+}
+
+} // namespace Glib
diff --git a/glib/glibmm/arrayhandle.h b/glib/glibmm/arrayhandle.h
new file mode 100644 (file)
index 0000000..735b661
--- /dev/null
@@ -0,0 +1,754 @@
+#ifndef _GLIBMM_ARRAYHANDLE_H
+#define _GLIBMM_ARRAYHANDLE_H
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+#include <glibmm/containerhandle_shared.h>
+
+namespace Glib
+{
+
+namespace Container_Helpers
+{
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/* Count the number of elements in a 0-terminated sequence.
+ */
+template <class T>
+inline std::size_t
+compute_array_size(const T* array)
+{
+  const T* pend = array;
+
+  while (*pend)
+    ++pend;
+
+  return (pend - array);
+}
+
+/* Allocate and fill a 0-terminated array.  The size argument
+ * specifies the number of elements in the input sequence.
+ */
+template <class For, class Tr>
+typename Tr::CType*
+create_array(For pbegin, std::size_t size, Tr)
+{
+  using CType = typename Tr::CType;
+
+  CType* const array = static_cast<CType*>(g_malloc((size + 1) * sizeof(CType)));
+  CType* const array_end = array + size;
+
+  for (CType* pdest = array; pdest != array_end; ++pdest)
+  {
+    // Use & to force a warning if the iterator returns a temporary object.
+    *pdest = Tr::to_c_type(*&*pbegin);
+    ++pbegin;
+  }
+
+  *array_end = CType();
+  return array;
+}
+
+template <class For>
+gboolean*
+create_bool_array(For pbegin, std::size_t size)
+{
+  gboolean* const array(static_cast<gboolean*>(g_malloc((size + 1) * sizeof(gboolean))));
+  gboolean* const array_end(array + size);
+
+  for (gboolean* pdest(array); pdest != array_end; ++pdest)
+  {
+    *pdest = *pbegin;
+    ++pbegin;
+  }
+
+  *array_end = false;
+  return array;
+}
+
+/* Convert from any container that supports forward
+ * iterators and has a size() method.
+ */
+template <class Tr, class Cont>
+struct ArraySourceTraits
+{
+  using CType = typename Tr::CType;
+
+  static std::size_t get_size(const Cont& cont) { return cont.size(); }
+
+  static const CType* get_data(const Cont& cont, std::size_t size)
+  {
+    return Glib::Container_Helpers::create_array(cont.begin(), size, Tr());
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+// source traits for bools.
+template <class Cont>
+struct BoolArraySourceTraits
+{
+  using CType = gboolean;
+
+  static std::size_t get_size(const Cont& cont) { return cont.size(); }
+
+  static const CType* get_data(const Cont& cont, std::size_t size)
+  {
+    return Glib::Container_Helpers::create_bool_array(cont.begin(), size);
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+/* Convert from a 0-terminated array.  The Cont argument must be a pointer
+ * to the first element.  Note that only arrays of the C type are supported.
+ */
+template <class Tr, class Cont>
+struct ArraySourceTraits<Tr, Cont*>
+{
+  using CType = typename Tr::CType;
+
+  static std::size_t get_size(const CType* array)
+  {
+    return (array) ? Glib::Container_Helpers::compute_array_size(array) : 0;
+  }
+
+  static const CType* get_data(const CType* array, std::size_t) { return array; }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_NONE;
+};
+
+template <class Tr, class Cont>
+struct ArraySourceTraits<Tr, const Cont*> : ArraySourceTraits<Tr, Cont*>
+{
+};
+
+/* Convert from a 0-terminated array.  The Cont argument must be a pointer
+ * to the first element.  Note that only arrays of the C type are supported.
+ * For consistency, the array must be 0-terminated, even though the array
+ * size is known at compile time.
+ */
+template <class Tr, class Cont, std::size_t N>
+struct ArraySourceTraits<Tr, Cont[N]>
+{
+  using CType = typename Tr::CType;
+
+  static std::size_t get_size(const CType*) { return (N - 1); }
+
+  static const CType* get_data(const CType* array, std::size_t) { return array; }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_NONE;
+};
+
+template <class Tr, class Cont, std::size_t N>
+struct ArraySourceTraits<Tr, const Cont[N]> : ArraySourceTraits<Tr, Cont[N]>
+{
+};
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+/**
+ * @ingroup ContHelpers
+ */
+template <class Tr>
+class ArrayHandleIterator
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using iterator_category = std::random_access_iterator_tag;
+  using value_type = CppType;
+  using difference_type = std::ptrdiff_t;
+  using reference = value_type;
+  using pointer = void;
+
+  explicit inline ArrayHandleIterator(const CType* pos);
+
+  inline value_type operator*() const;
+  inline value_type operator[](difference_type offset) const;
+
+  inline ArrayHandleIterator<Tr>& operator++();
+  inline const ArrayHandleIterator<Tr> operator++(int);
+  // these are needed by msvc 2005 when using deque.
+  inline ArrayHandleIterator<Tr>& operator--();
+  inline const ArrayHandleIterator<Tr> operator--(int);
+
+  // All this random access stuff is only there because STL algorithms
+  // usually have optimized specializations for random access iterators,
+  // and we don't want to give away efficiency for nothing.
+  //
+  inline ArrayHandleIterator<Tr>& operator+=(difference_type rhs);
+  inline ArrayHandleIterator<Tr>& operator-=(difference_type rhs);
+  inline const ArrayHandleIterator<Tr> operator+(difference_type rhs) const;
+  inline const ArrayHandleIterator<Tr> operator-(difference_type rhs) const;
+  inline difference_type operator-(const ArrayHandleIterator<Tr>& rhs) const;
+
+  inline bool operator==(const ArrayHandleIterator<Tr>& rhs) const;
+  inline bool operator!=(const ArrayHandleIterator<Tr>& rhs) const;
+  inline bool operator<(const ArrayHandleIterator<Tr>& rhs) const;
+  inline bool operator>(const ArrayHandleIterator<Tr>& rhs) const;
+  inline bool operator<=(const ArrayHandleIterator<Tr>& rhs) const;
+  inline bool operator>=(const ArrayHandleIterator<Tr>& rhs) const;
+
+private:
+  const CType* pos_;
+};
+
+} // namespace Container_Helpers
+
+// TODO: When we can break ABI, remove this and replace uses of it with std::vector.
+// We cannot deprecate it yet, because we cannot easily deprecate methods that use it
+//- for instance, we cannot just override methods that use it as a return type.
+
+/** This is an intermediate type. When a method takes this, or returns this, you
+ * should use a standard C++ container of your choice, such as std::list or
+ * std::vector.
+ *
+ * However, this is not used in new API. We now prefer to just use std::vector,
+ * which is less flexibile, but makes the API clearer.
+ *
+ * @ingroup ContHandles
+ */
+template <class T, class Tr = Glib::Container_Helpers::TypeTraits<T>>
+class ArrayHandle
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using value_type = CppType;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using const_iterator = Glib::Container_Helpers::ArrayHandleIterator<Tr>;
+  using iterator = Glib::Container_Helpers::ArrayHandleIterator<Tr>;
+
+  template <class Cont>
+  inline ArrayHandle(const Cont& container);
+
+  // Take over ownership of an array created by GTK+ functions.
+  inline ArrayHandle(const CType* array, std::size_t array_size, Glib::OwnershipType ownership);
+  inline ArrayHandle(const CType* array, Glib::OwnershipType ownership);
+
+  // Copying clears the ownership flag of the source handle.
+  inline ArrayHandle(const ArrayHandle<T, Tr>& other);
+
+  ~ArrayHandle() noexcept;
+
+  inline const_iterator begin() const;
+  inline const_iterator end() const;
+
+  template <class U>
+  inline operator std::vector<U>() const;
+  template <class U>
+  inline operator std::deque<U>() const;
+  template <class U>
+  inline operator std::list<U>() const;
+
+  template <class Cont>
+  inline void assign_to(Cont& container) const;
+
+  template <class Out>
+  inline void copy(Out pdest) const;
+
+  inline const CType* data() const;
+  inline std::size_t size() const;
+  inline bool empty() const;
+
+private:
+  std::size_t size_;
+  const CType* parray_;
+  mutable Glib::OwnershipType ownership_;
+
+  // No copy assignment.
+  ArrayHandle<T, Tr>& operator=(const ArrayHandle<T, Tr>&);
+};
+
+template <>
+class ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>
+{
+public:
+  using Me = ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>;
+  using Tr = Container_Helpers::TypeTraits<bool>;
+
+  using CppType = Tr::CppType;
+  using CType = Tr::CType;
+
+  using value_type = CppType;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using const_iterator = Glib::Container_Helpers::ArrayHandleIterator<Tr>;
+  using iterator = Glib::Container_Helpers::ArrayHandleIterator<Tr>;
+
+  template <class Cont>
+  inline ArrayHandle(const Cont& container);
+
+  // Take over ownership of an array created by GTK+ functions.
+  inline ArrayHandle(const CType* array, std::size_t array_size, Glib::OwnershipType ownership);
+  inline ArrayHandle(const CType* array, Glib::OwnershipType ownership);
+
+  // Copying clears the ownership flag of the source handle.
+  inline ArrayHandle(const Me& other);
+
+  ~ArrayHandle() noexcept;
+
+  inline const_iterator begin() const;
+  inline const_iterator end() const;
+
+  // this is inside class definition, so msvc 2005, 2008 and 2010 can compile this code.
+  template <class U>
+  inline operator std::vector<U>() const
+  {
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+    return std::vector<U>(this->begin(), this->end());
+#else
+    std::vector<U> temp;
+    temp.reserve(this->size());
+    Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+    return temp;
+#endif
+  }
+
+  // this is inside class definition, so msvc 2005, 2008 and 2010 can compile this code.
+  template <class U>
+  inline operator std::deque<U>() const
+  {
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+    return std::deque<U>(this->begin(), this->end());
+#else
+    std::deque<U> temp;
+    Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+    return temp;
+#endif
+  }
+
+  // this is inside class definition, so msvc 2005, 2008 and 2010 can compile this code.
+  template <class U>
+  inline operator std::list<U>() const
+  {
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+    return std::list<U>(this->begin(), this->end());
+#else
+    std::list<U> temp;
+    Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+    return temp;
+#endif
+  }
+
+  template <class Cont>
+  inline void assign_to(Cont& container) const;
+
+  template <class Out>
+  inline void copy(Out pdest) const;
+
+  inline const CType* data() const;
+  inline std::size_t size() const;
+  inline bool empty() const;
+
+private:
+  std::size_t size_;
+  const CType* parray_;
+  mutable Glib::OwnershipType ownership_;
+
+  // No copy assignment.
+  Me& operator=(const Me&);
+};
+
+// TODO: Remove this when we can break glibmm API.
+/** If a method takes this as an argument, or has this as a return type, then you can use a standard
+ * container such as std::list<Glib::ustring> or std::vector<Glib::ustring>.
+ *
+ *
+ * However, this is not used in new API. We now prefer to just use std::vector,
+ * which is less flexibile, but makes the API clearer.
+ *
+ * @ingroup ContHandles
+ */
+using StringArrayHandle = ArrayHandle<Glib::ustring>;
+
+/***************************************************************************/
+/*  Inline implementation                                                  */
+/***************************************************************************/
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+namespace Container_Helpers
+{
+
+/**** Glib::Container_Helpers::ArrayHandleIterator<> ***********************/
+
+template <class Tr>
+inline ArrayHandleIterator<Tr>::ArrayHandleIterator(const CType* pos) : pos_(pos)
+{
+}
+
+template <class Tr>
+inline typename ArrayHandleIterator<Tr>::value_type ArrayHandleIterator<Tr>::operator*() const
+{
+  return Tr::to_cpp_type(*pos_);
+}
+
+template <class Tr>
+inline typename ArrayHandleIterator<Tr>::value_type ArrayHandleIterator<Tr>::operator[](
+  difference_type offset) const
+{
+  return Tr::to_cpp_type(pos_[offset]);
+}
+
+template <class Tr>
+inline ArrayHandleIterator<Tr>& ArrayHandleIterator<Tr>::operator++()
+{
+  ++pos_;
+  return *this;
+}
+
+template <class Tr>
+inline const ArrayHandleIterator<Tr> ArrayHandleIterator<Tr>::operator++(int)
+{
+  return ArrayHandleIterator<Tr>(pos_++);
+}
+
+template <class Tr>
+inline ArrayHandleIterator<Tr>& ArrayHandleIterator<Tr>::operator--()
+{
+  --pos_;
+  return *this;
+}
+
+template <class Tr>
+inline const ArrayHandleIterator<Tr> ArrayHandleIterator<Tr>::operator--(int)
+{
+  return ArrayHandleIterator<Tr>(pos_--);
+}
+
+template <class Tr>
+inline ArrayHandleIterator<Tr>&
+ArrayHandleIterator<Tr>::operator+=(typename ArrayHandleIterator<Tr>::difference_type rhs)
+{
+  pos_ += rhs;
+  return *this;
+}
+
+template <class Tr>
+inline ArrayHandleIterator<Tr>&
+ArrayHandleIterator<Tr>::operator-=(typename ArrayHandleIterator<Tr>::difference_type rhs)
+{
+  pos_ -= rhs;
+  return *this;
+}
+
+template <class Tr>
+inline const ArrayHandleIterator<Tr>
+ArrayHandleIterator<Tr>::operator+(typename ArrayHandleIterator<Tr>::difference_type rhs) const
+{
+  return ArrayHandleIterator<Tr>(pos_ + rhs);
+}
+
+template <class Tr>
+inline const ArrayHandleIterator<Tr>
+ArrayHandleIterator<Tr>::operator-(typename ArrayHandleIterator<Tr>::difference_type rhs) const
+{
+  return ArrayHandleIterator<Tr>(pos_ - rhs);
+}
+
+template <class Tr>
+inline typename ArrayHandleIterator<Tr>::difference_type
+ArrayHandleIterator<Tr>::operator-(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ - rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator==(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ == rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator!=(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ != rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator<(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ < rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator>(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ > rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator<=(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ <= rhs.pos_);
+}
+
+template <class Tr>
+inline bool
+ArrayHandleIterator<Tr>::operator>=(const ArrayHandleIterator<Tr>& rhs) const
+{
+  return (pos_ >= rhs.pos_);
+}
+
+} // namespace Container_Helpers
+
+/**** Glib::ArrayHandle<> **************************************************/
+
+template <class T, class Tr>
+template <class Cont>
+inline ArrayHandle<T, Tr>::ArrayHandle(const Cont& container)
+: size_(Glib::Container_Helpers::ArraySourceTraits<Tr, Cont>::get_size(container)),
+  parray_(Glib::Container_Helpers::ArraySourceTraits<Tr, Cont>::get_data(container, size_)),
+  ownership_(Glib::Container_Helpers::ArraySourceTraits<Tr, Cont>::initial_ownership)
+{
+}
+
+template <class T, class Tr>
+inline ArrayHandle<T, Tr>::ArrayHandle(const typename ArrayHandle<T, Tr>::CType* array,
+  std::size_t array_size, Glib::OwnershipType ownership)
+: size_((array) ? array_size : 0), parray_(array), ownership_(ownership)
+{
+}
+
+template <class T, class Tr>
+inline ArrayHandle<T, Tr>::ArrayHandle(
+  const typename ArrayHandle<T, Tr>::CType* array, Glib::OwnershipType ownership)
+: size_((array) ? Glib::Container_Helpers::compute_array_size(array) : 0),
+  parray_(array),
+  ownership_(ownership)
+{
+}
+
+template <class T, class Tr>
+inline ArrayHandle<T, Tr>::ArrayHandle(const ArrayHandle<T, Tr>& other)
+: size_(other.size_), parray_(other.parray_), ownership_(other.ownership_)
+{
+  other.ownership_ = Glib::OWNERSHIP_NONE;
+}
+
+template <class T, class Tr>
+ArrayHandle<T, Tr>::~ArrayHandle() noexcept
+{
+  if (parray_ && ownership_ != Glib::OWNERSHIP_NONE)
+  {
+    if (ownership_ != Glib::OWNERSHIP_SHALLOW)
+    {
+      // Deep ownership: release each container element.
+      const CType* const pend = parray_ + size_;
+      for (const CType* p = parray_; p != pend; ++p)
+        Tr::release_c_type(*p);
+    }
+    g_free(const_cast<CType*>(parray_));
+  }
+}
+
+template <class T, class Tr>
+inline typename ArrayHandle<T, Tr>::const_iterator
+ArrayHandle<T, Tr>::begin() const
+{
+  return Glib::Container_Helpers::ArrayHandleIterator<Tr>(parray_);
+}
+
+template <class T, class Tr>
+inline typename ArrayHandle<T, Tr>::const_iterator
+ArrayHandle<T, Tr>::end() const
+{
+  return Glib::Container_Helpers::ArrayHandleIterator<Tr>(parray_ + size_);
+}
+
+template <class T, class Tr>
+template <class U>
+inline ArrayHandle<T, Tr>::operator std::vector<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::vector<U>(this->begin(), this->end());
+#else
+  std::vector<U> temp;
+  temp.reserve(this->size());
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline ArrayHandle<T, Tr>::operator std::deque<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::deque<U>(this->begin(), this->end());
+#else
+  std::deque<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline ArrayHandle<T, Tr>::operator std::list<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::list<U>(this->begin(), this->end());
+#else
+  std::list<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class Cont>
+inline void
+ArrayHandle<T, Tr>::assign_to(Cont& container) const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  container.assign(this->begin(), this->end());
+#else
+  Cont temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  container.swap(temp);
+#endif
+}
+
+template <class T, class Tr>
+template <class Out>
+inline void
+ArrayHandle<T, Tr>::copy(Out pdest) const
+{
+  std::copy(this->begin(), this->end(), pdest);
+}
+
+template <class T, class Tr>
+inline const typename ArrayHandle<T, Tr>::CType*
+ArrayHandle<T, Tr>::data() const
+{
+  return parray_;
+}
+
+template <class T, class Tr>
+inline std::size_t
+ArrayHandle<T, Tr>::size() const
+{
+  return size_;
+}
+
+template <class T, class Tr>
+inline bool
+ArrayHandle<T, Tr>::empty() const
+{
+  return (size_ == 0);
+}
+
+/**** Glib::ArrayHandle<bool> **********************************************/
+
+template <class Cont>
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::ArrayHandle(const Cont& container)
+: size_(Glib::Container_Helpers::BoolArraySourceTraits<Cont>::get_size(container)),
+  parray_(Glib::Container_Helpers::BoolArraySourceTraits<Cont>::get_data(container, size_)),
+  ownership_(Glib::Container_Helpers::BoolArraySourceTraits<Cont>::initial_ownership)
+{
+}
+
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::ArrayHandle(
+  const gboolean* array, std::size_t array_size, Glib::OwnershipType ownership)
+: size_((array) ? array_size : 0), parray_(array), ownership_(ownership)
+{
+}
+
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::ArrayHandle(
+  const gboolean* array, Glib::OwnershipType ownership)
+: size_((array) ? Glib::Container_Helpers::compute_array_size(array) : 0),
+  parray_(array),
+  ownership_(ownership)
+{
+}
+
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::ArrayHandle(
+  const ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>& other)
+: size_(other.size_), parray_(other.parray_), ownership_(other.ownership_)
+{
+  other.ownership_ = Glib::OWNERSHIP_NONE;
+}
+
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::const_iterator
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::begin() const
+{
+  return Glib::Container_Helpers::ArrayHandleIterator<Tr>(parray_);
+}
+
+inline ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::const_iterator
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::end() const
+{
+  return Glib::Container_Helpers::ArrayHandleIterator<Tr>(parray_ + size_);
+}
+
+template <class Cont>
+inline void
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::assign_to(Cont& container) const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  container.assign(this->begin(), this->end());
+#else
+  Cont temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  container.swap(temp);
+#endif
+}
+
+template <class Out>
+inline void
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::copy(Out pdest) const
+{
+  std::copy(this->begin(), this->end(), pdest);
+}
+
+inline const gboolean*
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::data() const
+{
+  return parray_;
+}
+
+inline std::size_t
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::size() const
+{
+  return size_;
+}
+
+inline bool
+ArrayHandle<bool, Container_Helpers::TypeTraits<bool>>::empty() const
+{
+  return (size_ == 0);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} // namespace Glib
+
+#endif /* _GLIBMM_ARRAYHANDLE_H */
index c9c279c..9f098db 100644 (file)
@@ -12,8 +12,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/base64.h>
index eda3da0..5fae475 100644 (file)
@@ -15,8 +15,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <string>
index 29ab8cf..29219a6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/class.h>
@@ -85,9 +84,14 @@ Class::register_derived_type(GType base_type, GTypeModule* module)
 }
 
 GType
+Class::clone_custom_type(const char* custom_type_name) const
+{
+  return clone_custom_type(custom_type_name, interface_class_vector_type());
+}
+
+GType
 Class::clone_custom_type(
-  const char* custom_type_name, const interface_classes_type* interface_classes,
-  const class_init_funcs_type* class_init_funcs, GInstanceInitFunc instance_init_func) const
+  const char* custom_type_name, const interface_class_vector_type& interface_classes) const
 {
   std::string full_name("gtkmm__CustomObject_");
   Glib::append_canonical_typename(full_name, custom_type_name);
@@ -113,43 +117,30 @@ Class::clone_custom_type(
     // GTypeQuery::instance_size is guint but GTypeInfo::instance_size is guint16.
     const guint16 instance_size = (guint16)base_query.instance_size;
 
-    // Let the wrapper's class_init_function() be the first one to call.
-    auto all_class_init_funcs = new class_init_funcs_type(
-      1, std::tuple<GClassInitFunc, void*>(class_init_func_, nullptr));
-    if (class_init_funcs)
-      all_class_init_funcs->insert(all_class_init_funcs->end(),
-        class_init_funcs->begin(), class_init_funcs->end());
-
     const GTypeInfo derived_info = {
       class_size,
       nullptr, // base_init
       &Class::custom_class_base_finalize_function, // base_finalize
       &Class::custom_class_init_function,
       nullptr, // class_finalize
-      all_class_init_funcs, // class_data
+      this, // class_data
       instance_size,
       0, // n_preallocs
-      instance_init_func, // instance_init
+      nullptr, // instance_init
       nullptr, // value_table
     };
 
-    // custom_class_init_function() is called when the first object of the custom
-    // class is created, which is after clone_custom_type() has returned.
-    // Let custom_class_init_function() delete all_class_init_funcs.
-
     custom_type =
       g_type_register_static(base_type, full_name.c_str(), &derived_info, GTypeFlags(0));
 
     // Add derived versions of interfaces, if the C type implements any interfaces.
     // For instance, TreeModel_Class::add_interface().
-    if (interface_classes)
+    for (interface_class_vector_type::size_type i = 0; i < interface_classes.size(); i++)
     {
-      for (auto interface_class : *interface_classes)
+      const Interface_Class* interface_class = interface_classes[i];
+      if (interface_class)
       {
-        if (interface_class)
-        {
-          interface_class->add_interface(custom_type);
-        }
+        interface_class->add_interface(custom_type);
       }
     }
   }
@@ -185,36 +176,19 @@ Class::custom_class_base_finalize_function(void* g_class)
 void
 Class::custom_class_init_function(void* g_class, void* class_data)
 {
-  // clone_custom_type() sets the class data pointer to a pointer to a vector
-  // of pointers to functions to be called.
-  const class_init_funcs_type& class_init_funcs =
-    *static_cast<class_init_funcs_type*>(class_data);
+  // The class_data pointer is set to 'this' by clone_custom_type().
+  const Class* const self = static_cast<Class*>(class_data);
 
-  g_return_if_fail(!class_init_funcs.empty() && std::get<GClassInitFunc>(class_init_funcs[0]) != nullptr);
+  g_return_if_fail(self->class_init_func_ != nullptr);
 
   // Call the wrapper's class_init_function() to redirect
   // the vfunc and default signal handler callbacks.
-  auto init_func = std::get<GClassInitFunc>(class_init_funcs[0]);
-  (*init_func)(g_class, nullptr);
+  (*self->class_init_func_)(g_class, nullptr);
 
   GObjectClass* const gobject_class = static_cast<GObjectClass*>(g_class);
   gobject_class->get_property = &Glib::custom_get_property_callback;
   gobject_class->set_property = &Glib::custom_set_property_callback;
 
-  // Call extra class init functions, if any.
-  for (std::size_t i = 1; i < class_init_funcs.size(); ++i)
-  {
-    if (auto extra_init_func = std::get<GClassInitFunc>(class_init_funcs[i]))
-    {
-      auto extra_class_data = std::get<void*>(class_init_funcs[i]);
-      (*extra_init_func)(g_class, extra_class_data);
-    }
-  }
-
-  // Assume that this function is called exactly once for each type.
-  // Delete the class_init_funcs_type that was created in clone_custom_type().
-  delete static_cast<class_init_funcs_type*>(class_data);
-
   // Override the properties of implemented interfaces, if any.
   const GType object_type = G_TYPE_FROM_CLASS(g_class);
 
index e790715..3ffc51e 100644 (file)
@@ -1,6 +1,9 @@
+// -*- c++ -*-
 #ifndef _GLIBMM_CLASS_H
 #define _GLIBMM_CLASS_H
 
+/* $Id$ */
+
 /* Copyright 2001 Free Software Foundation
  * Copyright (C) 1998-2002 The gtkmm Development Team
  *
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib-object.h>
 #include <glibmmconfig.h> //Include this here so that the /private/*.h classes have access to GLIBMM_VFUNCS_ENABLED
 
 #include <vector> //For interface properties that custom types might override.
-#include <tuple>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 
@@ -52,13 +53,20 @@ public:
 
   inline GType get_type() const;
 
-  /// The type that holds pointers to the interfaces of custom types.
-  using interface_classes_type = std::vector<const Interface_Class*>;
-  /** The type that holds pointers to extra class init functions of custom types.
-   * The std::tuple contains a function pointer and a pointer to class data.
-   * The class data pointer can be nullptr, if the function does not need it.
+  // TODO: Remove this method at the next ABI/API break.
+  /** Register a static custom GType, derived from the parent of this class's type.
+   * The parent type of the registered custom type is the same C class as the parent
+   * of the get_type() type. If a type with the specified name is already registered,
+   * nothing is done. register_derived_type() must have been called.
+   * @param custom_type_name The name of the registered type is
+   *        "gtkmm__CustomObject_" + canonic(custom_type_name), where canonic()
+   *        replaces special characters with '+'.
+   * @return The registered type.
    */
-  using class_init_funcs_type = std::vector<std::tuple<GClassInitFunc, void*>>;
+  GType clone_custom_type(const char* custom_type_name) const;
+
+  /// The type that holds pointers to the interfaces of custom types.
+  using interface_class_vector_type = std::vector<const Interface_Class*>;
 
   /** Register a static custom GType, derived from the parent of this class's type.
    * The parent type of the registered custom type is the same C class as the parent
@@ -67,16 +75,11 @@ public:
    * @param custom_type_name The name of the registered type is
    *        "gtkmm__CustomObject_" + canonic(custom_type_name), where canonic()
    *        replaces special characters with '+'.
-   * @param interface_classes Interfaces that the custom type implements (can be nullptr).
-   * @param class_init_funcs Extra class init functions (can be nullptr). These
-   *        functions, if any, are called after the class init function of this
-   *        class's type, e.g. Gtk::Widget.
-   * @param instance_init_func Instance init function (can be nullptr).
+   * @param interface_classes Interfaces that the custom type implements.
    * @return The registered type.
    */
   GType clone_custom_type(
-    const char* custom_type_name, const interface_classes_type* interface_classes,
-    const class_init_funcs_type* class_init_funcs, GInstanceInitFunc instance_init_func) const;
+    const char* custom_type_name, const interface_class_vector_type& interface_classes) const;
 
 protected:
   GType gtype_;
index c798550..851df9c 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -54,6 +53,43 @@ enum OwnershipType
   OWNERSHIP_DEEP /*!< Release the list, and its elements, when the container is deleted. */
 };
 
+/** Utility class holding an iterator sequence.
+ * @ingroup ContHandles
+ * This can be used to initialize a Glib container handle (such as
+ * Glib::ArrayHandle) with an iterator sequence.  Use the helper
+ * function Glib::sequence() to create a Sequence<> object.
+ */
+template <class Iterator>
+class Sequence
+{
+private:
+  Iterator pbegin_;
+  Iterator pend_;
+
+public:
+  Sequence(Iterator pbegin, Iterator pend) : pbegin_(pbegin), pend_(pend) {}
+
+  Iterator begin() const { return pbegin_; }
+  Iterator end() const { return pend_; }
+  std::size_t size() const { return std::distance(pbegin_, pend_); }
+};
+
+/** Helper function to create a Glib::Sequence<> object, which
+ * in turn can be used to initialize a container handle.
+ * @ingroup ContHandles
+ *
+ * @par Usage example:
+ * @code
+ * combo.set_popdown_strings(Glib::sequence(foo_begin, foo_end));
+ * @endcode
+ */
+template <class Iterator>
+inline Sequence<Iterator>
+sequence(Iterator pbegin, Iterator pend)
+{
+  return Sequence<Iterator>(pbegin, pend);
+}
+
 namespace Container_Helpers
 {
 
@@ -169,7 +205,7 @@ struct TypeTraits<Glib::RefPtr<T>>
     // because that would be "dependent", and g++ 3.4 does not allow that.
     // The specific Glib::wrap() overloads don't do anything special anyway.
     GObject* cobj = (GObject*)(ptr);
-    return Glib::make_refptr_for_instance<T>(dynamic_cast<T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
+    return Glib::RefPtr<T>(dynamic_cast<T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
     // We use dynamic_cast<> in case of multiple inheritance.
   }
 
@@ -205,7 +241,7 @@ struct TypeTraits<Glib::RefPtr<const T>>
     // because that would be "dependent", and g++ 3.4 does not allow that.
     // The specific Glib::wrap() overloads don't do anything special anyway.
     GObject* cobj = (GObject*)const_cast<CTypeNonConst>(ptr);
-    return Glib::make_refptr_for_instance<const T>(
+    return Glib::RefPtr<const T>(
       dynamic_cast<const T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
     // We use dynamic_cast<> in case of multiple inheritance.
   }
diff --git a/glib/glibmm/containers.cc b/glib/glibmm/containers.cc
new file mode 100644 (file)
index 0000000..bb19f45
--- /dev/null
@@ -0,0 +1,26 @@
+/* containers.h
+ *
+ * Copyright (C) 1998-2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/containers.h>
+
+namespace Glib
+{
+
+gpointer glibmm_null_pointer = nullptr;
+
+} // namespace Glib
diff --git a/glib/glibmm/containers.h b/glib/glibmm/containers.h
new file mode 100644 (file)
index 0000000..55fc2c5
--- /dev/null
@@ -0,0 +1,360 @@
+#ifndef _GLIBMM_CONTAINERS_H
+#define _GLIBMM_CONTAINERS_H
+
+/* containers.h
+ *
+ * Copyright (C) 1998-2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+#include <glibmm/sarray.h> /* for backward compatibility */
+#include <glibmm/wrap.h>
+#include <glib.h>
+#include <iterator>
+#include <cstddef>
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+namespace Glib
+{
+
+template <class T>
+class List_Iterator;
+template <class T>
+class List_ConstIterator;
+template <class T>
+class List_ReverseIterator;
+
+// Most of these methods in the non-template classes needs to be moved
+// to implementation.
+
+// Daniel Elstner has ideas about generating these per-widget with m4. murrayc.
+
+extern GLIBMM_API gpointer glibmm_null_pointer;
+
+template <class T>
+class List_Iterator_Base
+{
+public:
+  using value_type = T;
+  using pointer = T*;
+  using reference = T&;
+};
+
+/// For instance, List_Iterator< Gtk::Widget >
+template <class T>
+class List_Iterator : public List_Iterator_Base<T>
+{
+public:
+  using iterator_category = std::bidirectional_iterator_tag;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using pointer = typename List_Iterator_Base<T>::pointer;
+  using reference = typename List_Iterator_Base<T>::reference;
+
+  GList* const* head_;
+  GList* node_;
+
+  using Self = List_Iterator<T>;
+
+  List_Iterator(GList* const& head, GList* node) : head_(&head), node_(node) {}
+
+  List_Iterator() : head_(nullptr), node_(nullptr) {}
+
+  List_Iterator(const Self& src) : head_(src.head_), node_(src.node_) {}
+
+  bool operator==(const Self& src) const { return node_ == src.node_; }
+  bool operator!=(const Self& src) const { return node_ != src.node_; }
+
+  Self& operator++()
+  {
+    if (!node_)
+      node_ = g_list_first(*head_);
+    else
+      node_ = (GList*)g_list_next(node_);
+    return *this;
+  }
+
+  Self operator++(int)
+  {
+    Self tmp = *this;
+    ++*this;
+    return tmp;
+  }
+
+  Self& operator--()
+  {
+    if (!node_)
+      node_ = g_list_last(*head_);
+    else
+      node_ = (GList*)g_list_previous(node_);
+
+    return *this;
+  }
+
+  Self operator--(int)
+  {
+    Self tmp = *this;
+    --*this;
+    return tmp;
+  }
+
+  reference operator*() const { return *(pointer)(node_ ? node_->data : glibmm_null_pointer); }
+
+  pointer operator->() const { return &**this; }
+};
+
+/// For instance, SList_Iterator< Gtk::Widget >
+template <class T>
+class SList_Iterator : public List_Iterator_Base<T>
+{
+public:
+  using iterator_category = std::forward_iterator_tag;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using pointer = typename List_Iterator_Base<T>::pointer;
+  using reference = typename List_Iterator_Base<T>::reference;
+
+  GSList* node_;
+  using Self = SList_Iterator<T>;
+
+  SList_Iterator(GSList* node) : node_(node) {}
+
+  SList_Iterator() : node_(nullptr) {}
+
+  SList_Iterator(const Self& src) : node_(src.node_) {}
+
+  bool operator==(const Self& src) const { return node_ == src.node_; }
+  bool operator!=(const Self& src) const { return node_ != src.node_; }
+
+  Self& operator++()
+  {
+    node_ = g_slist_next(node_);
+    return *this;
+  }
+
+  Self operator++(int)
+  {
+    Self tmp = *this;
+    ++*this;
+    return tmp;
+  }
+
+  reference operator*() const
+  {
+    return reinterpret_cast<T&>(node_ ? node_->data : glibmm_null_pointer);
+  }
+
+  pointer operator->() const { return &**this; }
+};
+
+// This iterator variation returns T_IFace (wrapped from T_Impl)
+// For instance,  List_Cpp_Iterator<GtkWidget, Gtk::Widget> is
+// a little like std::list<Gtk::Widget>::iterator
+template <class T_Impl, class T_IFace>
+class List_Cpp_Iterator : public List_Iterator_Base<T_IFace>
+{
+public:
+  using iterator_category = std::bidirectional_iterator_tag;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using pointer = typename List_Iterator_Base<T_IFace>::pointer;
+  using reference = typename List_Iterator_Base<T_IFace>::reference;
+
+  using Self = List_Cpp_Iterator<T_Impl, T_IFace>;
+
+  GList** head_;
+  GList* node_;
+
+  bool operator==(const Self& src) const { return node_ == src.node_; }
+  bool operator!=(const Self& src) const { return node_ != src.node_; }
+
+  List_Cpp_Iterator(GList*& head, GList* node) : head_(&head), node_(node) {}
+
+  List_Cpp_Iterator() : head_(nullptr), node_(nullptr) {}
+
+  List_Cpp_Iterator(const Self& src) : head_(src.head_), node_(src.node_) {}
+
+  reference operator*() const
+  {
+    if (node_ && node_->data)
+    {
+      // We copy/paste the widget wrap() implementation here,
+      // because we can not use a specific Glib::wrap(T_Impl) overload here,
+      // because that would be "dependent", and g++ 3.4 does not allow that.
+      // The specific Glib::wrap() overloads don't do anything special anyway.
+      GObject* cobj = static_cast<GObject*>(node_->data);
+
+#ifdef GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION
+      return *dynamic_cast<pointer>(Glib::wrap_auto(cobj, false));
+#else
+      // We really do need to use dynamic_cast<>, so I expect problems if this code is used.
+      // murrayc.
+      return *static_cast<pointer>(Glib::wrap_auto(cobj, false));
+#endif
+    }
+    return *static_cast<pointer>(nullptr); // boom!
+  }
+
+  pointer operator->() const { return &**this; }
+
+  Self& operator++()
+  {
+    if (!node_)
+      node_ = g_list_first(*head_);
+    else
+      node_ = (GList*)g_list_next(node_);
+
+    return *this;
+  }
+
+  Self operator++(int)
+  {
+    Self tmp = *this;
+    ++*this;
+    return tmp;
+  }
+
+  Self& operator--()
+  {
+    if (!node_)
+      node_ = g_list_last(*head_);
+    else
+      node_ = (GList*)g_list_previous(node_);
+
+    return *this;
+  }
+
+  Self operator--(int)
+  {
+    Self tmp = *this;
+    --*this;
+    return tmp;
+  }
+};
+
+template <class T_Base>
+class List_ReverseIterator : private T_Base
+{
+public:
+  using iterator_category = typename T_Base::iterator_category;
+  using size_type = typename T_Base::size_type;
+  using difference_type = typename T_Base::difference_type;
+
+  using value_type = typename T_Base::value_type;
+  using pointer = typename T_Base::pointer;
+  using reference = typename T_Base::reference;
+
+  using Self = List_ReverseIterator<T_Base>;
+
+  bool operator==(const Self& src) const { return T_Base::operator==(src); }
+  bool operator!=(const Self& src) const { return T_Base::operator!=(src); }
+
+  List_ReverseIterator(GList* const& head, GList* node) : T_Base(head, node) {}
+
+  List_ReverseIterator() : T_Base() {}
+
+  List_ReverseIterator(const Self& src) : T_Base(src) {}
+
+  List_ReverseIterator(const T_Base& src) : T_Base(src) { ++(*this); }
+
+  Self& operator++()
+  {
+    T_Base::operator--();
+    return *this;
+  }
+  Self& operator--()
+  {
+    T_Base::operator++();
+    return *this;
+  }
+  Self operator++(int)
+  {
+    Self src = *this;
+    T_Base::operator--();
+    return src;
+  }
+  Self operator--(int)
+  {
+    Self src = *this;
+    T_Base::operator++();
+    return src;
+  }
+
+  reference operator*() const { return T_Base::operator*(); }
+  pointer operator->() const { return T_Base::operator->(); }
+};
+
+template <class T_Base>
+class List_ConstIterator : public T_Base
+{
+public:
+  using iterator_category = typename T_Base::iterator_category;
+  using size_type = typename T_Base::size_type;
+  using difference_type = typename T_Base::difference_type;
+
+  using value_type = const typename T_Base::value_type;
+  using pointer = const typename T_Base::pointer;
+  using reference = const typename T_Base::reference;
+
+  using Self = List_ConstIterator<T_Base>;
+
+  bool operator==(const Self& src) const { return T_Base::operator==(src); }
+  bool operator!=(const Self& src) const { return T_Base::operator!=(src); }
+
+  List_ConstIterator(GList* const& head, GList* node) : T_Base(head, node) {}
+
+  List_ConstIterator() : T_Base() {}
+
+  List_ConstIterator(const Self& src) : T_Base(src) {}
+
+  List_ConstIterator(const T_Base& src) : T_Base(src) {}
+
+  Self& operator++()
+  {
+    T_Base::operator++();
+    return *this;
+  }
+  Self& operator--()
+  {
+    T_Base::operator--();
+    return *this;
+  }
+  Self operator++(int)
+  {
+    Self src = *this;
+    T_Base::operator++();
+    return src;
+  }
+  Self operator--(int)
+  {
+    Self src = *this;
+    T_Base::operator--();
+    return src;
+  }
+
+  reference operator*() const { return T_Base::operator*(); }
+  pointer operator->() const { return T_Base::operator->(); }
+};
+
+} // namespace Glib
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+#endif /* _GLIBMM_CONTAINERS_H */
index 4fc3699..fd0b757 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/debug.h>
index 831f246..2c32e54 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_DEBUG_H
 #define _GLIBMM_DEBUG_H
 
@@ -15,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index cd6c43d..601e99e 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifndef GLIBMM_CAN_USE_THREAD_LOCAL
+#include <glibmm/threads.h>
+#endif
+
 #include <glibmm/dispatcher.h>
 #include <glibmm/exceptionhandler.h>
 #include <glibmm/fileutils.h>
@@ -23,8 +26,7 @@
 #include <cerrno>
 #include <fcntl.h>
 #include <glib.h>
-#include <forward_list>
-#include <memory>
+#include <set>
 #include <utility> // For std::move()
 
 #ifdef G_OS_WIN32
 #define EINTR 0 /* TODO: should use the real define */
 #endif
 
-namespace Glib
-{
-class DispatchNotifier;
-}
-
 namespace
 {
 
 struct DispatchNotifyData
 {
-  Glib::Dispatcher::Impl* dispatcher_impl;
+  Glib::Dispatcher* dispatcher;
   Glib::DispatchNotifier* notifier;
 
-  DispatchNotifyData()
-  : dispatcher_impl(nullptr), notifier(nullptr)
-  {}
+  DispatchNotifyData() : dispatcher(nullptr), notifier(nullptr) {}
 
-  DispatchNotifyData(Glib::Dispatcher::Impl* d, Glib::DispatchNotifier* n)
-  : dispatcher_impl(d), notifier(n)
-  {}
+  DispatchNotifyData(Glib::Dispatcher* d, Glib::DispatchNotifier* n) : dispatcher(d), notifier(n) {}
 };
 
 static void
@@ -127,33 +120,11 @@ fd_close_and_invalidate(int& fd)
 }
 #endif /* !G_OS_WIN32 */
 
-void warn_dropped_dispatcher_message()
-{
-  g_warning("Dropped dispatcher message as the dispatcher no longer exists.");
-}
-
 } // anonymous namespace
 
 namespace Glib
 {
 
-// The most important reason for having the dispatcher implementation in a separate
-// class is that its deletion can be delayed until it's safe to delete it.
-// Deletion is safe when the pipe does not contain any message to the dispatcher
-// to delete. When the pipe is empty, it's surely safe.
-struct Dispatcher::Impl
-{
-public:
-  sigc::signal<void()> signal_;
-  DispatchNotifier*  notifier_;
-
-  explicit Impl(const Glib::RefPtr<MainContext>& context);
-
-  // noncopyable
-  Impl(const Impl&) = delete;
-  Impl& operator=(const Impl&) = delete;
-};
-
 class DispatchNotifier : public sigc::trackable
 {
 public:
@@ -163,10 +134,11 @@ public:
   DispatchNotifier(const DispatchNotifier&) = delete;
   DispatchNotifier& operator=(const DispatchNotifier&) = delete;
 
-  static DispatchNotifier* reference_instance(const Glib::RefPtr<MainContext>& context);
-  static void unreference_instance(DispatchNotifier* notifier, Dispatcher::Impl* dispatcher_impl);
+  static DispatchNotifier* reference_instance(
+    const Glib::RefPtr<MainContext>& context, const Dispatcher* dispatcher);
+  static void unreference_instance(DispatchNotifier* notifier, const Dispatcher* dispatcher);
 
-  void send_notification(Dispatcher::Impl* dispatcher_impl);
+  void send_notification(Dispatcher* dispatcher);
 
 protected:
   // Only used by reference_instance().  Should be private, but that triggers
@@ -174,10 +146,14 @@ protected:
   explicit DispatchNotifier(const Glib::RefPtr<MainContext>& context);
 
 private:
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
   static thread_local DispatchNotifier* thread_specific_instance_;
+#else
+  static Glib::Threads::Private<DispatchNotifier> thread_specific_instance_;
+#endif
+
+  std::set<const Dispatcher*> deleted_dispatchers_;
 
-  using UniqueImplPtr = std::unique_ptr<Dispatcher::Impl>;
-  std::forward_list<UniqueImplPtr> orphaned_dispatcher_impl_;
   long ref_count_;
   Glib::RefPtr<MainContext> context_;
 #ifdef G_OS_WIN32
@@ -196,10 +172,16 @@ private:
 
 /**** Glib::DispatchNotifier ***********************************************/
 
+// static
+
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
 thread_local DispatchNotifier* DispatchNotifier::thread_specific_instance_ = nullptr;
+#else
+Glib::Threads::Private<DispatchNotifier> DispatchNotifier::thread_specific_instance_;
+#endif
 
 DispatchNotifier::DispatchNotifier(const Glib::RefPtr<MainContext>& context)
-: orphaned_dispatcher_impl_(),
+: deleted_dispatchers_(),
   ref_count_(0),
   context_(context),
 #ifdef G_OS_WIN32
@@ -222,10 +204,10 @@ DispatchNotifier::DispatchNotifier(const Glib::RefPtr<MainContext>& context)
 
     // The following code is equivalent to
     // context_->signal_io().connect(
-    //   sigc::mem_fun(*this, &DispatchNotifier::pipe_io_handler), fd, Glib::IOCondition::IN);
+    //   sigc::mem_fun(*this, &DispatchNotifier::pipe_io_handler), fd, Glib::IO_IN);
     // except for source->set_can_recurse(true).
 
-    const auto source = IOSource::create(fd, Glib::IOCondition::IN);
+    const auto source = IOSource::create(fd, Glib::IO_IN);
 
     // If the signal emission in pipe_io_handler() starts a new main loop,
     // the event source shall not be blocked while that loop runs. (E.g. while
@@ -295,20 +277,40 @@ DispatchNotifier::create_pipe()
 }
 
 // static
-DispatchNotifier* DispatchNotifier::reference_instance(
-  const Glib::RefPtr<MainContext>& context)
+DispatchNotifier*
+DispatchNotifier::reference_instance(
+  const Glib::RefPtr<MainContext>& context, const Dispatcher* dispatcher)
 {
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
   DispatchNotifier* instance = thread_specific_instance_;
+#else
+  DispatchNotifier* instance = thread_specific_instance_.get();
+#endif
 
   if (!instance)
   {
     instance = new DispatchNotifier(context);
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
     thread_specific_instance_ = instance;
+#else
+    thread_specific_instance_.replace(instance);
+#endif
   }
   else
   {
     // Prevent massive mess-up.
     g_return_val_if_fail(instance->context_ == context, nullptr);
+
+    // In the possible but unlikely case that a new dispatcher gets the same
+    // address as a newly deleted one, if the pipe still contains messages to
+    // the deleted dispatcher, those messages will be delivered to the new one.
+    // Not ideal, but perhaps the best that can be done without breaking ABI.
+    // The alternative would be to remove the following erase(), and risk not
+    // delivering messages sent to the new dispatcher.
+    // TODO: When we can break ABI, a better solution without this drawback can
+    // be implemented. See https://bugzilla.gnome.org/show_bug.cgi?id=651942
+    // especially comment 16.
+    instance->deleted_dispatchers_.erase(dispatcher);
   }
 
   ++instance->ref_count_; // initially 0
@@ -317,49 +319,48 @@ DispatchNotifier* DispatchNotifier::reference_instance(
 }
 
 // static
-void DispatchNotifier::unreference_instance(
-  DispatchNotifier* notifier, Dispatcher::Impl* dispatcher_impl)
+void
+DispatchNotifier::unreference_instance(DispatchNotifier* notifier, const Dispatcher* dispatcher)
 {
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
   DispatchNotifier* const instance = thread_specific_instance_;
+#else
+  DispatchNotifier* const instance = thread_specific_instance_.get();
+#endif
 
   // Yes, the notifier argument is only used to check for sanity.
   g_return_if_fail(instance == notifier);
 
   if (instance->pipe_is_empty())
-  {
-    // No messages in the pipe. Delete the Dispatcher::Impl immediately.
-    delete dispatcher_impl;
-    instance->orphaned_dispatcher_impl_.clear();
-  }
+    // No messages in the pipe. No need to keep track of deleted dispatchers.
+    instance->deleted_dispatchers_.clear();
   else
-  {
-    // There are messages in the pipe, possibly to the orphaned Dispatcher::Impl.
-    // Keep it around until it can safely be deleted.
-    // Delete all slots connected to the Dispatcher. Then the signal emission
-    // in pipe_io_handler() will do nothing.
-    dispatcher_impl->signal_.clear();
-    // Add a slot that will warn that a message has been dropped.
-    dispatcher_impl->signal_.connect(sigc::ptr_fun(warn_dropped_dispatcher_message));
-    instance->orphaned_dispatcher_impl_.push_front(UniqueImplPtr(dispatcher_impl));
-  }
+    // There are messages in the pipe, possibly to the deleted dispatcher.
+    // Keep its address, so pipe_io_handler() can avoid delivering messages to it.
+    instance->deleted_dispatchers_.insert(dispatcher);
 
   if (--instance->ref_count_ <= 0)
   {
     g_return_if_fail(instance->ref_count_ == 0); // could be < 0 if messed up
 
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
     delete thread_specific_instance_;
     thread_specific_instance_ = nullptr;
+#else
+    thread_specific_instance_.replace(nullptr);
+#endif
   }
 }
 
-void DispatchNotifier::send_notification(Dispatcher::Impl* dispatcher_impl)
+void
+DispatchNotifier::send_notification(Dispatcher* dispatcher)
 {
 #ifdef G_OS_WIN32
   {
     const std::lock_guard<std::mutex> lock(mutex_);
 
     const bool was_empty = notify_queue_.empty();
-    notify_queue_.emplace_back(DispatchNotifyData(dispatcher_impl, this));
+    notify_queue_.emplace_back(DispatchNotifyData(dispatcher, this));
 
     if (was_empty)
     {
@@ -371,7 +372,7 @@ void DispatchNotifier::send_notification(Dispatcher::Impl* dispatcher_impl)
   }
 #else /* !G_OS_WIN32 */
 
-  DispatchNotifyData data(dispatcher_impl, this);
+  DispatchNotifyData data(dispatcher, this);
   gssize n_written;
 
   do
@@ -404,10 +405,10 @@ DispatchNotifier::pipe_is_empty()
 #ifdef G_OS_WIN32
   return notify_queue_.empty();
 #else
-  PollFD poll_fd(fd_receiver_, Glib::IOCondition::IN);
+  PollFD poll_fd(fd_receiver_, Glib::IO_IN);
   // GPollFD*, number of file descriptors to poll, timeout (ms)
   g_poll(poll_fd.gobj(), 1, 0);
-  return static_cast<int>(poll_fd.get_revents() & Glib::IOCondition::IN) == 0;
+  return (poll_fd.get_revents() & Glib::IO_IN) == 0;
 #endif
 }
 
@@ -465,69 +466,75 @@ bool DispatchNotifier::pipe_io_handler(Glib::IOCondition)
 
   g_return_val_if_fail(data.notifier == this, true);
 
+  // Drop the received message, if it is addressed to a deleted dispatcher.
+  const bool drop_message =
+    (deleted_dispatchers_.find(data.dispatcher) != deleted_dispatchers_.end());
+
+  // If the pipe is empty, there can be no messages to deleted dispatchers.
+  // No reason to keep track of them any more.
+  if (!deleted_dispatchers_.empty() && pipe_is_empty())
+    deleted_dispatchers_.clear();
+
+  if (drop_message)
+  {
+    g_warning("Dropped dispatcher message as the dispatcher no longer exists");
+    return true;
+  }
+
   // Actually, we wouldn't need the try/catch block because the Glib::Source
   // C callback already does it for us.  However, we do it anyway because the
   // default return value is 'false', which is not what we want.
   try
   {
-    data.dispatcher_impl->signal_(); // emit
+    data.dispatcher->signal_(); // emit
   }
   catch (...)
   {
     Glib::exception_handlers_invoke();
   }
 
-  if (!orphaned_dispatcher_impl_.empty() && pipe_is_empty())
-    orphaned_dispatcher_impl_.clear();
-
   return true;
 }
 
-/**** Glib::Dispatcher and Glib::Dispatcher::Impl **************************/
+/**** Glib::Dispatcher *****************************************************/
 
-Dispatcher::Impl::Impl(const Glib::RefPtr<MainContext>& context)
-: signal_(),
-  notifier_(DispatchNotifier::reference_instance(context))
+Dispatcher::Dispatcher()
+: signal_(), notifier_(DispatchNotifier::reference_instance(MainContext::get_default(), this))
 {
 }
 
-Dispatcher::Dispatcher()
-: impl_(new Dispatcher::Impl(MainContext::get_default()))
-{}
-
-
 Dispatcher::Dispatcher(const Glib::RefPtr<MainContext>& context)
-: impl_(new Dispatcher::Impl(context))
+: signal_(), notifier_(DispatchNotifier::reference_instance(context, this))
 {
 }
 
 Dispatcher::~Dispatcher() noexcept
 {
-  DispatchNotifier::unreference_instance(impl_->notifier_, impl_);
+  DispatchNotifier::unreference_instance(notifier_, this);
 }
 
 void
 Dispatcher::emit()
 {
-  impl_->notifier_->send_notification(impl_);
+  notifier_->send_notification(this);
 }
 
 void
 Dispatcher::operator()()
 {
-  impl_->notifier_->send_notification(impl_);
+  notifier_->send_notification(this);
 }
 
 sigc::connection
-Dispatcher::connect(const sigc::slot<void()>& slot)
+Dispatcher::connect(const sigc::slot<void>& slot)
 {
-  return impl_->signal_.connect(slot);
+  return signal_.connect(slot);
 }
 
 sigc::connection
-Dispatcher::connect(sigc::slot<void()>&& slot)
+Dispatcher::connect(sigc::slot<void>&& slot)
 {
-  return impl_->signal_.connect(std::move(slot));
+  return signal_.connect(std::move(slot));
 }
 
 } // namespace Glib
index f66a523..9b7b967 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <sigc++/sigc++.h>
 namespace Glib
 {
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+class DispatchNotifier;
+#endif
+
 /** Signal class for inter-thread communication.
  * @ingroup Threads
- * Glib::Dispatcher works similar to sigc::signal<void()>.  But unlike normal
+ * Glib::Dispatcher works similar to sigc::signal<void>.  But unlike normal
  * signals, the notification happens asynchronously through a pipe.  This is
  * a simple and efficient way of communicating between threads, and especially
  * useful in a thread model with a single GUI thread.
@@ -84,17 +87,18 @@ public:
   void emit();
   void operator()();
 
-  sigc::connection connect(const sigc::slot<void()>& slot);
+  sigc::connection connect(const sigc::slot<void>& slot);
   /** @newin{2,48}
    */
-  sigc::connection connect(sigc::slot<void()>&& slot);
-
-  #ifndef DOXYGEN_SHOULD_SKIP_THIS
-  struct Impl;
-  #endif
+  sigc::connection connect(sigc::slot<void>&& slot);
 
 private:
-  Impl* impl_; // hidden implementation
+  sigc::signal<void> signal_;
+  DispatchNotifier* notifier_;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  friend class Glib::DispatchNotifier;
+#endif
 };
 
 /*! A Glib::Dispatcher example.
index 0906336..e3afe5b 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index eb61b4e..c015e75 100644 (file)
@@ -15,8 +15,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index b1e9322..2c25ea9 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* exception.cc
  *
  * Copyright 2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <glib/gtestutils.h> //For g_assert() in glib >= 2.15.0
index bc9feae..726f39e 100644 (file)
@@ -1,7 +1,5 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_EXCEPTION_H
 #define _GLIBMM_EXCEPTION_H
-/* $Id$ */
 
 /* exception.h
  *
@@ -18,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/ustring.h>
index e80e009..023c204 100644 (file)
@@ -1,5 +1,3 @@
-// -*- c++ -*-
-
 /* exceptionhandler.cc
  *
  * Copyright 2002 The gtkmm Development Team
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifndef GLIBMM_CAN_USE_THREAD_LOCAL
+#include <glibmm/threads.h>
+#endif
 #include <glibmmconfig.h>
 #include <glibmm/error.h>
 #include <glibmm/exceptionhandler.h>
@@ -33,7 +33,11 @@ using HandlerList = std::list<sigc::slot<void()>>;
 
 // Each thread has its own list of exception handlers
 // to avoid thread synchronization problems.
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
 static thread_local HandlerList* thread_specific_handler_list = nullptr;
+#else
+static Glib::Threads::Private<HandlerList> thread_specific_handler_list;
+#endif
 
 static void
 glibmm_exception_warning(const GError* error)
@@ -83,14 +87,22 @@ namespace Glib
 {
 
 sigc::connection
-add_exception_handler(const sigc::slot<void()>& slot)
+add_exception_handler(const sigc::slot<void>& slot)
 {
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
   HandlerList* handler_list = thread_specific_handler_list;
+#else
+  HandlerList* handler_list = thread_specific_handler_list.get();
+#endif
 
   if (!handler_list)
   {
     handler_list = new HandlerList();
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
     thread_specific_handler_list = handler_list;
+#else
+    thread_specific_handler_list.set(handler_list);
+#endif
   }
 
   handler_list->emplace_back(slot);
@@ -115,7 +127,11 @@ exception_handlers_invoke() noexcept
   // handled.  If there are no more handlers in the list and the exception
   // is still unhandled, call glibmm_unexpected_exception().
 
+#ifdef GLIBMM_CAN_USE_THREAD_LOCAL
   if (HandlerList* const handler_list = thread_specific_handler_list)
+#else
+  if(HandlerList *const handler_list = thread_specific_handler_list.get())
+#endif
   {
     HandlerList::iterator pslot = handler_list->begin();
 
index acfd6f5..34a0250 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_EXCEPTIONHANDLER_H
 #define _GLIBMM_EXCEPTIONHANDLER_H
 
@@ -17,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -29,7 +27,7 @@ namespace Glib
 
 /** Specify a slot to be called when an exception is thrown by a signal handler.
  */
-sigc::connection add_exception_handler(const sigc::slot<void()>& slot);
+sigc::connection add_exception_handler(const sigc::slot<void>& slot);
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 // internal
diff --git a/glib/glibmm/extraclassinit.h b/glib/glibmm/extraclassinit.h
deleted file mode 100644 (file)
index 9d2fc60..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef _GLIBMM_EXTRACLASSINIT_H
-#define _GLIBMM_EXTRACLASSINIT_H
-/* Copyright (C) 2017 The glibmm Development Team
- *
- * 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.1 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <glibmm/objectbase.h>
-
-namespace Glib
-{
-
-/** A convenience class for named custom types.
- *
- * Use it if you need to add code to GType's class init function and/or
- * need an instance init function.
- * Example:
- * @code
- * #include <glibmm/extraclassinit.h>
- *
- * class MyExtraInit : public Glib::ExtraClassInit
- * {
- * public:
- *   MyExtraInit(const Glib::ustring& css_name)
- *   :
- *   Glib::ExtraClassInit(my_extra_class_init_function, &m_css_name, my_instance_init_function),
- *   m_css_name(css_name)
- *   { }
- *
- * private:
- *   static void my_extra_class_init_function(void* g_class, void* class_data)
- *   {
- *     const auto klass = static_cast<GtkWidgetClass*>(g_class);
- *     const auto css_name = static_cast<Glib::ustring*>(class_data);
- *     gtk_widget_class_set_css_name(klass, css_name->c_str());
- *   }
- *   static void my_instance_init_function(GTypeInstance* instance, void* g_class)
- *   {
- *     gtk_widget_set_has_window(GTK_WIDGET(instance), true);
- *   }
- *
- *   Glib::ustring m_css_name;
- * };
- *
- * class MyWidget : public Gtk::WidgetCustomDraw, public MyExtraInit, public Gtk::Widget
- * {
- * public:
- *   MyWidget()
- *   :
- *   // The GType name will be gtkmm__CustomObject_MyMidget
- *   Glib::ObjectBase("MyWidget"), // Unique class name
- *   Gtk::WidgetCustomDraw(),
- *   MyExtraInit("my-widget"),
- *   Gtk::Widget()
- *   {
- *     // ...
- *   }
- *   // ...
- * };
- * @endcode
- *
- * @note Classes derived from %ExtraClassInit (Gtk::WidgetCustomDraw and MyExtraInit
- * in the example) must be listed before Glib::Object or a class derived from
- * %Glib::Object (Gtk::Widget in the example) in the list of base classes.
- *
- * @newin{2,52}
- */
-class ExtraClassInit : virtual public ObjectBase
-{
-protected:
-  /** Constructor.
-   *
-   * @param class_init_func Pointer to an extra class init function.
-   *        nullptr, if no extra class init function is needed.
-   * @param class_data Class data pointer, passed to the class init function.
-   *        Can be nullptr, if the class init function does not need it.
-   * @param instance_init_func Pointer to an instance init function.
-   *        nullptr, if no instance init function is needed.
-   */
-  explicit ExtraClassInit(GClassInitFunc class_init_func, void* class_data = nullptr,
-    GInstanceInitFunc instance_init_func = nullptr);
-};
-
-} // namespace Glib
-
-#endif /* _GLIBMM_EXTRACLASSINIT_H */
index d0aeaf0..b5a6169 100644 (file)
@@ -5,14 +5,15 @@ glibmm_files_built_h  = $(glibmm_files_used_hg:.hg=.h) $(glibmm_files_h_m4:.m4=)
 glibmm_files_built_ph = $(patsubst %.hg,private/%_p.h,$(glibmm_files_used_hg))
 
 glibmm_files_extra_cc =                        \
+       arrayhandle.cc                  \
        base64.cc                       \
        class.cc                        \
+       containers.cc                   \
        debug.cc                        \
        dispatcher.cc                   \
        error.cc                        \
        exception.cc                    \
        exceptionhandler.cc             \
-       extraclassinit.cc               \
        init.cc                         \
        interface.cc                    \
        main.cc                         \
@@ -24,32 +25,39 @@ glibmm_files_extra_cc =                     \
        propertyproxy_base.cc           \
        quark.cc                        \
        random.cc                       \
+       sarray.cc                       \
        signalproxy.cc                  \
        signalproxy_connectionnode.cc   \
+       streamiochannel.cc              \
        stringutils.cc                  \
+       threadpool.cc                   \
        timer.cc                        \
        timeval.cc                      \
        ustring.cc                      \
        utility.cc                      \
        value.cc                        \
        value_custom.cc                 \
+       variantdbusstring.cc \
        vectorutils.cc                  \
        wrap.cc
 
 glibmm_files_extra_h =                 \
+       arrayhandle.h                   \
        base64.h                        \
        class.h                         \
        containerhandle_shared.h        \
+       containers.h                    \
        debug.h                         \
        dispatcher.h                    \
        error.h                         \
        exception.h                     \
        exceptionhandler.h              \
-       extraclassinit.h                \
+       helperlist.h                    \
        i18n-lib.h                      \
        i18n.h                          \
        init.h                          \
        interface.h                     \
+       listhandle.h                    \
        main.h                          \
        object.h                        \
        objectbase.h                    \
@@ -61,16 +69,22 @@ glibmm_files_extra_h =                      \
        quark.h                         \
        random.h                        \
        refptr.h                        \
+       sarray.h                        \
        signalproxy.h                   \
        signalproxy_connectionnode.h    \
+       slisthandle.h                   \
+       streamiochannel.h               \
        stringutils.h                   \
+       threadpool.h                    \
        timer.h                         \
        timeval.h                       \
        ustring.h                       \
        utility.h                       \
        value.h                         \
        value_custom.h                  \
+       variantdbusstring.h \
        vectorutils.h                   \
+       weakref.h                       \
        wrap.h                          \
        wrap_init.h
 
diff --git a/glib/glibmm/helperlist.h b/glib/glibmm/helperlist.h
new file mode 100644 (file)
index 0000000..751b42d
--- /dev/null
@@ -0,0 +1,151 @@
+#ifndef _GLIBMM_HELPERLIST_H
+#define _GLIBMM_HELPERLIST_H
+
+/* helperlist.h
+ *
+ * Copyright 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+// This is not hidden by GLIBMM_DISABLE_DEPRECATED
+// because gtkmm-2.24 still uses this type in its public API.
+// Note that gtkmm-2.24 itself is completely deprecated, so we really
+// can remove this whole class some time soon.
+//#ifndef GLIBMM_DISABLE_DEPRECATED
+
+#include <glibmm/containers.h>
+
+namespace Glib
+{
+
+// This class has some pure virtual methods which need to be implemented by derived classes.
+
+/**
+ * @deprecated This class should no longer be necessary. It has not been used
+ * by glibmm or gtkmm since gtkmm-2.4.
+ */
+template <typename T_Child, typename T_CppElement, typename T_Iterator>
+class HelperList
+{
+public:
+  HelperList() : gparent_(nullptr) {}
+
+  HelperList(GObject*
+      gp) // We use gp instead of gparent because that can cause warnings about a shadowed member.
+    : gparent_(gp)
+  {
+  }
+
+  virtual ~HelperList() noexcept {}
+
+  using value_type = T_Child;
+  using reference = value_type&;
+  using const_reference = const value_type&;
+
+  using iterator = T_Iterator;
+  using const_iterator = List_ConstIterator<iterator>;
+  using reverse_iterator = List_ReverseIterator<iterator>;
+  using const_reverse_iterator = List_ConstIterator<reverse_iterator>;
+
+  using element_type = T_CppElement;
+
+  using difference_type = std::size_t; // TODO Why not std::ptrdiff_t?
+  using size_type = std::size_t;
+
+  // These are implemented differently for each Helper List.
+  virtual iterator erase(iterator) = 0;
+
+  virtual void erase(iterator start, iterator stop)
+  {
+    while (start != stop)
+      start = erase(start); // Implemented in derived class.
+  }
+
+  virtual void remove(const_reference) = 0;
+
+  size_type size() const { return g_list_length(glist()); }
+
+  inline size_type max_size() { return size_type(-1); }
+  inline bool empty() { return glist() == nullptr; }
+
+  inline iterator begin() { return begin_(); }
+  inline iterator end() { return end_(); }
+
+  inline const_iterator begin() const { return const_iterator(begin_()); }
+  inline const_iterator end() const { return const_iterator(end_()); }
+
+  inline reverse_iterator rbegin() { return reverse_iterator(end_()); }
+  inline reverse_iterator rend() { return reverse_iterator(begin_()); }
+
+  inline const_reverse_iterator rbegin() const
+  {
+    return const_reverse_iterator(reverse_iterator(end_()));
+  }
+  inline const_reverse_iterator rend() const
+  {
+    return const_reverse_iterator(reverse_iterator(begin_()));
+  }
+
+  reference front() const { return *begin(); }
+
+  reference back() const { return *(--end()); }
+
+  reference operator[](size_type l) const
+  {
+    size_type j = 0;
+    iterator i;
+    for (i = begin(), j = 0; i != end() && j < l; ++i, ++j)
+      ;
+    return (*i);
+  }
+
+  //  iterator find(const_reference w)
+  //  {
+  //    iterator i = begin();
+  //    for(i = begin(); i != end() && (*i != w); i++);
+  //    return i;
+  //  }
+  //
+  //  iterator find(Widget& w)
+  //  {
+  //    iterator i;
+  //    for (i = begin(); i != end() && ((*i)->$1() != &w); i++);
+  //    return i;
+  //  }
+
+  // Derived classes might choose to reimplement these as public:
+  inline void pop_front() { erase(begin()); }
+  inline void pop_back() { erase(--end()); }
+
+  void clear() { erase(begin(), end()); }
+
+  GObject* gparent() { return gparent_; };
+  const GObject* gparent() const { return gparent_; };
+
+protected:
+  virtual GList*& glist() const = 0; // front of list
+
+  iterator begin_() const { return iterator(glist(), glist()); }
+
+  iterator end_() const { return iterator(glist(), (GList*)nullptr); }
+
+  GObject* gparent_;
+};
+
+} /* namespace Glib */
+
+//#endif //GLIBMM_DISABLE_DEPRECATED
+
+#endif /* _GLIBMM_HELPERLIST_H */
index 1a7cd1b..62a19f6 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_I18N_LIB_H
 #define _GLIBMM_I18N_LIB_H
 
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -17,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 // Include this file to define internationalization macros such as _().
index d35d9a7..17639ac 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_I18N_H
 #define _GLIBMM_I18N_H
 
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -17,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 // Include this file to define internationalization macros such as _().
index f42cdf5..ab96892 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/init.h>
 #include <glibmm/error.h>
-#include <locale>
-#include <clocale>
-#include <stdexcept>
-
-namespace
-{
-  bool init_to_users_preferred_locale = true;
-
-} // anonymous namespace
 
 namespace Glib
 {
-void set_init_to_users_preferred_locale(bool state)
-{
-  init_to_users_preferred_locale = state;
-}
-
-bool get_init_to_users_preferred_locale()
-{
-  return init_to_users_preferred_locale;
-}
 
-void init()
+void
+init()
 {
-  static bool is_initialized = false;
-
-  if (is_initialized)
-    return;
-
-  if (init_to_users_preferred_locale)
-  {
-    try
-    {
-      // Set the global locale for C++ functions and the locale for C functions
-      // to the user-preferred locale.
-      std::locale::global(std::locale(""));
-    }
-    catch (const std::runtime_error& ex)
-    {
-      g_warning("Can't set the global locale to the user's preferred locale.\n"
-        "   %s\n   The environment variable LANG may be wrong.\n", ex.what());
-    }
-  }
-  else
-  {
-    try
-    {
-      // Make the C++ locale equal to the C locale.
-      std::locale::global(std::locale(std::setlocale(LC_ALL, nullptr)));
-    }
-    catch (const std::runtime_error& ex)
-    {
-      g_warning("Can't make the global C++ locale equal to the C locale.\n"
-        "   %s\n   C locale = %s\n", ex.what(), std::setlocale(LC_ALL, nullptr));
-    }
-  }
-
   // Also calls Glib::wrap_register_init() and Glib::wrap_init().
   Glib::Error::register_init();
-
-  is_initialized = true;
 }
 
 } // namespace Glib
index a736093..1245cd3 100644 (file)
@@ -1,6 +1,9 @@
+// -*- c++ -*-
 #ifndef _GLIBMM_INIT_H
 #define _GLIBMM_INIT_H
 
+/* $Id$ */
+
 /* Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Glib
 {
 
 /** Initialize glibmm.
- *
- * You may call this more than once. Calls after the first one have no effect.
- * Sets the global locale as specified by set_init_to_users_preferred_locale().
- * You do not need to call %Glib::init() if you are using Gtk::Application,
- * because it calls %Glib::init() for you.
- *
- * @see set_init_to_users_preferred_locale()
+ * You may call this more than once.
+ * You do not need to call this if you are using Glib::MainLoop or Gtk::Main,
+ * because they call it for you.
  */
 void init();
 
-/** Instruct Glib::init() which global locale to set.
- *
- * To have the intended effect, this function must be called before init() is called.
- * Not calling it has the same effect as calling it with @a state = <tt>true</tt>.
- *
- * Note the confusing difference between C locale and "C" locale.
- * The C locale is the locale used by C code, set by std::setlocale(LC_ALL,&nbsp;locale_name).
- * The "C" locale is the classic locale, set by std::setlocale(LC_ALL,&nbsp;"C")
- * or std::locale::global(std::locale::classic()). It's the default global locale
- * in a C or C++ program.
- *
- * In a mixed C and C++ program, like a program using glibmm, having the C global
- * locale differ from std::locale::global() is error prone. Glib::init() tries
- * to avoid that.
- *
- * @param state If <tt>true</tt>, init() will set the C and C++ global locale
- *              to the user's preferred locale (std::locale::global(std::locale(""))).
- *              The user's preferred locale is set in the program's environment,
- *              usually with the LANG environment variable.<br>
- *              If <tt>false</tt>, init() will set the C++ global locale to the C global locale
- *              (std::locale::global(std::locale(std::setlocale(LC_ALL,&nbsp;nullptr)))).
- *
- * @newin{2,52}
- */
-void set_init_to_users_preferred_locale(bool state = true);
-
-/** Get the state, set with set_init_to_users_preferred_locale().
- * @returns The state, set with set_init_to_users_preferred_locale(); <tt>true</tt>
- *          if set_init_to_users_preferred_locale() has not been called.
- *
- * @newin{2,52}
- */
-bool get_init_to_users_preferred_locale();
-
 } // namespace Glib
 
 #endif /* _GLIBMM_INIT_H */
index 34f590e..d13c5d8 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/interface.h>
@@ -96,9 +95,10 @@ Interface::Interface(const Interface_Class& interface_class)
     }
     else // gobject_ == nullptr
     {
-      // The GObject is not instantiated yet. Add to the stored custom interface
-      // classes, and add the interface to the GType in the Glib::Object constructor.
-      add_custom_interface_class(&interface_class);
+      // The GObject is not instantiated yet. Add to the custom_interface_classes
+      // and add the interface in the Glib::Object constructor.
+      std::lock_guard<std::mutex> lock(extra_object_base_data_mutex);
+      extra_object_base_data[this].custom_interface_classes.emplace_back(&interface_class);
     }
   }
 }
@@ -156,7 +156,7 @@ Interface::get_base_type()
 RefPtr<ObjectBase>
 wrap_interface(GObject* object, bool take_copy)
 {
-  return Glib::make_refptr_for_instance<ObjectBase>(wrap_auto(object, take_copy));
+  return Glib::RefPtr<ObjectBase>(wrap_auto(object, take_copy));
 }
 
 } // namespace Glib
index 0b27914..9e35b5e 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_INTERFACE_H
 #define _GLIBMM_INTERFACE_H
 
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -17,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
diff --git a/glib/glibmm/listhandle.h b/glib/glibmm/listhandle.h
new file mode 100644 (file)
index 0000000..d9ffeb1
--- /dev/null
@@ -0,0 +1,412 @@
+#ifndef _GLIBMM_LISTHANDLE_H
+#define _GLIBMM_LISTHANDLE_H
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+#include <glibmm/containerhandle_shared.h>
+#include <glib.h>
+
+namespace Glib
+{
+
+namespace Container_Helpers
+{
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/* Create and fill a GList as efficient as possible.
+ * This requires bidirectional iterators.
+ */
+template <class Bi, class Tr>
+GList*
+create_list(Bi pbegin, Bi pend, Tr)
+{
+  GList* head = nullptr;
+
+  while (pend != pbegin)
+  {
+    // Use & to force a warning if the iterator returns a temporary object.
+    const void* const item = Tr::to_c_type(*&*--pend);
+    head = g_list_prepend(head, const_cast<void*>(item));
+  }
+
+  return head;
+}
+
+/* Create a GList from a 0-terminated input sequence.
+ * Build it in reverse order and reverse the whole list afterwards,
+ * because appending to the list would be horribly inefficient.
+ */
+template <class For, class Tr>
+GList*
+create_list(For pbegin, Tr)
+{
+  GList* head = nullptr;
+
+  while (*pbegin)
+  {
+    // Use & to force a warning if the iterator returns a temporary object.
+    const void* const item = Tr::to_c_type(*&*pbegin);
+    head = g_list_prepend(head, const_cast<void*>(item));
+    ++pbegin;
+  }
+
+  return g_list_reverse(head);
+}
+
+/* Convert from any container that supports bidirectional iterators.
+ */
+template <class Tr, class Cont>
+struct ListSourceTraits
+{
+  static GList* get_data(const Cont& cont)
+  {
+    return Glib::Container_Helpers::create_list(cont.begin(), cont.end(), Tr());
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+/* Convert from a 0-terminated array.  The Cont
+ * argument must be a pointer to the first element.
+ */
+template <class Tr, class Cont>
+struct ListSourceTraits<Tr, Cont*>
+{
+  static GList* get_data(const Cont* array)
+  {
+    return (array) ? Glib::Container_Helpers::create_list(array, Tr()) : nullptr;
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+template <class Tr, class Cont>
+struct ListSourceTraits<Tr, const Cont*> : ListSourceTraits<Tr, Cont*>
+{
+};
+
+/* Convert from a 0-terminated array.  The Cont argument must be a pointer
+ * to the first element.  For consistency, the array must be 0-terminated,
+ * even though the array size is known at compile time.
+ */
+template <class Tr, class Cont, std::size_t N>
+struct ListSourceTraits<Tr, Cont[N]>
+{
+  static GList* get_data(const Cont* array)
+  {
+    return Glib::Container_Helpers::create_list(array, array + (N - 1), Tr());
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+template <class Tr, class Cont, std::size_t N>
+struct ListSourceTraits<Tr, const Cont[N]> : ListSourceTraits<Tr, Cont[N]>
+{
+};
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+/**
+ * @ingroup ContHelpers
+ */
+template <class Tr>
+class ListHandleIterator
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using iterator_category = std::forward_iterator_tag;
+  using value_type = CppType;
+  using difference_type = std::ptrdiff_t;
+  using reference = value_type;
+  using pointer = void;
+
+  explicit inline ListHandleIterator(const GList* node);
+
+  inline value_type operator*() const;
+  inline ListHandleIterator<Tr>& operator++();
+  inline const ListHandleIterator<Tr> operator++(int);
+
+  inline bool operator==(const ListHandleIterator<Tr>& rhs) const;
+  inline bool operator!=(const ListHandleIterator<Tr>& rhs) const;
+
+private:
+  const GList* node_;
+};
+
+} // namespace Container_Helpers
+
+// TODO: Remove this when we can break glibmm API.
+/** This is an intermediate type. When a method takes this, or returns this, you
+ * should use a standard C++ container of your choice, such as std::list or
+ * std::vector.
+ *
+ * However, this is not used in new API. We now prefer to just use std::vector,
+ * which is less flexibile, but makes the API clearer.
+ *
+ * @ingroup ContHandles
+ */
+template <class T, class Tr = Glib::Container_Helpers::TypeTraits<T>>
+class ListHandle
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using value_type = CppType;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using const_iterator = Glib::Container_Helpers::ListHandleIterator<Tr>;
+  using iterator = Glib::Container_Helpers::ListHandleIterator<Tr>;
+
+  template <class Cont>
+  inline ListHandle(const Cont& container);
+
+  // Take over ownership of an array created by GTK+ functions.
+  inline ListHandle(GList* glist, Glib::OwnershipType ownership);
+
+  // Copying clears the ownership flag of the source handle.
+  inline ListHandle(const ListHandle<T, Tr>& other);
+
+  ~ListHandle() noexcept;
+
+  inline const_iterator begin() const;
+  inline const_iterator end() const;
+
+  template <class U>
+  inline operator std::vector<U>() const;
+  template <class U>
+  inline operator std::deque<U>() const;
+  template <class U>
+  inline operator std::list<U>() const;
+
+  template <class Cont>
+  inline void assign_to(Cont& container) const;
+
+  template <class Out>
+  inline void copy(Out pdest) const;
+
+  inline GList* data() const;
+  inline std::size_t size() const;
+  inline bool empty() const;
+
+private:
+  GList* plist_;
+  mutable Glib::OwnershipType ownership_;
+
+  // No copy assignment.
+  ListHandle<T, Tr>& operator=(const ListHandle<T, Tr>&);
+};
+
+/***************************************************************************/
+/*  Inline implementation                                                  */
+/***************************************************************************/
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+namespace Container_Helpers
+{
+
+/**** Glib::Container_Helpers::ListHandleIterator<> ************************/
+
+template <class Tr>
+inline ListHandleIterator<Tr>::ListHandleIterator(const GList* node) : node_(node)
+{
+}
+
+template <class Tr>
+inline typename ListHandleIterator<Tr>::value_type ListHandleIterator<Tr>::operator*() const
+{
+  return Tr::to_cpp_type(static_cast<typename Tr::CTypeNonConst>(node_->data));
+}
+
+template <class Tr>
+inline ListHandleIterator<Tr>& ListHandleIterator<Tr>::operator++()
+{
+  node_ = node_->next;
+  return *this;
+}
+
+template <class Tr>
+inline const ListHandleIterator<Tr> ListHandleIterator<Tr>::operator++(int)
+{
+  const ListHandleIterator<Tr> tmp(*this);
+  node_ = node_->next;
+  return tmp;
+}
+
+template <class Tr>
+inline bool
+ListHandleIterator<Tr>::operator==(const ListHandleIterator<Tr>& rhs) const
+{
+  return (node_ == rhs.node_);
+}
+
+template <class Tr>
+inline bool
+ListHandleIterator<Tr>::operator!=(const ListHandleIterator<Tr>& rhs) const
+{
+  return (node_ != rhs.node_);
+}
+
+} // namespace Container_Helpers
+
+/**** Glib::ListHandle<> ***************************************************/
+
+template <class T, class Tr>
+template <class Cont>
+inline ListHandle<T, Tr>::ListHandle(const Cont& container)
+: plist_(Glib::Container_Helpers::ListSourceTraits<Tr, Cont>::get_data(container)),
+  ownership_(Glib::Container_Helpers::ListSourceTraits<Tr, Cont>::initial_ownership)
+{
+}
+
+template <class T, class Tr>
+inline ListHandle<T, Tr>::ListHandle(GList* glist, Glib::OwnershipType ownership)
+: plist_(glist), ownership_(ownership)
+{
+}
+
+template <class T, class Tr>
+inline ListHandle<T, Tr>::ListHandle(const ListHandle<T, Tr>& other)
+: plist_(other.plist_), ownership_(other.ownership_)
+{
+  other.ownership_ = Glib::OWNERSHIP_NONE;
+}
+
+template <class T, class Tr>
+ListHandle<T, Tr>::~ListHandle() noexcept
+{
+  if (ownership_ != Glib::OWNERSHIP_NONE)
+  {
+    if (ownership_ != Glib::OWNERSHIP_SHALLOW)
+    {
+      // Deep ownership: release each container element.
+      for (GList* node = plist_; node != nullptr; node = node->next)
+        Tr::release_c_type(static_cast<typename Tr::CTypeNonConst>(node->data));
+    }
+    g_list_free(plist_);
+  }
+}
+
+template <class T, class Tr>
+inline typename ListHandle<T, Tr>::const_iterator
+ListHandle<T, Tr>::begin() const
+{
+  return Glib::Container_Helpers::ListHandleIterator<Tr>(plist_);
+}
+
+template <class T, class Tr>
+inline typename ListHandle<T, Tr>::const_iterator
+ListHandle<T, Tr>::end() const
+{
+  return Glib::Container_Helpers::ListHandleIterator<Tr>(nullptr);
+}
+
+template <class T, class Tr>
+template <class U>
+inline ListHandle<T, Tr>::operator std::vector<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::vector<U>(this->begin(), this->end());
+#else
+  std::vector<U> temp;
+  temp.reserve(this->size());
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline ListHandle<T, Tr>::operator std::deque<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::deque<U>(this->begin(), this->end());
+#else
+  std::deque<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline ListHandle<T, Tr>::operator std::list<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::list<U>(this->begin(), this->end());
+#else
+  std::list<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class Cont>
+inline void
+ListHandle<T, Tr>::assign_to(Cont& container) const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  container.assign(this->begin(), this->end());
+#else
+  Cont temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  container.swap(temp);
+#endif
+}
+
+template <class T, class Tr>
+template <class Out>
+inline void
+ListHandle<T, Tr>::copy(Out pdest) const
+{
+  std::copy(this->begin(), this->end(), pdest);
+}
+
+template <class T, class Tr>
+inline GList*
+ListHandle<T, Tr>::data() const
+{
+  return plist_;
+}
+
+template <class T, class Tr>
+inline std::size_t
+ListHandle<T, Tr>::size() const
+{
+  return g_list_length(plist_);
+}
+
+template <class T, class Tr>
+inline bool
+ListHandle<T, Tr>::empty() const
+{
+  return (plist_ == nullptr);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} // namespace Glib
+
+#endif /* _GLIBMM_LISTHANDLE_H */
index 1f51e51..68f2176 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h> // May define GLIBMM_DISABLE_DEPRECATED
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+// Include glibmm/thread.h first because we need it to be first to include <glib.h>,
+// so we can do an undef trick to still use deprecated API in the header:
+#include <glibmm/thread.h>
+#include <glibmm/threads.h>
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 #include <glibmm/main.h>
 #include <glibmm/exceptionhandler.h>
 #include <glibmm/wrap.h>
 #include <glibmm/iochannel.h>
 #include <algorithm>
+#include <map> // Needed until the next ABI break.
 
 namespace
 {
+#ifdef GLIBMM_DISABLE_DEPRECATED
 void
 time64_to_time_val(gint64 time64, Glib::TimeVal& time_val)
 {
@@ -34,14 +42,34 @@ time64_to_time_val(gint64 time64, Glib::TimeVal& time_val)
     static_cast<long>(time64 - static_cast<gint64>(seconds) * G_GINT64_CONSTANT(1000000));
   time_val = Glib::TimeVal(seconds, microseconds);
 }
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+// TODO: At the next ABI break, replace ExtraSourceData by new data members in Source.
+// Then the mutex is not necessary, but to keep the code thread-safe, use the
+// g_atomic_*() functions on these data elements.
+// These are new data members that can't be added to Glib::Source now,
+// because it would break ABI.
+struct ExtraSourceData
+{
+  ExtraSourceData() : ref_count(1), keep_wrapper(2) {}
+  int ref_count;
+  // When both Source::unreference() and SourceCallbackData::destroy_notify_callback()
+  // have decreased keep_wrapper, it's time to delete the C++ wrapper.
+  int keep_wrapper;
+};
+
+std::map<const Glib::Source*, ExtraSourceData> extra_source_data;
+// Source instances may be used in different threads.
+// Accesses to extra_source_data must be thread-safe.
+std::mutex extra_source_data_mutex;
 
-class SourceConnectionNode : public sigc::notifiable
+class SourceConnectionNode
 {
 public:
   explicit inline SourceConnectionNode(const sigc::slot_base& slot);
 
-  static void notify(sigc::notifiable* data);
-  static void destroy_notify_callback(sigc::notifiable* data);
+  static void* notify(void* data);
+  static void destroy_notify_callback(void* data);
 
   inline void install(GSource* source);
   inline sigc::slot_base* get_slot();
@@ -57,8 +85,8 @@ inline SourceConnectionNode::SourceConnectionNode(const sigc::slot_base& slot)
   slot_.set_parent(this, &SourceConnectionNode::notify);
 }
 
-void
-SourceConnectionNode::notify(sigc::notifiable* data)
+void*
+SourceConnectionNode::notify(void* data)
 {
   SourceConnectionNode* const self = static_cast<SourceConnectionNode*>(data);
 
@@ -73,11 +101,13 @@ SourceConnectionNode::notify(sigc::notifiable* data)
     // Destroying the object triggers execution of destroy_notify_handler(),
     // either immediately or later, so we leave that to do the deletion.
   }
+
+  return nullptr;
 }
 
 // static
 void
-SourceConnectionNode::destroy_notify_callback(sigc::notifiable* data)
+SourceConnectionNode::destroy_notify_callback(void* data)
 {
   SourceConnectionNode* const self = static_cast<SourceConnectionNode*>(data);
 
@@ -143,8 +173,17 @@ SourceCallbackData::destroy_notify_callback(void* data)
   if (self->node)
     SourceConnectionNode::destroy_notify_callback(self->node);
 
-  // destroy_notify_callback2() does nothing if self->wrapper == nullptr.
-  Glib::Source::destroy_notify_callback2(self->wrapper);
+  if (self->wrapper)
+  {
+    std::unique_lock<std::mutex> lock(extra_source_data_mutex);
+    if (--extra_source_data[self->wrapper].keep_wrapper == 0)
+    {
+      // No other reference exists to the wrapper. Delete it!
+      extra_source_data.erase(self->wrapper);
+      lock.unlock();
+      Glib::Source::destroy_notify_callback(self->wrapper);
+    }
+  }
 
   delete self;
 }
@@ -192,7 +231,7 @@ glibmm_source_callback(void* data)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    return (*static_cast<sigc::slot<bool()>*>(conn_data->get_slot()))();
+    return (*static_cast<sigc::slot<bool>*>(conn_data->get_slot()))();
   }
   catch (...)
   {
@@ -213,7 +252,7 @@ glibmm_source_callback_once(void* data)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    (*static_cast<sigc::slot<void()>*>(conn_data->get_slot()))();
+    (*static_cast<sigc::slot<void>*>(conn_data->get_slot()))();
   }
   catch (...)
   {
@@ -222,13 +261,6 @@ glibmm_source_callback_once(void* data)
   return 0; // Destroy the event source after one call
 }
 
-static void
-glibmm_source_destroy_notify_callback(void* data)
-{
-  SourceConnectionNode* const conn_data = static_cast<SourceConnectionNode*>(data);
-  SourceConnectionNode::destroy_notify_callback(conn_data);
-}
-
 static gboolean
 glibmm_iosource_callback(GIOChannel*, GIOCondition condition, void* data)
 {
@@ -238,7 +270,7 @@ glibmm_iosource_callback(GIOChannel*, GIOCondition condition, void* data)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    return (*static_cast<sigc::slot<bool(Glib::IOCondition)>*>(callback_data->node->get_slot()))(
+    return (*static_cast<sigc::slot<bool, Glib::IOCondition>*>(callback_data->node->get_slot()))(
       (Glib::IOCondition)condition);
   }
   catch (...)
@@ -260,7 +292,7 @@ glibmm_child_watch_callback(GPid pid, gint child_status, void* data)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    (*static_cast<sigc::slot<void(GPid, int)>*>(conn_data->get_slot()))(pid, child_status);
+    (*static_cast<sigc::slot<void, GPid, int>*>(conn_data->get_slot()))(pid, child_status);
   }
   catch (...)
   {
@@ -271,7 +303,7 @@ glibmm_child_watch_callback(GPid pid, gint child_status, void* data)
 
 static void
 glibmm_signal_connect_once(
-  const sigc::slot<void()>& slot, int priority, GSource* source, GMainContext* context)
+  const sigc::slot<void>& slot, int priority, GSource* source, GMainContext* context)
 {
   SourceConnectionNode* const conn_node = new SourceConnectionNode(slot);
 
@@ -279,7 +311,7 @@ glibmm_signal_connect_once(
     g_source_set_priority(source, priority);
 
   g_source_set_callback(source, &glibmm_source_callback_once, conn_node,
-    &glibmm_source_destroy_notify_callback);
+    &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context);
@@ -294,7 +326,7 @@ glibmm_main_context_invoke_callback(void* data)
   try
   {
     // Recreate the specific slot from the generic slot node.
-    return (*static_cast<sigc::slot<bool()>*>(slot))();
+    return (*static_cast<sigc::slot<bool>*>(slot))();
   }
   catch (...)
   {
@@ -334,7 +366,7 @@ PollFD::PollFD(PollFD::fd_t fd)
 PollFD::PollFD(PollFD::fd_t fd, IOCondition events)
 {
   gobject_.fd = fd;
-  gobject_.events = static_cast<decltype(gobject_.events)>(events);
+  gobject_.events = events;
   gobject_.revents = 0;
 }
 
@@ -346,7 +378,7 @@ inline SignalTimeout::SignalTimeout(GMainContext* context) : context_(context)
 
 /* Note that this is our equivalent of g_timeout_add(). */
 sigc::connection
-SignalTimeout::connect(const sigc::slot<bool()>& slot, unsigned int interval, int priority)
+SignalTimeout::connect(const sigc::slot<bool>& slot, unsigned int interval, int priority)
 {
   SourceConnectionNode* const conn_node = new SourceConnectionNode(slot);
   const sigc::connection connection(*conn_node->get_slot());
@@ -357,8 +389,7 @@ SignalTimeout::connect(const sigc::slot<bool()>& slot, unsigned int interval, in
     g_source_set_priority(source, priority);
 
   g_source_set_callback(
-    source, &glibmm_source_callback, conn_node,
-    &glibmm_source_destroy_notify_callback);
+    source, &glibmm_source_callback, conn_node, &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context_);
@@ -368,7 +399,7 @@ SignalTimeout::connect(const sigc::slot<bool()>& slot, unsigned int interval, in
 }
 
 void
-SignalTimeout::connect_once(const sigc::slot<void()>& slot, unsigned int interval, int priority)
+SignalTimeout::connect_once(const sigc::slot<void>& slot, unsigned int interval, int priority)
 {
   GSource* const source = g_timeout_source_new(interval);
   glibmm_signal_connect_once(slot, priority, source, context_);
@@ -376,7 +407,7 @@ SignalTimeout::connect_once(const sigc::slot<void()>& slot, unsigned int interva
 
 /* Note that this is our equivalent of g_timeout_add_seconds(). */
 sigc::connection
-SignalTimeout::connect_seconds(const sigc::slot<bool()>& slot, unsigned int interval, int priority)
+SignalTimeout::connect_seconds(const sigc::slot<bool>& slot, unsigned int interval, int priority)
 {
   SourceConnectionNode* const conn_node = new SourceConnectionNode(slot);
   const sigc::connection connection(*conn_node->get_slot());
@@ -387,8 +418,7 @@ SignalTimeout::connect_seconds(const sigc::slot<bool()>& slot, unsigned int inte
     g_source_set_priority(source, priority);
 
   g_source_set_callback(
-    source, &glibmm_source_callback, conn_node,
-    &glibmm_source_destroy_notify_callback);
+    source, &glibmm_source_callback, conn_node, &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context_);
@@ -399,7 +429,7 @@ SignalTimeout::connect_seconds(const sigc::slot<bool()>& slot, unsigned int inte
 
 void
 SignalTimeout::connect_seconds_once(
-  const sigc::slot<void()>& slot, unsigned int interval, int priority)
+  const sigc::slot<void>& slot, unsigned int interval, int priority)
 {
   GSource* const source = g_timeout_source_new_seconds(interval);
   glibmm_signal_connect_once(slot, priority, source, context_);
@@ -418,7 +448,7 @@ inline SignalIdle::SignalIdle(GMainContext* context) : context_(context)
 }
 
 sigc::connection
-SignalIdle::connect(const sigc::slot<bool()>& slot, int priority)
+SignalIdle::connect(const sigc::slot<bool>& slot, int priority)
 {
   SourceConnectionNode* const conn_node = new SourceConnectionNode(slot);
   const sigc::connection connection(*conn_node->get_slot());
@@ -429,8 +459,7 @@ SignalIdle::connect(const sigc::slot<bool()>& slot, int priority)
     g_source_set_priority(source, priority);
 
   g_source_set_callback(
-    source, &glibmm_source_callback, conn_node,
-    &glibmm_source_destroy_notify_callback);
+    source, &glibmm_source_callback, conn_node, &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context_);
@@ -440,7 +469,7 @@ SignalIdle::connect(const sigc::slot<bool()>& slot, int priority)
 }
 
 void
-SignalIdle::connect_once(const sigc::slot<void()>& slot, int priority)
+SignalIdle::connect_once(const sigc::slot<void>& slot, int priority)
 {
   GSource* const source = g_idle_source_new();
   glibmm_signal_connect_once(slot, priority, source, context_);
@@ -460,7 +489,7 @@ inline SignalIO::SignalIO(GMainContext* context) : context_(context)
 
 sigc::connection
 SignalIO::connect(
-  const sigc::slot<bool(IOCondition)>& slot, PollFD::fd_t fd, IOCondition condition, int priority)
+  const sigc::slot<bool, IOCondition>& slot, PollFD::fd_t fd, IOCondition condition, int priority)
 {
   const auto source = IOSource::create(fd, condition);
 
@@ -475,7 +504,7 @@ SignalIO::connect(
 }
 
 sigc::connection
-SignalIO::connect(const sigc::slot<bool(IOCondition)>& slot, const Glib::RefPtr<IOChannel>& channel,
+SignalIO::connect(const sigc::slot<bool, IOCondition>& slot, const Glib::RefPtr<IOChannel>& channel,
   IOCondition condition, int priority)
 {
   const auto source = IOSource::create(channel, condition);
@@ -503,7 +532,7 @@ inline SignalChildWatch::SignalChildWatch(GMainContext* context) : context_(cont
 }
 
 sigc::connection
-SignalChildWatch::connect(const sigc::slot<void(GPid, int)>& slot, GPid pid, int priority)
+SignalChildWatch::connect(const sigc::slot<void, GPid, int>& slot, GPid pid, int priority)
 {
   SourceConnectionNode* const conn_node = new SourceConnectionNode(slot);
   const sigc::connection connection(*conn_node->get_slot());
@@ -513,9 +542,8 @@ SignalChildWatch::connect(const sigc::slot<void(GPid, int)>& slot, GPid pid, int
   if (priority != G_PRIORITY_DEFAULT)
     g_source_set_priority(source, priority);
 
-  g_source_set_callback(source, (GSourceFunc)&glibmm_child_watch_callback,
-    conn_node,
-    &glibmm_source_destroy_notify_callback);
+  g_source_set_callback(source, (GSourceFunc)&glibmm_child_watch_callback, conn_node,
+    &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context_);
@@ -536,7 +564,7 @@ signal_child_watch()
 Glib::RefPtr<MainContext>
 MainContext::create()
 {
-  return Glib::make_refptr_for_instance<MainContext>(reinterpret_cast<MainContext*>(g_main_context_new()));
+  return Glib::RefPtr<MainContext>(reinterpret_cast<MainContext*>(g_main_context_new()));
 }
 
 // static
@@ -570,6 +598,20 @@ MainContext::acquire()
   return g_main_context_acquire(gobj());
 }
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+bool
+MainContext::wait(Glib::Cond& cond, Glib::Mutex& mutex)
+{
+  return g_main_context_wait(gobj(), cond.gobj(), mutex.gobj());
+}
+
+bool
+MainContext::wait(Glib::Threads::Cond& cond, Glib::Threads::Mutex& mutex)
+{
+  return g_main_context_wait(gobj(), cond.gobj(), mutex.gobj());
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 void
 MainContext::release()
 {
@@ -648,10 +690,10 @@ MainContext::remove_poll(PollFD& fd)
 }
 
 void
-MainContext::invoke(const sigc::slot<bool()>& slot, int priority)
+MainContext::invoke(const sigc::slot<bool>& slot, int priority)
 {
   // Make a copy of slot on the heap.
-  sigc::slot_base* const slot_copy = new sigc::slot<bool()>(slot);
+  sigc::slot_base* const slot_copy = new sigc::slot<bool>(slot);
 
   g_main_context_invoke_full(gobj(), priority, glibmm_main_context_invoke_callback, slot_copy,
     glibmm_main_context_invoke_destroy_notify_callback);
@@ -718,7 +760,7 @@ wrap(GMainContext* gobject, bool take_copy)
   if (take_copy && gobject)
     g_main_context_ref(gobject);
 
-  return Glib::make_refptr_for_instance<MainContext>(reinterpret_cast<MainContext*>(gobject));
+  return Glib::RefPtr<MainContext>(reinterpret_cast<MainContext*>(gobject));
 }
 
 /**** Glib::MainLoop *******************************************************/
@@ -726,13 +768,13 @@ wrap(GMainContext* gobject, bool take_copy)
 Glib::RefPtr<MainLoop>
 MainLoop::create(bool is_running)
 {
-  return Glib::make_refptr_for_instance<MainLoop>(reinterpret_cast<MainLoop*>(g_main_loop_new(nullptr, is_running)));
+  return Glib::RefPtr<MainLoop>(reinterpret_cast<MainLoop*>(g_main_loop_new(nullptr, is_running)));
 }
 
 Glib::RefPtr<MainLoop>
 MainLoop::create(const Glib::RefPtr<MainContext>& context, bool is_running)
 {
-  return Glib::make_refptr_for_instance<MainLoop>(
+  return Glib::RefPtr<MainLoop>(
     reinterpret_cast<MainLoop*>(g_main_loop_new(Glib::unwrap(context), is_running)));
 }
 
@@ -804,7 +846,7 @@ wrap(GMainLoop* gobject, bool take_copy)
   if (take_copy && gobject)
     g_main_loop_ref(gobject);
 
-  return Glib::make_refptr_for_instance<MainLoop>(reinterpret_cast<MainLoop*>(gobject));
+  return Glib::RefPtr<MainLoop>(reinterpret_cast<MainLoop*>(gobject));
 }
 
 /**** Glib::Source *********************************************************/
@@ -883,17 +925,30 @@ Source::gobj_copy() const
 void
 Source::reference() const
 {
-  ++ref_count_;
+  std::lock_guard<std::mutex> lock(extra_source_data_mutex);
+  ++extra_source_data[this].ref_count;
 }
 
 void
 Source::unreference() const
 {
-  if (--ref_count_ == 0)
+  std::unique_lock<std::mutex> lock(extra_source_data_mutex);
+  if (--extra_source_data[this].ref_count == 0)
   {
     GSource* const tmp_gobject = gobject_;
 
-    destroy_notify_callback2(const_cast<Source*>(this));
+    if (--extra_source_data[this].keep_wrapper == 0)
+    {
+      // The last reference from a RefPtr<Source> has been deleted, and
+      // SourceCallbackData::destroy_notify_callback() has been called while
+      // extra_source_data[this].keep_wrapper was > 1.
+      // Delete the wrapper!
+      extra_source_data.erase(this);
+      lock.unlock();
+      destroy_notify_callback(const_cast<Source*>(this));
+    }
+    else
+      lock.unlock();
 
     // Drop the one and only GSource reference held by the C++ wrapper.
     // If the GSource instance is attached to a main context, the GMainContext
@@ -963,6 +1018,16 @@ Source::remove_poll(Glib::PollFD& poll_fd)
   g_source_remove_poll(gobject_, poll_fd.gobj());
 }
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+void
+Source::get_current_time(Glib::TimeVal& current_time)
+{
+  g_source_get_current_time(gobject_, &current_time);
+}
+G_GNUC_END_IGNORE_DEPRECATIONS
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 gint64
 Source::get_time() const
 {
@@ -1034,19 +1099,17 @@ Source::dispatch_vfunc(GSource*, GSourceFunc callback, void* user_data)
 
 // static
 void
-Source::destroy_notify_callback2(void* data)
+Source::destroy_notify_callback(void* data)
 {
   if (data)
   {
     Source* const self = static_cast<Source*>(data);
-    if (--self->keep_wrapper_ == 0)
-    {
-      // gobject_ is already invalid at this point.
-      self->gobject_ = nullptr;
 
-      // No exception checking: if the dtor throws, you're out of luck anyway.
-      delete self;
-    }
+    // gobject_ is already invalid at this point.
+    self->gobject_ = nullptr;
+
+    // No exception checking: if the dtor throws, you're out of luck anyway.
+    delete self;
   }
 }
 
@@ -1062,8 +1125,7 @@ Source::attach_signal_source(const sigc::slot_base& slot, int priority, GSource*
     g_source_set_priority(source, priority);
 
   g_source_set_callback(
-    source, callback_func, conn_node,
-    &glibmm_source_destroy_notify_callback);
+    source, callback_func, conn_node, &SourceConnectionNode::destroy_notify_callback);
 
   conn_node->install(source);
   g_source_attach(source, context);
@@ -1094,11 +1156,11 @@ Source::get_slot_from_callback_data(void* data)
 Glib::RefPtr<TimeoutSource>
 TimeoutSource::create(unsigned int interval)
 {
-  return Glib::make_refptr_for_instance<TimeoutSource>(new TimeoutSource(interval));
+  return Glib::RefPtr<TimeoutSource>(new TimeoutSource(interval));
 }
 
 sigc::connection
-TimeoutSource::connect(const sigc::slot<bool()>& slot)
+TimeoutSource::connect(const sigc::slot<bool>& slot)
 {
   return connect_generic(slot);
 }
@@ -1117,7 +1179,11 @@ bool
 TimeoutSource::prepare(int& timeout)
 {
   Glib::TimeVal current_time;
+#ifndef GLIBMM_DISABLE_DEPRECATED
+  get_current_time(current_time);
+#else
   time64_to_time_val(get_time(), current_time);
+#endif // GLIBMM_DISABLE_DEPRECATED
 
   Glib::TimeVal remaining = expiration_;
   remaining.subtract(current_time);
@@ -1154,7 +1220,11 @@ bool
 TimeoutSource::check()
 {
   Glib::TimeVal current_time;
+#ifndef GLIBMM_DISABLE_DEPRECATED
+  get_current_time(current_time);
+#else
   time64_to_time_val(get_time(), current_time);
+#endif // GLIBMM_DISABLE_DEPRECATED
 
   return (expiration_ <= current_time);
 }
@@ -1162,11 +1232,15 @@ TimeoutSource::check()
 bool
 TimeoutSource::dispatch(sigc::slot_base* slot)
 {
-  const bool again = (*static_cast<sigc::slot<bool()>*>(slot))();
+  const bool again = (*static_cast<sigc::slot<bool>*>(slot))();
 
   if (again)
   {
+#ifndef GLIBMM_DISABLE_DEPRECATED
+    get_current_time(expiration_);
+#else
     time64_to_time_val(get_time(), expiration_);
+#endif // GLIBMM_DISABLE_DEPRECATED
     expiration_.add_milliseconds(std::min<unsigned long>(G_MAXLONG, interval_));
   }
 
@@ -1179,11 +1253,11 @@ TimeoutSource::dispatch(sigc::slot_base* slot)
 Glib::RefPtr<IdleSource>
 IdleSource::create()
 {
-  return Glib::make_refptr_for_instance<IdleSource>(new IdleSource());
+  return Glib::RefPtr<IdleSource>(new IdleSource());
 }
 
 sigc::connection
-IdleSource::connect(const sigc::slot<bool()>& slot)
+IdleSource::connect(const sigc::slot<bool>& slot)
 {
   return connect_generic(slot);
 }
@@ -1213,7 +1287,7 @@ IdleSource::check()
 bool
 IdleSource::dispatch(sigc::slot_base* slot)
 {
-  return (*static_cast<sigc::slot<bool()>*>(slot))();
+  return (*static_cast<sigc::slot<bool>*>(slot))();
 }
 
 /**** Glib::IOSource *******************************************************/
@@ -1222,23 +1296,17 @@ IdleSource::dispatch(sigc::slot_base* slot)
 Glib::RefPtr<IOSource>
 IOSource::create(PollFD::fd_t fd, IOCondition condition)
 {
-  return Glib::make_refptr_for_instance<IOSource>(new IOSource(fd, condition));
+  return Glib::RefPtr<IOSource>(new IOSource(fd, condition));
 }
 
 Glib::RefPtr<IOSource>
 IOSource::create(const Glib::RefPtr<IOChannel>& channel, IOCondition condition)
 {
-  return Glib::make_refptr_for_instance<IOSource>(new IOSource(channel, condition));
-}
-
-Glib::RefPtr<IOSource>
-IOSource::create(GIOChannel* channel, IOCondition condition)
-{
-  return Glib::make_refptr_for_instance<IOSource>(new IOSource(channel, condition));
+  return Glib::RefPtr<IOSource>(new IOSource(channel, condition));
 }
 
 sigc::connection
-IOSource::connect(const sigc::slot<bool(IOCondition)>& slot)
+IOSource::connect(const sigc::slot<bool, IOCondition>& slot)
 {
   return connect_generic(slot);
 }
@@ -1254,12 +1322,6 @@ IOSource::IOSource(const Glib::RefPtr<IOChannel>& channel, IOCondition condition
 {
 }
 
-IOSource::IOSource(GIOChannel* channel, IOCondition condition)
-: Source(g_io_create_watch(channel, (GIOCondition)condition),
-    (GSourceFunc)&glibmm_iosource_callback)
-{
-}
-
 IOSource::IOSource(GSource* cast_item, GSourceFunc callback_func) : Source(cast_item, callback_func)
 {
 }
@@ -1278,13 +1340,13 @@ IOSource::prepare(int& timeout)
 bool
 IOSource::check()
 {
-  return static_cast<int>(poll_fd_.get_revents() & poll_fd_.get_events()) != 0;
+  return ((poll_fd_.get_revents() & poll_fd_.get_events()) != 0);
 }
 
 bool
 IOSource::dispatch(sigc::slot_base* slot)
 {
-  return (*static_cast<sigc::slot<bool(IOCondition)>*>(slot))(poll_fd_.get_revents());
+  return (*static_cast<sigc::slot<bool, IOCondition>*>(slot))(poll_fd_.get_revents());
 }
 
 } // namespace Glib
index 3306500..1b9a853 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
 #include <sigc++/sigc++.h>
 #include <vector>
 #include <cstddef>
-#include <atomic>
 
 namespace Glib
 {
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+class Cond;
+class Mutex;
+
+namespace Threads
+{
+class Cond;
+class Mutex;
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 /** @defgroup MainLoop The Main Event Loop
  * Manages all available sources of events.
  * @{
@@ -48,10 +57,10 @@ public:
   void set_fd(fd_t fd) { gobject_.fd = fd; }
   fd_t get_fd() const { return gobject_.fd; }
 
-  void set_events(IOCondition events) { gobject_.events = static_cast<decltype(gobject_.events)>(events); }
+  void set_events(IOCondition events) { gobject_.events = events; }
   IOCondition get_events() const { return static_cast<IOCondition>(gobject_.events); }
 
-  void set_revents(IOCondition revents) { gobject_.revents = static_cast<decltype(gobject_.revents)>(revents); }
+  void set_revents(IOCondition revents) { gobject_.revents = revents; }
   IOCondition get_revents() const { return static_cast<IOCondition>(gobject_.revents); }
 
   GPollFD* gobj() { return &gobject_; }
@@ -61,6 +70,16 @@ private:
   GPollFD gobject_;
 };
 
+// Concerning SignalTimeout::connect_once(), SignalTimeout::connect_seconds_once()
+// and SignalIdle::connect_once():
+// See https://bugzilla.gnome.org/show_bug.cgi?id=396963 and
+// http://bugzilla.gnome.org/show_bug.cgi?id=512348 about the sigc::trackable issue.
+// It's recommended to replace sigc::slot<void>& by std::function<void()>& in
+// Threads::Thread::create() and ThreadPool::push() at the next ABI break.
+// Such a replacement would be a mixed blessing in SignalTimeout and SignalIdle.
+// In a single-threaded program auto-disconnection of trackable slots is safe
+// and can be useful.
+
 class SignalTimeout
 {
 public:
@@ -104,7 +123,7 @@ public:
    * @return A connection handle, which can be used to disconnect the handler.
    */
   sigc::connection connect(
-    const sigc::slot<bool()>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
+    const sigc::slot<bool>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
 
   /** Connects a timeout handler that runs only once.
    * This method takes a function pointer to a function with a void return
@@ -126,7 +145,7 @@ public:
    * @param priority The priority of the new event source.
    */
   void connect_once(
-    const sigc::slot<void()>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
+    const sigc::slot<void>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
 
   /** Connects a timeout handler with whole second granularity.
    *
@@ -164,7 +183,7 @@ public:
    * @newin{2,14}
    */
   sigc::connection connect_seconds(
-    const sigc::slot<bool()>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
+    const sigc::slot<bool>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
 
   /** Connects a timeout handler that runs only once with whole second
    *  granularity.
@@ -188,7 +207,7 @@ public:
    * @param priority The priority of the new event source.
    */
   void connect_seconds_once(
-    const sigc::slot<void()>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
+    const sigc::slot<void>& slot, unsigned int interval, int priority = PRIORITY_DEFAULT);
 
 private:
   GMainContext* context_;
@@ -226,7 +245,7 @@ public:
    * @param priority The priority of the new event source.
    * @return A connection handle, which can be used to disconnect the handler.
    */
-  sigc::connection connect(const sigc::slot<bool()>& slot, int priority = PRIORITY_DEFAULT_IDLE);
+  sigc::connection connect(const sigc::slot<bool>& slot, int priority = PRIORITY_DEFAULT_IDLE);
 
   /** Connects an idle handler that runs only once.
    * This method takes a function pointer to a function with a void return
@@ -246,7 +265,7 @@ public:
    * @endcode
    * @param priority The priority of the new event source.
    */
-  void connect_once(const sigc::slot<void()>& slot, int priority = PRIORITY_DEFAULT_IDLE);
+  void connect_once(const sigc::slot<void>& slot, int priority = PRIORITY_DEFAULT_IDLE);
 
 private:
   GMainContext* context_;
@@ -287,7 +306,7 @@ public:
    * @param priority The priority of the new event source.
    * @return A connection handle, which can be used to disconnect the handler.
    */
-  sigc::connection connect(const sigc::slot<bool(IOCondition)>& slot, PollFD::fd_t fd, IOCondition condition,
+  sigc::connection connect(const sigc::slot<bool, IOCondition>& slot, PollFD::fd_t fd, IOCondition condition,
     int priority = PRIORITY_DEFAULT);
 
   /** Connects an I/O handler that watches an I/O channel.
@@ -316,7 +335,7 @@ public:
    * @param priority The priority of the new event source.
    * @return A connection handle, which can be used to disconnect the handler.
    */
-  sigc::connection connect(const sigc::slot<bool(IOCondition)>& slot,
+  sigc::connection connect(const sigc::slot<bool, IOCondition>& slot,
     const Glib::RefPtr<IOChannel>& channel, IOCondition condition, int priority = PRIORITY_DEFAULT);
 
 private:
@@ -348,7 +367,7 @@ public:
    * @return A connection handle, which can be used to disconnect the handler.
    */
   sigc::connection connect(
-    const sigc::slot<void(GPid, int)>& slot, GPid pid, int priority = PRIORITY_DEFAULT);
+    const sigc::slot<void, GPid, int>& slot, GPid pid, int priority = PRIORITY_DEFAULT);
 
 private:
   GMainContext* context_;
@@ -435,6 +454,36 @@ public:
    */
   bool acquire();
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+  /** Tries to become the owner of the specified context, as with acquire(). But if another thread
+   * is the owner,
+   * atomically drop mutex and wait on cond until that owner releases ownership or until cond is
+   * signaled, then try
+   * again (once) to become the owner.
+   * @param cond A condition variable.
+   * @param mutex A mutex, currently held.
+   * @return true if the operation succeeded, and this thread is now the owner of context.
+   *
+   * @deprecated Use wait(Glib::Threads::Cond& cond, Glib::Threads::Mutex& mutex) instead.
+   */
+  bool wait(Glib::Cond& cond, Glib::Mutex& mutex);
+
+  // Deprecated mostly because it uses deprecated Glib::Threads:: for parameters.
+  /** Tries to become the owner of the specified context, as with acquire(). But if another thread
+   * is the owner,
+   * atomically drop mutex and wait on cond until that owner releases ownership or until cond is
+   * signaled, then try
+   * again (once) to become the owner.
+   * @param cond A condition variable.
+   * @param mutex A mutex, currently held.
+   * @return true if the operation succeeded, and this thread is now the owner of context.
+   *
+   * @deprecated Please use the underlying g_main_context_wait() function if you really need this
+   * functionality.
+   */
+  bool wait(Glib::Threads::Cond& cond, Glib::Threads::Mutex& mutex);
+#endif // GLIBMM_DISABLE_DEPRECATED
+
   /** Releases ownership of a context previously acquired by this thread with acquire(). If the
    * context was acquired
    * multiple times, the only release ownership when release() is called as many times as it was
@@ -535,7 +584,7 @@ public:
    *
    * @newin{2,38}
    */
-  void invoke(const sigc::slot<bool()>& slot, int priority = PRIORITY_DEFAULT);
+  void invoke(const sigc::slot<bool>& slot, int priority = PRIORITY_DEFAULT);
 
   /** Timeout signal, attached to this MainContext.
    * @return A signal proxy; you want to use SignalTimeout::connect().
@@ -773,13 +822,6 @@ protected:
 private:
   GSource* gobject_;
 
-  mutable std::atomic_int ref_count_ {1};
-  // The C++ wrapper (the Source instance) is deleted, when both Source::unreference()
-  // and SourceCallbackData::destroy_notify_callback() have decreased keep_wrapper_
-  // by calling destroy_notify_callback2().
-  // https://bugzilla.gnome.org/show_bug.cgi?id=561885
-  std::atomic_int keep_wrapper_ {2};
-
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
   static inline Source* get_wrapper(GSource* source);
 
@@ -790,8 +832,7 @@ private:
   static gboolean dispatch_vfunc(GSource* source, GSourceFunc callback, void* user_data);
 
 public:
-  // Really destroys the object during the second call. See keep_wrapper_.
-  static void destroy_notify_callback2(void* data);
+  static void destroy_notify_callback(void* data);
   // Used by SignalXyz, possibly in other files.
   static sigc::connection attach_signal_source(const sigc::slot_base& slot, int priority,
     GSource* source, GMainContext* context, GSourceFunc callback_func);
@@ -808,7 +849,7 @@ public:
   using CppObjectType = Glib::TimeoutSource;
 
   static Glib::RefPtr<TimeoutSource> create(unsigned int interval);
-  sigc::connection connect(const sigc::slot<bool()>& slot);
+  sigc::connection connect(const sigc::slot<bool>& slot);
 
 protected:
   explicit TimeoutSource(unsigned int interval);
@@ -831,7 +872,7 @@ public:
   using CppObjectType = Glib::IdleSource;
 
   static Glib::RefPtr<IdleSource> create();
-  sigc::connection connect(const sigc::slot<bool()>& slot);
+  sigc::connection connect(const sigc::slot<bool>& slot);
 
 protected:
   IdleSource();
@@ -850,7 +891,7 @@ public:
   static Glib::RefPtr<IOSource> create(PollFD::fd_t fd, IOCondition condition);
   static Glib::RefPtr<IOSource> create(
     const Glib::RefPtr<IOChannel>& channel, IOCondition condition);
-  sigc::connection connect(const sigc::slot<bool(IOCondition)>& slot);
+  sigc::connection connect(const sigc::slot<bool, IOCondition>& slot);
 
 protected:
   IOSource(PollFD::fd_t fd, IOCondition condition);
@@ -870,14 +911,6 @@ protected:
   bool dispatch(sigc::slot_base* slot) override;
 
 private:
-  friend IOChannel;
-
-  // This is just to avoid the need for Gio::Socket to create a RefPtr<> to itself.
-  static Glib::RefPtr<IOSource> create(GIOChannel* channel, IOCondition condition);
-
-  // This is just to avoid the need for Gio::Socket to create a RefPtr<> to itself.
-  IOSource(GIOChannel* channel, IOCondition condition);
-
   PollFD poll_fd_;
 };
 
index 58166b7..9169846 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/object.h>
 
 #include <string.h>
 
+// Weak references:
+// I'm not sure what the point of these are apart from being a hacky way out of circular references,
+// but maybe we could make it easier to use them by making a Java Reference Object -style class like
+// so:
+// Glib::WeakRef<SomeDerivedObject> weakrefSomeObject(object1);
+// ...
+// if(weakrefSomeObject->isStillAlive())
+// {
+//   weakrefSomeObject->some_method();
+// }
+// else
+// {
+//   //Deal with it, maybe recreating the object.
+// }
+//
+// Without this, the coder has to define his own signal handler which sets his own isStillAlive
+// boolean.
+// weakrefSomeObject<> could still have its own signal_destroyed signal so that coders can choose to
+// deal
+// with the destruction as soon as it happens instead of just checking later before they try to use
+// it.
+
 namespace Glib
 {
 
 ConstructParams::ConstructParams(const Glib::Class& glibmm_class_)
-: glibmm_class(glibmm_class_), n_parameters(0), parameter_names(nullptr), parameter_values(nullptr)
+: glibmm_class(glibmm_class_), n_parameters(0), parameters(nullptr)
 {
 }
 
@@ -47,7 +68,7 @@ ConstructParams::ConstructParams(const Glib::Class& glibmm_class_)
  */
 ConstructParams::ConstructParams(
   const Glib::Class& glibmm_class_, const char* first_property_name, ...)
-: glibmm_class(glibmm_class_), n_parameters(0), parameter_names(nullptr), parameter_values(nullptr)
+: glibmm_class(glibmm_class_), n_parameters(0), parameters(nullptr)
 {
   va_list var_args;
   va_start(var_args, first_property_name);
@@ -70,25 +91,23 @@ ConstructParams::ConstructParams(
       break;
     }
 
-    if (n_parameters >= n_alloced_params) {
-      parameter_names = g_renew(const char*, parameter_names, n_alloced_params += 8);
-      parameter_values = g_renew(GValue, parameter_values, n_alloced_params += 8);
-    }
+    if (n_parameters >= n_alloced_params)
+      parameters = g_renew(GParameter, parameters, n_alloced_params += 8);
+
+    GParameter& param = parameters[n_parameters];
 
-    auto& param_name = parameter_names[n_parameters];
-    auto& param_value = parameter_values[n_parameters];
-    param_name = name;
-    param_value.g_type = 0;
+    param.name = name;
+    param.value.g_type = 0;
 
     // Fill the GValue with the current vararg, and move on to the next one.
-    g_value_init(&param_value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-    G_VALUE_COLLECT(&param_value, var_args, 0, &collect_error);
+    g_value_init(&param.value, G_PARAM_SPEC_VALUE_TYPE(pspec));
+    G_VALUE_COLLECT(&param.value, var_args, 0, &collect_error);
 
     if (collect_error)
     {
       g_warning("Glib::ConstructParams::ConstructParams(): %s", collect_error);
       g_free(collect_error);
-      g_value_unset(&param_value);
+      g_value_unset(&param.value);
       break;
     }
 
@@ -102,13 +121,30 @@ ConstructParams::ConstructParams(
 
 ConstructParams::~ConstructParams() noexcept
 {
-  while (n_parameters > 0) {
-    auto& param_value = parameter_values[--n_parameters];
-    g_value_unset(&param_value);
-  }
+  while (n_parameters > 0)
+    g_value_unset(&parameters[--n_parameters].value);
 
-  g_free(parameter_names);
-  g_free(parameter_values);
+  g_free(parameters);
+}
+
+/*
+ * Some compilers require the existence of a copy constructor in certain
+ * usage contexts.  This implementation is fully functional, but unlikely
+ * to be ever actually called due to optimization.
+ */
+ConstructParams::ConstructParams(const ConstructParams& other)
+: glibmm_class(other.glibmm_class),
+  n_parameters(other.n_parameters),
+  parameters(g_new(GParameter, n_parameters))
+{
+  for (unsigned int i = 0; i < n_parameters; ++i)
+  {
+    parameters[i].name = other.parameters[i].name;
+    parameters[i].value.g_type = 0;
+
+    g_value_init(&parameters[i].value, G_VALUE_TYPE(&other.parameters[i].value));
+    g_value_copy(&other.parameters[i].value, &parameters[i].value);
+  }
 }
 
 /**** Glib::Object_Class ***************************************************/
@@ -157,19 +193,27 @@ Object::Object()
 
   if (custom_type_name_ && !is_anonymous_custom_())
   {
-    object_class_.init();
+    Class::interface_class_vector_type custom_interface_classes;
+
+    {
+      std::lock_guard<std::mutex> lock(extra_object_base_data_mutex);
+      const extra_object_base_data_type::iterator iter = extra_object_base_data.find(this);
+      if (iter != extra_object_base_data.end())
+      {
+        custom_interface_classes = iter->second.custom_interface_classes;
+        extra_object_base_data.erase(iter);
+      }
+    }
 
+    object_class_.init();
     // This creates a type that is derived (indirectly) from GObject.
-    object_type = object_class_.clone_custom_type(custom_type_name_,
-      get_custom_interface_classes(), get_custom_class_init_functions(),
-      get_custom_instance_init_function());
-    custom_class_init_finished();
+    object_type = object_class_.clone_custom_type(custom_type_name_, custom_interface_classes);
   }
 
-  GObject* const new_object = g_object_new_with_properties(object_type, 0, nullptr, nullptr);
+  void* const new_object = g_object_new(object_type, nullptr);
 
   // Connect the GObject and Glib::Object instances.
-  ObjectBase::initialize(new_object);
+  ObjectBase::initialize(static_cast<GObject*>(new_object));
 }
 
 Object::Object(const Glib::ConstructParams& construct_params)
@@ -182,22 +226,36 @@ Object::Object(const Glib::ConstructParams& construct_params)
 
   if (custom_type_name_ && !is_anonymous_custom_())
   {
+    Class::interface_class_vector_type custom_interface_classes;
+
+    {
+      std::lock_guard<std::mutex> lock(extra_object_base_data_mutex);
+      const extra_object_base_data_type::iterator iter = extra_object_base_data.find(this);
+      if (iter != extra_object_base_data.end())
+      {
+        custom_interface_classes = iter->second.custom_interface_classes;
+        extra_object_base_data.erase(iter);
+      }
+    }
+
     object_type =
-      construct_params.glibmm_class.clone_custom_type(custom_type_name_,
-      get_custom_interface_classes(), get_custom_class_init_functions(),
-      get_custom_instance_init_function());
-    custom_class_init_finished();
+      construct_params.glibmm_class.clone_custom_type(custom_type_name_, custom_interface_classes);
   }
 
   // Create a new GObject with the specified array of construct properties.
   // This works with custom types too, since those inherit the properties of
   // their base class.
 
-  GObject* const new_object =
-    g_object_new_with_properties(object_type, construct_params.n_parameters, construct_params.parameter_names, construct_params.parameter_values);
+  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  //TODO: Replace g_object_newv() by g_object_new_with_properties() when we can
+  // require glib 2.54. GParameter is also deprecated (only mentioned in a comment).
+  // Don't use it in ConstructParams when we can break ABI.
+  void* const new_object =
+    g_object_newv(object_type, construct_params.n_parameters, construct_params.parameters);
+  G_GNUC_END_IGNORE_DEPRECATIONS
 
   // Connect the GObject and Glib::Object instances.
-  ObjectBase::initialize(new_object);
+  ObjectBase::initialize(static_cast<GObject*>(new_object));
 }
 
 Object::Object(GObject* castitem)
index 72c6692..79b37b5 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 // X11 defines DestroyNotify and some other non-prefixed stuff, and it's too late to change that
@@ -54,9 +53,8 @@ class GSigConnectionNode;
 
 /* ConstructParams::ConstructParams() takes a varargs list of properties
  * and values, like g_object_new() does.  This list will then be converted
- * to an array of parameter names and an array of parameter values,
- * for use with g_object_new_with_properties().  No overhead is
- * involved, since g_object_new() is just a wrapper around g_object_new_with_properties()
+ * to a GParameter array, for use with g_object_newv().  No overhead is
+ * involved, since g_object_new() is just a wrapper around g_object_newv()
  * as well.
  *
  * The advantage of an auxiliary ConstructParams object over g_object_new()
@@ -72,16 +70,22 @@ class ConstructParams
 public:
   const Glib::Class& glibmm_class;
   unsigned int n_parameters;
-  const char ** parameter_names;
-  GValue* parameter_values;
+  GParameter* parameters;
 
   explicit ConstructParams(const Glib::Class& glibmm_class_);
   ConstructParams(const Glib::Class& glibmm_class_, const char* first_property_name,
     ...) G_GNUC_NULL_TERMINATED; // warn if called without a trailing NULL pointer
   ~ConstructParams() noexcept;
 
-  ConstructParams(const ConstructParams& other) = delete;
-  ConstructParams& operator=(const ConstructParams&) = delete;
+  // The copy constructor is semantically required by the C++ compiler
+  // (since g++ 3.4) to be able to create temporary instances, depending
+  // on the usage context.  Apparently the compiler will actually optimize
+  // away the copy, though.  See bug #132300.
+  ConstructParams(const ConstructParams& other);
+
+private:
+  // no copy assignment
+  ConstructParams& operator=(const ConstructParams&);
 };
 
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
@@ -181,7 +185,7 @@ struct TypeTraits<Glib::RefPtr<T>>
     // because that would be "dependent", and g++ 3.4 does not allow that.
     // The specific Glib::wrap() overloads don't do anything special anyway.
     GObject* cobj = (GObject*)const_cast<CTypeNonConst>(ptr);
-    return Glib::make_refptr_for_instance<T>(dynamic_cast<T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
+    return Glib::RefPtr<T>(dynamic_cast<T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
     // We use dynamic_cast<> in case of multiple inheritance.
   }
 
@@ -217,7 +221,7 @@ struct TypeTraits<Glib::RefPtr<const T>>
     // because that would be "dependent", and g++ 3.4 does not allow that.
     // The specific Glib::wrap() overloads don't do anything special anyway.
     GObject* cobj = (GObject*)(ptr);
-    return Glib::make_refptr_for_instance<const T>(
+    return Glib::RefPtr<const T>(
       dynamic_cast<const T*>(Glib::wrap_auto(cobj, true /* take_copy */)));
     // We use dynamic_cast<> in case of multiple inheritance.
   }
@@ -252,8 +256,8 @@ public:
 
   static GType value_type() { return T::get_base_type(); }
 
-  void set(const CppType& data) { set_object(data.get()); }
-  CppType get() const { return std::dynamic_pointer_cast<T>(get_object_copy()); }
+  void set(const CppType& data) { set_object(data.operator->()); }
+  CppType get() const { return Glib::RefPtr<T>::cast_dynamic(get_object_copy()); }
 };
 
 // The SUN Forte Compiler has a problem with this:
@@ -271,8 +275,8 @@ public:
 
   static GType value_type() { return T::get_base_type(); }
 
-  void set(const CppType& data) { set_object(const_cast<T*>(data.get())); }
-  CppType get() const { return std::dynamic_pointer_cast<T>(get_object_copy()); }
+  void set(const CppType& data) { set_object(const_cast<T*>(data.operator->())); }
+  CppType get() const { return Glib::RefPtr<T>::cast_dynamic(get_object_copy()); }
 };
 #endif /* GLIBMM_HAVE_DISAMBIGUOUS_CONST_TEMPLATE_SPECIALIZATIONS */
 
index 7e36414..19fda47 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib-object.h>
@@ -40,16 +39,9 @@ namespace Glib
 
 /**** Glib::ObjectBase *****************************************************/
 
-// Used only during the construction of named custom types.
-struct ObjectBase::PrivImpl
-{
-  // Pointers to the interfaces of custom types.
-  Class::interface_classes_type custom_interface_classes;
-  // Pointers to extra class init functions.
-  Class::class_init_funcs_type custom_class_init_functions;
-  // Pointer to the instance init function.
-  GInstanceInitFunc custom_instance_init_function = nullptr;
-};
+// static data members
+ObjectBase::extra_object_base_data_type ObjectBase::extra_object_base_data;
+std::mutex ObjectBase::extra_object_base_data_mutex;
 
 ObjectBase::ObjectBase()
 : gobject_(nullptr),
@@ -59,14 +51,12 @@ ObjectBase::ObjectBase()
 }
 
 ObjectBase::ObjectBase(const char* custom_type_name)
-: gobject_(nullptr), custom_type_name_(custom_type_name),
-  cpp_destruction_in_progress_(false)
+: gobject_(nullptr), custom_type_name_(custom_type_name), cpp_destruction_in_progress_(false)
 {
 }
 
 ObjectBase::ObjectBase(const std::type_info& custom_type_info)
-: gobject_(nullptr), custom_type_name_(custom_type_info.name()),
-  cpp_destruction_in_progress_(false)
+: gobject_(nullptr), custom_type_name_(custom_type_info.name()), cpp_destruction_in_progress_(false)
 {
 }
 
@@ -163,6 +153,14 @@ ObjectBase::~ObjectBase() noexcept
   // we have to call g_object_unref() on our own.
   //
 
+  // Just a precaution. Unless a derived class's ctor has thrown an exception,
+  // 'this' should have been erased from extra_object_base_data by
+  // Glib::Object's constructor.
+  {
+    std::lock_guard<std::mutex> lock(extra_object_base_data_mutex);
+    extra_object_base_data.erase(this);
+  }
+
   if (GObject* const gobject = gobject_)
   {
 #ifdef GLIBMM_DEBUG_REFCOUNTING
@@ -352,9 +350,22 @@ ObjectBase::get_property_value(const Glib::ustring& property_name, Glib::ValueBa
   g_object_get_property(const_cast<GObject*>(gobj()), property_name.c_str(), value.gobj());
 }
 
-sigc::connection
+void
 ObjectBase::connect_property_changed(
-  const Glib::ustring& property_name, const sigc::slot<void()>& slot)
+  const Glib::ustring& property_name, const sigc::slot<void>& slot)
+{
+  connect_property_changed_with_return(property_name, slot);
+}
+
+void
+ObjectBase::connect_property_changed(const Glib::ustring& property_name, sigc::slot<void>&& slot)
+{
+  connect_property_changed_with_return(property_name, std::move(slot));
+}
+
+sigc::connection
+ObjectBase::connect_property_changed_with_return(
+  const Glib::ustring& property_name, const sigc::slot<void>& slot)
 {
   // Create a proxy to hold our connection info
   // This will be deleted by destroy_notify_handler.
@@ -366,8 +377,8 @@ ObjectBase::connect_property_changed(
 }
 
 sigc::connection
-ObjectBase::connect_property_changed(
-  const Glib::ustring& property_name, sigc::slot<void()>&& slot)
+ObjectBase::connect_property_changed_with_return(
+  const Glib::ustring& property_name, sigc::slot<void>&& slot)
 {
   // Create a proxy to hold our connection info
   // This will be deleted by destroy_notify_handler.
@@ -390,49 +401,6 @@ ObjectBase::thaw_notify()
   g_object_thaw_notify(gobj());
 }
 
-void ObjectBase::add_custom_interface_class(const Interface_Class* iface_class)
-{
-  if (!priv_pimpl_)
-    priv_pimpl_ = std::make_unique<PrivImpl>();
-  priv_pimpl_->custom_interface_classes.emplace_back(iface_class);
-}
-
-void ObjectBase::add_custom_class_init_function(GClassInitFunc class_init_func, void* class_data)
-{
-  if (!priv_pimpl_)
-    priv_pimpl_ = std::make_unique<PrivImpl>();
-  priv_pimpl_->custom_class_init_functions.emplace_back(
-    std::make_tuple(class_init_func, class_data));
-}
-
-void ObjectBase::set_custom_instance_init_function(GInstanceInitFunc instance_init_func)
-{
-  if (!priv_pimpl_)
-    priv_pimpl_ = std::make_unique<PrivImpl>();
-  priv_pimpl_->custom_instance_init_function = instance_init_func;
-}
-
-const Class::interface_classes_type* ObjectBase::get_custom_interface_classes() const
-{
-  return priv_pimpl_ ? &priv_pimpl_->custom_interface_classes : nullptr;
-}
-
-const Class::class_init_funcs_type* ObjectBase::get_custom_class_init_functions() const
-{
-  return priv_pimpl_ ? &priv_pimpl_->custom_class_init_functions : nullptr;
-}
-
-GInstanceInitFunc ObjectBase::get_custom_instance_init_function() const
-{
-  return priv_pimpl_ ? priv_pimpl_->custom_instance_init_function : nullptr;
-}
-
-void ObjectBase::custom_class_init_finished()
-{
-  priv_pimpl_.reset();
-}
-
-/**** Global function *****************************************************/
 bool
 _gobject_cppinstance_already_deleted(GObject* gobject)
 {
index 3faed9d..198f295 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -28,7 +27,9 @@
 #include <glibmm/debug.h>
 #include <sigc++/trackable.h>
 #include <typeinfo>
-#include <memory>
+#include <map> // Needed until the next ABI break.
+#include <memory> // Not used by ObjectBase any more, but user code may rely on it being here.
+#include <mutex>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 extern "C" {
@@ -118,19 +119,34 @@ public:
   template <class PropertyType>
   void get_property(const Glib::ustring& property_name, PropertyType& value) const;
 
-  /// You probably want to use a specific property_*() accessor method instead.
-  template <class PropertyType>
-  PropertyType get_property(const Glib::ustring& property_name) const;
+  // TODO: At the next ABI break, delete connect_property_changed_with_return()
+  // and let connect_property_changed() return sigc::connection.
+  /** You can use the signal_changed() signal of the property proxy instead.
+   *
+   * See also connect_property_changed_with_return().
+   */
+  void connect_property_changed(const Glib::ustring& property_name, const sigc::slot<void>& slot);
 
   /** You can use the signal_changed() signal of the property proxy instead.
+   *
+   * @newin{2,48}
+   */
+  void connect_property_changed(const Glib::ustring& property_name, sigc::slot<void>&& slot);
+
+  /** You can use the signal_changed() signal of the property proxy instead.
+   *
+   * This method was added because connect_property_changed() does not return a sigc::connection,
+   * and we could not break the ABI by changing that function.
    */
-  sigc::connection connect_property_changed(const Glib::ustring& property_name, const sigc::slot<void()>& slot);
+  sigc::connection connect_property_changed_with_return(
+    const Glib::ustring& property_name, const sigc::slot<void>& slot);
 
   /** You can use the signal_changed() signal of the property proxy instead.
    *
    * @newin{2,48}
    */
-  sigc::connection connect_property_changed(const Glib::ustring& property_name, sigc::slot<void()>&& slot);
+  sigc::connection connect_property_changed_with_return(
+    const Glib::ustring& property_name, sigc::slot<void>&& slot);
 
   /** Increases the freeze count on object. If the freeze count is non-zero, the
    * emission of "notify" signals on object is stopped. The signals are queued
@@ -203,15 +219,20 @@ protected:
 
   bool is_anonymous_custom_() const;
 
-  // The following 7 methods are used by Glib::ExtraClassInit, Glib::Interface
-  // and Glib::Object during construction of a named custom type.
-  void add_custom_interface_class(const Interface_Class* iface_class);
-  void add_custom_class_init_function(GClassInitFunc class_init_func, void* class_data = nullptr);
-  void set_custom_instance_init_function(GInstanceInitFunc instance_init_func);
-  const Class::interface_classes_type* get_custom_interface_classes() const;
-  const Class::class_init_funcs_type* get_custom_class_init_functions() const;
-  GInstanceInitFunc get_custom_instance_init_function() const;
-  void custom_class_init_finished();
+  // TODO: At the next ABI break, replace extra_object_base_data by a non-static
+  // data member.
+  // This is a new data member that can't be added as instance data to
+  // ObjectBase now, because it would break ABI.
+  struct ExtraObjectBaseData
+  {
+    Class::interface_class_vector_type custom_interface_classes;
+  };
+
+  using extra_object_base_data_type = std::map<const ObjectBase*, ExtraObjectBaseData>;
+  static extra_object_base_data_type extra_object_base_data;
+  // ObjectBase instances may be used in different threads.
+  // Accesses to extra_object_base_data must be thread-safe.
+  static std::mutex extra_object_base_data_mutex;
 
 public:
   //  is_derived_() must be public, so that overridden vfuncs and signal handlers can call it
@@ -239,15 +260,12 @@ protected:
 
 private:
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-  // Private part of implementation.
-  // Used only during construction of named custom types.
-  struct PrivImpl;
-  std::unique_ptr<PrivImpl> priv_pimpl_;
-
   virtual void set_manage(); // calls g_error()
+#endif // DOXYGEN_SHOULD_SKIP_THIS
 
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
   friend class Glib::GSigConnectionNode; // for GSigConnectionNode::notify()
-#endif // DOXYGEN_SHOULD_SKIP_THIS
+#endif
 };
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -275,16 +293,6 @@ ObjectBase::get_property(const Glib::ustring& property_name, PropertyType& value
   value = property_value.get();
 }
 
-template <class PropertyType>
-inline PropertyType
-ObjectBase::get_property(const Glib::ustring& property_name) const
-{
-  PropertyType value;
-  get_property(property_name, value);
-
-  return value;
-}
-
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
 bool _gobject_cppinstance_already_deleted(GObject* gobject);
index 8fb94fc..4493606 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* pattern.cc
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index fddec5c..0446907 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_PATTERN_H
 #define _GLIBMM_PATTERN_H
 
-/* $Id$ */
-
 /* pattern.h
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -19,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 extern "C" {
index a856751..9634c0a 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_PRIORITIES_H
 #define _GLIBMM_PRIORITIES_H
 
-/* $Id: priorities.h 420 2007-06-22 15:29:58Z murrayc $ */
-
 /* Copyright (C) 2002-2008 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -17,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Glib
index 45d90b3..30de748 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/property.h>
index ca8cde9..593fba1 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -132,9 +131,9 @@ private:
  *
  * This Property class currently supports the name, nick name, description default value and flags.
  * The minimum and maximum bounds are set to the full range of the value.
- * Because of internal implementation, flags shouldn't be set to values: Glib::ParamFlags::STATIC_NAME,
- * Glib::ParamFlags::STATIC_NICK, Glib::ParamFlags::STATIC_BLURB, Glib::ParamFlags::CONSTRUCT and
- * Glib::ParamFlags::CONSTRUCT_ONLY.
+ * Because of internal implementation, flags shouldn't be set to values: Glib::PARAM_STATIC_NAME,
+ * Glib::PARAM_STATIC_NICK, Glib::PARAM_STATIC_BLURB, Glib::PARAM_CONSTRUCT and
+ * Glib::PARAM_CONSTRUCT_ONLY.
  *
  * The class information must be installed into the GObject system once per
  * property, but this is handled automatically.
@@ -332,7 +331,7 @@ public:
 
 template <class T>
 Property<T>::Property(Glib::Object& object, const Glib::ustring& name)
-: Property(object, name, Glib::ustring(), Glib::ustring(), Glib::ParamFlags::READWRITE)
+: Property(object, name, Glib::ustring(), Glib::ustring(), Glib::PARAM_READWRITE)
 {
 }
 
@@ -340,7 +339,7 @@ template <class T>
 Property<T>::Property(Glib::Object& object, const Glib::ustring& name,
   const typename Property<T>::PropertyType& default_value)
 : Property(object, name, default_value, Glib::ustring(),
-    Glib::ustring(), Glib::ParamFlags::READWRITE)
+    Glib::ustring(), Glib::PARAM_READWRITE)
 {
 }
 
@@ -349,7 +348,7 @@ Property<T>::Property(Glib::Object& object, const Glib::ustring& name,
            const Glib::ustring& nick, const Glib::ustring& blurb, Glib::ParamFlags flags)
 : PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::READWRITE;
+  flags |= Glib::PARAM_READWRITE;
 
   if (!lookup_property(name))
     install_property(static_cast<ValueType&>(value_).create_param_spec(name, nick, blurb, flags));
@@ -361,7 +360,7 @@ Property<T>::Property(Glib::Object& object, const Glib::ustring& name, const Pro
 :
   PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::READWRITE;
+  flags |= Glib::PARAM_READWRITE;
 
   static_cast<ValueType&>(value_).set(default_value);
 
@@ -410,7 +409,7 @@ Property<T>::get_proxy()
 
 template <class T>
 Property_ReadOnly<T>::Property_ReadOnly(Glib::Object& object, const Glib::ustring& name)
-: Property_ReadOnly(object, name, Glib::ustring(), Glib::ustring(), Glib::ParamFlags::READABLE)
+: Property_ReadOnly(object, name, Glib::ustring(), Glib::ustring(), Glib::PARAM_READABLE)
 {
 }
 
@@ -418,7 +417,7 @@ template <class T>
 Property_ReadOnly<T>::Property_ReadOnly(Glib::Object& object, const Glib::ustring& name,
   const typename Property_ReadOnly<T>::PropertyType& default_value)
 : Property_ReadOnly(object, name, default_value, Glib::ustring(), Glib::ustring(),
-    Glib::ParamFlags::READABLE)
+    Glib::PARAM_READABLE)
 {
 }
 
@@ -427,8 +426,8 @@ Property_ReadOnly<T>::Property_ReadOnly(Glib::Object& object, const Glib::ustrin
            const Glib::ustring& nick, const Glib::ustring& blurb, Glib::ParamFlags flags)
 : PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::READABLE;
-  flags &= ~Glib::ParamFlags::WRITABLE;
+  flags |= Glib::PARAM_READABLE;
+  flags &= ~Glib::PARAM_WRITABLE;
 
   if (!lookup_property(name))
     install_property(static_cast<ValueType&>(value_).create_param_spec(name, nick, blurb, flags));
@@ -439,8 +438,8 @@ Property_ReadOnly<T>::Property_ReadOnly(Glib::Object& object, const Glib::ustrin
            const Glib::ustring& nick, const Glib::ustring& blurb, Glib::ParamFlags flags)
 : PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::READABLE;
-  flags &= ~Glib::ParamFlags::WRITABLE;
+  flags |= Glib::PARAM_READABLE;
+  flags &= ~Glib::PARAM_WRITABLE;
 
   static_cast<ValueType&>(value_).set(default_value);
 
@@ -473,7 +472,7 @@ Property_ReadOnly<T>::get_proxy()
 template <class T>
 Property_WriteOnly<T>::Property_WriteOnly(Glib::Object& object, const Glib::ustring& name)
 : Property_WriteOnly(object, name, Glib::ustring(),
-    Glib::ustring(), Glib::ParamFlags::WRITABLE)
+    Glib::ustring(), Glib::PARAM_WRITABLE)
 {
 }
 
@@ -481,7 +480,7 @@ template <class T>
 Property_WriteOnly<T>::Property_WriteOnly(Glib::Object& object, const Glib::ustring& name,
   const typename Property_WriteOnly<T>::PropertyType& default_value)
 : Property_WriteOnly(object, name, default_value, Glib::ustring(),
-    Glib::ustring(), Glib::ParamFlags::WRITABLE)
+    Glib::ustring(), Glib::PARAM_WRITABLE)
 {
 }
 
@@ -490,8 +489,8 @@ Property_WriteOnly<T>::Property_WriteOnly(Glib::Object& object, const Glib::ustr
            const Glib::ustring& nick, const Glib::ustring& blurb, Glib::ParamFlags flags)
 : PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::WRITABLE;
-  flags &= ~Glib::ParamFlags::READABLE;
+  flags |= Glib::PARAM_WRITABLE;
+  flags &= ~Glib::PARAM_READABLE;
 
   if (!lookup_property(name))
     install_property(static_cast<ValueType&>(value_).create_param_spec(name, nick, blurb, flags));
@@ -503,8 +502,8 @@ Property_WriteOnly<T>::Property_WriteOnly(Glib::Object& object, const Glib::ustr
            const Glib::ustring& nick, const Glib::ustring& blurb, Glib::ParamFlags flags)
 : PropertyBase(object, ValueType::value_type())
 {
-  flags |= Glib::ParamFlags::WRITABLE;
-  flags &= ~Glib::ParamFlags::READABLE;
+  flags |= Glib::PARAM_WRITABLE;
+  flags &= ~Glib::PARAM_READABLE;
 
   static_cast<ValueType&>(value_).set(default_value);
 
index bd02587..db0574e 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* propertyproxy.cc
  *
  * Copyright 2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/propertyproxy.h>
index bc27409..67eaab3 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_PROPERTYPROXY_H
 #define _GLIBMM_PROPERTYPROXY_H
 
@@ -17,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index 66ebf70..21f01fe 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/propertyproxy_base.h>
@@ -58,7 +57,7 @@ void PropertyProxyConnectionNode::callback(GObject*, GParamSpec* pspec, gpointer
   if (pspec && data)
   {
     if (sigc::slot_base* const slot = SignalProxyBase::data_to_slot(data))
-      (*static_cast<sigc::slot<void()>*>(slot))();
+      (*static_cast<sigc::slot<void>*>(slot))();
   }
 }
 
index c5e6a53..bc76c32 100644 (file)
@@ -16,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -39,7 +38,7 @@ public:
   SignalProxyProperty(Glib::ObjectBase* obj, const gchar* property_name);
   ~SignalProxyProperty() noexcept;
 
-  using SlotType = sigc::slot<void()>;
+  using SlotType = sigc::slot<void>;
   sigc::connection connect(const SlotType& slot);
   /** @newin{2,48}
    */
index a528be8..d8b5cf5 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /* quark.cc
  *
  * Copyright 2002 The gtkmm Development Team
@@ -15,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/quark.h>
index ae0731c..b860e74 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_QUARK_H
 #define _GLIBMM_QUARK_H
 
@@ -17,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index 11f5cdf..aec836b 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* random.cc
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index d934044..3b9893e 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_RANDOM_H
 #define _GLIBMM_RANDOM_H
 
-/* $Id$ */
-
 /* random.h
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -19,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index 8edf68b..981dd79 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
 #include <glib.h>
-#include <memory>
+#include <utility>
 
 namespace Glib
 {
 
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-template <class T_CppObject>
-void RefPtrDeleter(T_CppObject* object)
-{
-  if (!object)
-    return;
-
-  object->unreference();
-}
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
 /** RefPtr<> is a reference-counting shared smartpointer.
  *
  * Some objects in gtkmm are obtained from a shared
  * store. Consequently you cannot instantiate them yourself. Instead they
  * return a RefPtr which behaves much like an ordinary pointer in that members
  * can be reached with the usual <code>object_ptr->member</code> notation.
+ * Unlike most other smart pointers, RefPtr doesn't support dereferencing
+ * through <code>*object_ptr</code>.
  *
  * Reference counting means that a shared reference count is incremented each
  * time a RefPtr is copied, and decremented each time a RefPtr is destroyed,
@@ -49,41 +39,469 @@ void RefPtrDeleter(T_CppObject* object)
  * zero, the contained object is deleted, meaning  you don't need to remember
  * to delete the object.
  *
+ * RefPtr<> can store any class that has reference() and unreference() methods,
+ * and whose destructor is noexcept (the default for destructors).
+ * In gtkmm, that is anything derived from Glib::ObjectBase, such as
+ * Gdk::Pixmap.
+ *
  * See the "Memory Management" section in the "Programming with gtkmm"
  * book for further information.
  */
 template <class T_CppObject>
-using RefPtr = std::shared_ptr<T_CppObject>;
+class RefPtr
+{
+private:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  /** Helper class for disallowing use of Glib::RefPtr with certain classes.
+   *
+   * Disallow for instance in Gtk::Widget and its subclasses.
+   * Glib::RefPtr<T>::is_allowed_type::value is false if
+   * T:dont_allow_use_in_glib_refptr_ is a public type, else it's true.
+   * Example:
+   * @code
+   * using dont_allow_use_in_glib_refptr_ = int;
+   * @endcode
+   */
+  class is_allowed_type
+  {
+  private:
+    struct big
+    {
+      int memory[64];
+    };
 
-/* This would not be useful,
- * because application code should not new these objects anyway.
- * And it is not useful inside glibmm or gtkmm code because
- * the constructors are protected, so can't be called from this utilility
- * function.
- *
-template <class T_CppObject, class... T_Arg>
-RefPtr<T_CppObject>
-make_refptr(T_Arg... arg)
+    static big check(...);
+
+    // If X::dont_allow_use_in_glib_refptr_ is not a type, this check() overload
+    // is ignored because of the SFINAE rule (Substitution Failure Is Not An Error).
+    template <typename X>
+    static typename X::dont_allow_use_in_glib_refptr_ check(X* obj);
+
+  public:
+    static const bool value = sizeof(check(static_cast<T_CppObject*>(nullptr))) == sizeof(big);
+  };
+
+  static_assert(is_allowed_type::value, "Glib::RefPtr must not be used with this class.");
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+public:
+  /** Default constructor
+   *
+   * Afterwards it will be null and use of -> will invoke undefined behaviour.
+   */
+  inline RefPtr() noexcept;
+
+  /// Destructor - decrements reference count.
+  inline ~RefPtr() noexcept;
+
+  /// For use only by the \::create() methods.
+  explicit inline RefPtr(T_CppObject* pCppObject) noexcept;
+
+  /** Copy constructor
+   *
+   * This increments the shared reference count.
+   */
+  inline RefPtr(const RefPtr& src) noexcept;
+
+  /** Move constructor
+   */
+  inline RefPtr(RefPtr&& src) noexcept;
+
+  /** Move constructor (from different, but castable type).
+   */
+  template <class T_CastFrom>
+  inline RefPtr(RefPtr<T_CastFrom>&& src) noexcept;
+
+  /** Copy constructor (from different, but castable type).
+   *
+   * Increments the reference count.
+   */
+  template <class T_CastFrom>
+  inline RefPtr(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /** Swap the contents of two RefPtr<>.
+   * This method swaps the internal pointers to T_CppObject.  This can be
+   * done safely without involving a reference/unreference cycle and is
+   * therefore highly efficient.
+   */
+  inline void swap(RefPtr& other) noexcept;
+
+  /// Copy from another RefPtr:
+  inline RefPtr& operator=(const RefPtr& src) noexcept;
+
+  /// Move assignment operator:
+  inline RefPtr& operator=(RefPtr&& src) noexcept;
+
+  /// Move assignment operator (from different, but castable type):
+  template <class T_CastFrom>
+  inline RefPtr& operator=(RefPtr<T_CastFrom>&& src) noexcept;
+
+  /** Copy from different, but castable type).
+   *
+   * Increments the reference count.
+   */
+  template <class T_CastFrom>
+  inline RefPtr& operator=(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /// Tests whether the RefPtr<> point to the same underlying instance.
+  inline bool operator==(const RefPtr& src) const noexcept;
+
+  /// See operator==().
+  inline bool operator!=(const RefPtr& src) const noexcept;
+
+  /** Dereferencing.
+   *
+   * Use the methods of the underlying instance like so:
+   * <code>refptr->memberfun()</code>.
+   */
+  inline T_CppObject* operator->() const noexcept;
+
+  /** Test whether the RefPtr<> points to any underlying instance.
+   *
+   * Mimics usage of ordinary pointers:
+   * @code
+   *   if (ptr)
+   *     do_something();
+   * @endcode
+   */
+  inline explicit operator bool() const noexcept;
+
+#ifndef GLIBMM_DISABLE_DEPRECATED
+  /// @deprecated Use reset() instead because this leads to confusion with clear() methods on the
+  /// underlying class. For instance, people use .clear() when they mean ->clear().
+  inline void clear() noexcept;
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+  /** Set underlying instance to nullptr, decrementing reference count of existing instance
+   * appropriately.
+   * @newin{2,16}
+   */
+  inline void reset() noexcept;
+
+  /** Release the ownership of underlying instance.
+   *
+   * RefPtr's underlying instance is set to nullptr, therefore underlying object can't be accessed
+   * through this RefPtr anymore.
+   * @return an underlying instance.
+   *
+   * Most users should not use release(). It can spoil the automatic destruction
+   * of the managed object. A legitimate use is if you immediately give RefPtr's
+   * reference to another object.
+   */
+  inline T_CppObject* release() noexcept G_GNUC_WARN_UNUSED_RESULT;
+
+  /** Dynamic cast to derived class.
+   *
+   * The RefPtr can't be cast with the usual notation so instead you can use
+   * @code
+   *   ptr_derived = RefPtr<Derived>::cast_dynamic(ptr_base);
+   * @endcode
+   */
+  template <class T_CastFrom>
+  static inline RefPtr cast_dynamic(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /** Static cast to derived class.
+   *
+   * Like the dynamic cast; the notation is
+   * @code
+   *   ptr_derived = RefPtr<Derived>::cast_static(ptr_base);
+   * @endcode
+   */
+  template <class T_CastFrom>
+  static inline RefPtr cast_static(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /** Cast to non-const.
+   *
+   * The RefPtr can't be cast with the usual notation so instead you can use
+   * @code
+   *   ptr_unconst = RefPtr<UnConstType>::cast_const(ptr_const);
+   * @endcode
+   */
+  template <class T_CastFrom>
+  static inline RefPtr cast_const(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /** Compare based on the underlying instance address.
+   *
+   * This is needed in code that requires an ordering on
+   * RefPtr<T_CppObject> instances, e.g. std::set<RefPtr<T_CppObject> >.
+   *
+   * Without these, comparing two RefPtr<T_CppObject> instances
+   * is still syntactically possible, but the result is semantically
+   * wrong, as p1 REL_OP p2 is interpreted as (bool)p1 REL_OP (bool)p2.
+   */
+  inline bool operator<(const RefPtr& src) const noexcept;
+
+  /// See operator<().
+  inline bool operator<=(const RefPtr& src) const noexcept;
+
+  /// See operator<().
+  inline bool operator>(const RefPtr& src) const noexcept;
+
+  /// See operator<().
+  inline bool operator>=(const RefPtr& src) const noexcept;
+
+private:
+  T_CppObject* pCppObject_;
+};
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+// RefPtr<>::operator->() comes first here since it's used by other methods.
+// If it would come after them it wouldn't be inlined.
+
+template <class T_CppObject>
+inline T_CppObject* RefPtr<T_CppObject>::operator->() const noexcept
 {
-  return RefPtr<T_CppObject>(new T_CppObject(arg...));
+  return pCppObject_;
 }
-*/
 
-/** Create a RefPtr<> to an instance of any class that has reference() and
- * unreference() methods, and whose destructor is noexcept (the default for destructors).
- *
- * In gtkmm, that is anything derived from Glib::ObjectBase, such as
- * Gdk::Pixbuf.
- *
- * Normal application code should not need to use this. However, this is necessary
- * when implementing create() methods for derived Glib::ObjectBase-derived
- * (not Gtk::Widget-derived) classes, such as derived Gtk::TreeModels.
- */
 template <class T_CppObject>
-RefPtr<T_CppObject>
-make_refptr_for_instance(T_CppObject* object)
+inline RefPtr<T_CppObject>::RefPtr() noexcept : pCppObject_(nullptr)
+{
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>::~RefPtr() noexcept
+{
+  if (pCppObject_)
+    pCppObject_->unreference(); // This could cause pCppObject to be deleted.
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>::RefPtr(T_CppObject* pCppObject) noexcept : pCppObject_(pCppObject)
+{
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>::RefPtr(const RefPtr& src) noexcept : pCppObject_(src.pCppObject_)
+{
+  if (pCppObject_)
+    pCppObject_->reference();
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>::RefPtr(RefPtr&& src) noexcept : pCppObject_(src.pCppObject_)
+{
+  src.pCppObject_ = nullptr;
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>::RefPtr(RefPtr<T_CastFrom>&& src) noexcept : pCppObject_(src.release())
+{
+}
+
+// The templated ctor allows copy construction from any object that's
+// castable.  Thus, it does downcasts:
+//   base_ref = derived_ref
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>::RefPtr(const RefPtr<T_CastFrom>& src) noexcept :
+  // A different RefPtr<> will not allow us access to pCppObject_.  We need
+  // to add a get_underlying() for this, but that would encourage incorrect
+  // use, so we use the less well-known operator->() accessor:
+  pCppObject_(src.operator->())
+{
+  if (pCppObject_)
+    pCppObject_->reference();
+}
+
+template <class T_CppObject>
+inline void
+RefPtr<T_CppObject>::swap(RefPtr& other) noexcept
+{
+  T_CppObject* const temp = pCppObject_;
+  pCppObject_ = other.pCppObject_;
+  other.pCppObject_ = temp;
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>&
+RefPtr<T_CppObject>::operator=(const RefPtr& src) noexcept
+{
+  // In case you haven't seen the swap() technique to implement copy
+  // assignment before, here's what it does:
+  //
+  // 1) Create a temporary RefPtr<> instance via the copy ctor, thereby
+  //    increasing the reference count of the source object.
+  //
+  // 2) Swap the internal object pointers of *this and the temporary
+  //    RefPtr<>.  After this step, *this already contains the new pointer,
+  //    and the old pointer is now managed by temp.
+  //
+  // 3) The destructor of temp is executed, thereby unreferencing the
+  //    old object pointer.
+  //
+  // This technique is described in Herb Sutter's "Exceptional C++", and
+  // has a number of advantages over conventional approaches:
+  //
+  // - Code reuse by calling the copy ctor.
+  // - Strong exception safety for free.
+  // - Self assignment is handled implicitely.
+  // - Simplicity.
+  // - It just works and is hard to get wrong; i.e. you can use it without
+  //   even thinking about it to implement copy assignment whereever the
+  //   object data is managed indirectly via a pointer, which is very common.
+
+  RefPtr<T_CppObject> temp(src);
+  this->swap(temp);
+  return *this;
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>&
+RefPtr<T_CppObject>::operator=(RefPtr&& src) noexcept
+{
+  RefPtr<T_CppObject> temp(std::move(src));
+  this->swap(temp);
+  src.pCppObject_ = nullptr;
+
+  return *this;
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>&
+RefPtr<T_CppObject>::operator=(RefPtr<T_CastFrom>&& src) noexcept
+{
+  if (pCppObject_)
+    pCppObject_->unreference();
+  pCppObject_ = src.release();
+
+  return *this;
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>&
+RefPtr<T_CppObject>::operator=(const RefPtr<T_CastFrom>& src) noexcept
+{
+  RefPtr<T_CppObject> temp(src);
+  this->swap(temp);
+  return *this;
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator==(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ == src.pCppObject_);
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator!=(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ != src.pCppObject_);
+}
+
+template <class T_CppObject>
+inline RefPtr<T_CppObject>::operator bool() const noexcept
+{
+  return (pCppObject_ != nullptr);
+}
+
+#ifndef GLIBMM_DISABLE_DEPRECATED
+template <class T_CppObject>
+inline void
+RefPtr<T_CppObject>::clear() noexcept
+{
+  reset();
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+template <class T_CppObject>
+inline void
+RefPtr<T_CppObject>::reset() noexcept
+{
+  RefPtr<T_CppObject> temp; // swap with an empty RefPtr<> to clear *this
+  this->swap(temp);
+}
+
+template <class T_CppObject>
+inline T_CppObject*
+RefPtr<T_CppObject>::release() noexcept
+{
+  T_CppObject* tmp = pCppObject_;
+  pCppObject_ = nullptr;
+  return tmp;
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>
+RefPtr<T_CppObject>::cast_dynamic(const RefPtr<T_CastFrom>& src) noexcept
+{
+  T_CppObject* const pCppObject = dynamic_cast<T_CppObject*>(src.operator->());
+
+  if (pCppObject)
+    pCppObject->reference();
+
+  return RefPtr<T_CppObject>(pCppObject);
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>
+RefPtr<T_CppObject>::cast_static(const RefPtr<T_CastFrom>& src) noexcept
+{
+  T_CppObject* const pCppObject = static_cast<T_CppObject*>(src.operator->());
+
+  if (pCppObject)
+    pCppObject->reference();
+
+  return RefPtr<T_CppObject>(pCppObject);
+}
+
+template <class T_CppObject>
+template <class T_CastFrom>
+inline RefPtr<T_CppObject>
+RefPtr<T_CppObject>::cast_const(const RefPtr<T_CastFrom>& src) noexcept
+{
+  T_CppObject* const pCppObject = const_cast<T_CppObject*>(src.operator->());
+
+  if (pCppObject)
+    pCppObject->reference();
+
+  return RefPtr<T_CppObject>(pCppObject);
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator<(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ < src.pCppObject_);
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator<=(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ <= src.pCppObject_);
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator>(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ > src.pCppObject_);
+}
+
+template <class T_CppObject>
+inline bool
+RefPtr<T_CppObject>::operator>=(const RefPtr& src) const noexcept
+{
+  return (pCppObject_ >= src.pCppObject_);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+/** @relates Glib::RefPtr */
+template <class T_CppObject>
+inline void
+swap(RefPtr<T_CppObject>& lhs, RefPtr<T_CppObject>& rhs) noexcept
 {
-  return RefPtr<T_CppObject>(object, &RefPtrDeleter<T_CppObject>);
+  lhs.swap(rhs);
 }
 
 } // namespace Glib
diff --git a/glib/glibmm/sarray.cc b/glib/glibmm/sarray.cc
new file mode 100644 (file)
index 0000000..69958a7
--- /dev/null
@@ -0,0 +1,19 @@
+/* sarray.cc
+ *
+ * Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/sarray.h>
similarity index 54%
rename from gio/src/propertyaction.ccg
rename to glib/glibmm/sarray.h
index 85da4a8..dbd0b5c 100644 (file)
@@ -1,4 +1,9 @@
-/* Copyright (C) 2017 The giomm Development Team
+#ifndef _GLIBMM_SARRAY_H
+#define _GLIBMM_SARRAY_H
+
+/* array.h
+ *
+ * Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * 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, see <http://www.gnu.org/licenses/>.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <gio/gio.h>
+#include <glibmmconfig.h>
 
-namespace Gio
-{
+#ifndef GLIBMM_DISABLE_DEPRECATED
+#include <glibmm/arrayhandle.h>
+#include <glibmm/ustring.h>
 
-PropertyAction::PropertyAction(const Glib::ustring& name,
-  const Glib::PropertyProxy_Base& property_proxy, bool invert_boolean)
-:
-_CONSTRUCT("name", name.c_str(), "object", property_proxy.get_object()->gobj(),
-           "property-name",  property_proxy.get_name(),
-           "invert-boolean", invert_boolean)
+namespace Glib
 {
+
+/**
+ * @deprecated Use a std::vector instead.
+ */
+using SArray = Glib::ArrayHandle<Glib::ustring>;
 }
 
-} // namespace Gio
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+#endif // _GLIBMM_SARRAY_H
index 9da33cc..04ab68d 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib-object.h>
@@ -43,7 +42,19 @@ SignalProxyNormal::~SignalProxyNormal() noexcept
 }
 
 sigc::slot_base&
-SignalProxyNormal::connect_impl_(bool notify, const sigc::slot_base& slot, bool after)
+SignalProxyNormal::connect_(const sigc::slot_base& slot, bool after)
+{
+  return connect_impl_(info_->callback, slot, after);
+}
+
+sigc::slot_base&
+SignalProxyNormal::connect_notify_(const sigc::slot_base& slot, bool after)
+{
+  return connect_impl_(info_->notify_callback, slot, after);
+}
+
+sigc::slot_base&
+SignalProxyNormal::connect_impl_(GCallback callback, const sigc::slot_base& slot, bool after)
 {
   // create a proxy to hold our connection info
   auto pConnectionNode = new SignalProxyConnectionNode(slot, obj_->gobj());
@@ -51,9 +62,8 @@ SignalProxyNormal::connect_impl_(bool notify, const sigc::slot_base& slot, bool
   // connect it to glib
   // pConnectionNode will be passed in the data argument to the callback.
   pConnectionNode->connection_id_ = g_signal_connect_data(obj_->gobj(), info_->signal_name,
-    notify ? info_->notify_callback : info_->callback, pConnectionNode,
-    &SignalProxyConnectionNode::destroy_notify_handler,
-    static_cast<GConnectFlags>(after ? G_CONNECT_AFTER : 0));
+    callback, pConnectionNode, &SignalProxyConnectionNode::destroy_notify_handler,
+    static_cast<GConnectFlags>((after) ? G_CONNECT_AFTER : 0));
 
   return pConnectionNode->slot_;
 }
@@ -90,7 +100,7 @@ SignalProxyNormal::slot0_void_callback(GObject* self, void* data)
     try
     {
       if (sigc::slot_base* const slot = data_to_slot(data))
-        (*static_cast<sigc::slot<void()>*>(slot))();
+        (*static_cast<sigc::slot<void>*>(slot))();
     }
     catch (...)
     {
@@ -99,9 +109,9 @@ SignalProxyNormal::slot0_void_callback(GObject* self, void* data)
   }
 }
 
-// SignalProxyDetailedBase implementation:
+// SignalProxyDetailed implementation:
 
-SignalProxyDetailedBase::SignalProxyDetailedBase(
+SignalProxyDetailed::SignalProxyDetailed(
   Glib::ObjectBase* obj, const SignalProxyInfo* info, const Glib::ustring& detail_name)
 : SignalProxyBase(obj),
   info_(info),
@@ -110,12 +120,12 @@ SignalProxyDetailedBase::SignalProxyDetailedBase(
 {
 }
 
-SignalProxyDetailedBase::~SignalProxyDetailedBase() noexcept
+SignalProxyDetailed::~SignalProxyDetailed() noexcept
 {
 }
 
 sigc::slot_base&
-SignalProxyDetailedBase::connect_impl_(bool notify, const sigc::slot_base& slot, bool after)
+SignalProxyDetailed::connect_impl_(bool notify, const sigc::slot_base& slot, bool after)
 {
   // create a proxy to hold our connection info
   auto pConnectionNode = new SignalProxyConnectionNode(slot, obj_->gobj());
@@ -131,7 +141,7 @@ SignalProxyDetailedBase::connect_impl_(bool notify, const sigc::slot_base& slot,
 }
 
 sigc::slot_base&
-SignalProxyDetailedBase::connect_impl_(bool notify, sigc::slot_base&& slot, bool after)
+SignalProxyDetailed::connect_impl_(bool notify, sigc::slot_base&& slot, bool after)
 {
   // create a proxy to hold our connection info
   auto pConnectionNode = new SignalProxyConnectionNode(std::move(slot), obj_->gobj());
@@ -147,7 +157,7 @@ SignalProxyDetailedBase::connect_impl_(bool notify, sigc::slot_base&& slot, bool
 }
 
 void
-SignalProxyDetailedBase::emission_stop()
+SignalProxyDetailed::emission_stop()
 {
   g_signal_stop_emission_by_name(obj_->gobj(), detailed_name_.c_str());
 }
index c537ea5..8820d40 100644 (file)
@@ -16,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 extern "C" {
@@ -47,7 +46,7 @@ struct SignalProxyInfo
 
 #endif // DOXYGEN_SHOULD_SKIP_THIS
 
-// This base class is used by SignalProxyNormal, SignalProxyDetailedBase and SignalProxyProperty.
+// This base class is used by SignalProxyNormal, SignalProxyDetailed and SignalProxyProperty.
 class SignalProxyBase
 {
 public:
@@ -67,7 +66,7 @@ protected:
   ObjectBase* obj_;
 
 private:
-  SignalProxyBase& operator=(const SignalProxyBase&) = delete;
+  SignalProxyBase& operator=(const SignalProxyBase&); // not implemented
 };
 
 // Shared portion of a Signal without detail
@@ -79,7 +78,7 @@ private:
  * the template derivatives, which serve as gatekeepers for the
  * types allowed on a particular signal.
  *
- * For signals with a detailed name (signal_name::detail_name) see SignalProxyDetailedBase.
+ * For signals with a detailed name (signal_name::detail_name) see SignalProxyDetailed.
  */
 class SignalProxyNormal : public SignalProxyBase
 {
@@ -90,7 +89,7 @@ public:
   void emission_stop();
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-  // This callback for SignalProxy<void()>
+  // This callback for SignalProxy<void>
   // is defined here to avoid code duplication.
   static void slot0_void_callback(GObject*, void* data);
 #endif
@@ -103,20 +102,28 @@ protected:
    */
   SignalProxyNormal(Glib::ObjectBase* obj, const SignalProxyInfo* info);
 
-  /** Connects a signal handler to a signal.
-   * This is called by connect() and connect_notify() in derived SignalProxy classes.
+  /** Connects a generic signal handler to a signal.
+   * This is called by connect() in derived SignalProxy classes.
    *
-   * @param notify Whether this method is called by connect_notify() or by connect().
    * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
    * @param after Whether this signal handler should be called before or after the default signal
    * handler.
+   */
+  sigc::slot_base& connect_(const sigc::slot_base& slot, bool after);
+
+  /** Connects a signal handler without a return value to a signal.
+   * This is called by connect_notify() in derived SignalProxy classes.
    *
-   * @newin{2,52}
+   * @param slot The signal handler, which should have a @c void return type,
+   *        usually created with sigc::mem_fun() or sigc::ptr_fun().
+   * @param after Whether this signal handler should be called before or after the default signal
+   * handler.
    */
-  sigc::slot_base& connect_impl_(bool notify, const sigc::slot_base& slot, bool after);
+  sigc::slot_base& connect_notify_(const sigc::slot_base& slot, bool after);
 
   /** Connects a signal handler to a signal.
-   * @see connect_impl_(bool notify, const sigc::slot_base& slot, bool after).
+   * @see connect_(const sigc::slot_base& slot, bool after) and
+   * connect_notify_(const sigc::slot_base& slot, bool after).
    *
    * @newin{2,48}
    */
@@ -125,56 +132,42 @@ protected:
 private:
   const SignalProxyInfo* info_;
 
+  // TODO: We could maybe replace both connect_() and connect_notify_() with this in future, because
+  // they don't do anything extra.
+  /** This is called by connect_() and connect_notify_().
+   */
+  sigc::slot_base& connect_impl_(GCallback callback, const sigc::slot_base& slot, bool after);
+
   // no copy assignment
-  SignalProxyNormal& operator=(const SignalProxyNormal&) = delete;
+  SignalProxyNormal& operator=(const SignalProxyNormal&);
 };
 
 /**** Glib::SignalProxy ***************************************************/
 
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-template <class R, class... T>
-class SignalProxy;
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
 /** Proxy for signals with any number of arguments.
  * Use the connect() or connect_notify() method, with sigc::mem_fun() or sigc::ptr_fun()
  * to connect signal handlers to signals.
- *
- * This is the primary template. There is a specialization for signal handlers
- * that return @c void. The specialization has no %connect_notify() method, and
- * the @a after parameter in its %connect() method has a default value.
  */
 template <class R, class... T>
-class SignalProxy<R(T...)> : public SignalProxyNormal
+class SignalProxy : public SignalProxyNormal
 {
 public:
-  using SlotType = sigc::slot<R(T...)>;
-  using VoidSlotType = sigc::slot<void(T...)>;
+  using SlotType = sigc::slot<R, T...>;
+  using VoidSlotType = sigc::slot<void, T...>;
 
   SignalProxy(ObjectBase* obj, const SignalProxyInfo* info) : SignalProxyNormal(obj, info) {}
 
   /** Connects a signal handler to a signal.
    *
-   * For instance, connect(sigc::mem_fun(*this, &TheClass::on_something), false);
-   *
-   * For some signal handlers that return a value, it can make a big difference
-   * whether you connect before or after the default signal handler.
-   * Examples:
-   * - Gio::Application::signal_command_line() calls only one signal handler.
-   *   A handler connected after the default handler will never be called.
-   * - X event signals, such as Gtk::Widget::signal_button_press_event(), stop
-   *   calling signal handlers as soon as a called handler returns <tt>true</tt>.
-   *   If the default handler returns <tt>true</tt>, a handler connected after it
-   *   will not be called.
+   * For instance, connect( sigc::mem_fun(*this, &TheClass::on_something) );
    *
    * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
    * @param after Whether this signal handler should be called before or after the default signal
    * handler.
-   * @return A sigc::connection.
    */
-  sigc::connection connect(const SlotType& slot, bool after)
+  sigc::connection connect(const SlotType& slot, bool after = true)
   {
-    return sigc::connection(connect_impl_(false, slot, after));
+    return sigc::connection(connect_(slot, after));
   }
 
   /** Connects a signal handler to a signal.
@@ -182,7 +175,7 @@ public:
    *
    * @newin{2,48}
    */
-  sigc::connection connect(SlotType&& slot, bool after)
+  sigc::connection connect(SlotType&& slot, bool after = true)
   {
     return sigc::connection(connect_impl_(false, std::move(slot), after));
   }
@@ -192,23 +185,27 @@ public:
    *
    * For instance, connect_notify( sigc::mem_fun(*this, &TheClass::on_something) );
    *
+   * If the signal requires signal handlers with a @c void return type,
+   * the only difference between connect() and connect_notify() is the default
+   * value of @a after.
+   *
    * If the signal requires signal handlers with a return value of type T,
-   * %connect_notify() binds <tt>return T()</tt> to the connected signal handler.
+   * connect_notify() binds <tt>return T()</tt> to the connected signal handler.
    * For instance, if the return type is @c bool, the following two calls are equivalent.
    * @code
-   * connect_notify(sigc::mem_fun(*this, &TheClass::on_something));
-   * connect(sigc::bind_return<bool>(sigc::mem_fun(*this, &TheClass::on_something), false), false);
+   * connect_notify( sigc::mem_fun(*this, &TheClass::on_something) );
+   * connect( sigc::bind_return<bool>(sigc::mem_fun(*this, &TheClass::on_something), false), false
+   * );
    * @endcode
    *
    * @param slot The signal handler, which should have a @c void return type,
    *        usually created with sigc::mem_fun() or sigc::ptr_fun().
    * @param after Whether this signal handler should be called before or after the default signal
    * handler.
-   * @return A sigc::connection.
    */
   sigc::connection connect_notify(const VoidSlotType& slot, bool after = false)
   {
-    return sigc::connection(connect_impl_(true, slot, after));
+    return sigc::connection(connect_notify_(slot, after));
   }
 
   /** Connects a signal handler without a return value to a signal.
@@ -222,47 +219,28 @@ public:
   }
 };
 
-/** Proxy for signals with any number of arguments.
- * Use the connect() method, with sigc::mem_fun() or sigc::ptr_fun()
- * to connect signal handlers to signals.
- *
- * This is a specialization for signal handlers that return @c void.
+/* Templates below has been added to avoid API break, and should not be
+ * used in a newly created code. SignalProxy class should be used instead
+ * of SignalProxy# class.
  */
-template <class... T>
-class SignalProxy<void(T...)> : public SignalProxyNormal
-{
-public:
-  using SlotType = sigc::slot<void(T...)>;
-
-  SignalProxy(ObjectBase* obj, const SignalProxyInfo* info) : SignalProxyNormal(obj, info) {}
-
-  /** Connects a signal handler to a signal.
-   *
-   * For instance, connect( sigc::mem_fun(*this, &TheClass::on_something) );
-   *
-   * By default, the signal handler will be called after the default signal handler.
-   * This is usually fine for signal handlers that don't return a value.
-   *
-   * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
-   * @param after Whether this signal handler should be called before or after the default signal
-   * handler.
-   * @return A sigc::connection.
-   */
-  sigc::connection connect(const SlotType& slot, bool after = true)
-  {
-    return sigc::connection(connect_impl_(false, slot, after));
-  }
-
-  /** Connects a signal handler to a signal.
-   * @see connect(const SlotType& slot, bool after).
-   *
-   * @newin{2,48}
-   */
-  sigc::connection connect(SlotType&& slot, bool after = true)
-  {
-    return sigc::connection(connect_impl_(false, std::move(slot), after));
-  }
-};
+template <typename R>
+using SignalProxy0 = SignalProxy<R>;
+template <typename R, typename T1>
+using SignalProxy1 = SignalProxy<R, T1>;
+template <typename R, typename T1, typename T2>
+using SignalProxy2 = SignalProxy<R, T1, T2>;
+template <typename R, typename T1, typename T2, typename T3>
+using SignalProxy3 = SignalProxy<R, T1, T2, T3>;
+template <typename R, typename T1, typename T2, typename T3, typename T4>
+using SignalProxy4 = SignalProxy<R, T1, T2, T3, T4>;
+template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
+using SignalProxy5 = SignalProxy<R, T1, T2, T3, T4, T5>;
+template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+using SignalProxy6 = SignalProxy<R, T1, T2, T3, T4, T5, T6>;
+
+// TODO: When we can break ABI, consider renaming
+// SignalProxyDetailed => SignalProxyDetailedBase
+// SignalProxyDetailedAnyType => SignalProxyDetailed
 
 // Shared portion of a Signal with detail
 /** The SignalProxy provides an API similar to sigc::signal that can be used to
@@ -273,10 +251,10 @@ public:
  * the template derivatives, which serve as gatekeepers for the
  * types allowed on a particular signal.
  */
-class SignalProxyDetailedBase : public SignalProxyBase
+class SignalProxyDetailed : public SignalProxyBase
 {
 public:
-  ~SignalProxyDetailedBase() noexcept;
+  ~SignalProxyDetailed() noexcept;
 
   /// Stops the current signal emission (not in libsigc++)
   void emission_stop();
@@ -288,11 +266,11 @@ protected:
    *             and the C callbacks that should be called by glib.
    * @param detail_name The detail name, if any.
    */
-  SignalProxyDetailedBase(
+  SignalProxyDetailed(
     Glib::ObjectBase* obj, const SignalProxyInfo* info, const Glib::ustring& detail_name);
 
   /** Connects a signal handler to a signal.
-   * This is called by connect() and connect_notify() in derived SignalProxyDetailed classes.
+   * This is called by connect() and connect_notify() in derived SignalProxyDetailedAnyType classes.
    *
    * @param notify Whether this method is called by connect_notify() or by connect().
    * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
@@ -313,57 +291,35 @@ private:
   const Glib::ustring detailed_name_; // signal_name[::detail_name]
 
   // no copy assignment
-  SignalProxyDetailedBase& operator=(const SignalProxyDetailedBase&) = delete;
+  SignalProxyDetailed& operator=(const SignalProxyDetailed&);
 };
 
-/**** Glib::SignalProxyDetailed **********************************************/
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-template <class R, class... T>
-class SignalProxyDetailed;
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
 /** Proxy for signals with any number of arguments and possibly a detailed name.
  * Use the connect() or connect_notify() method, with sigc::mem_fun() or sigc::ptr_fun()
  * to connect signal handlers to signals.
- *
- * This is the primary template. There is a specialization for signal handlers
- * that return @c void. The specialization has no %connect_notify() method, and
- * the @a after parameter in its %connect() method has a default value.
  */
 template <class R, class... T>
-class SignalProxyDetailed<R(T...)> : public SignalProxyDetailedBase
+class SignalProxyDetailedAnyType : public SignalProxyDetailed
 {
 public:
-  using SlotType = sigc::slot<R(T...)>;
-  using VoidSlotType = sigc::slot<void(T...)>;
+  using SlotType = sigc::slot<R, T...>;
+  using VoidSlotType = sigc::slot<void, T...>;
 
-  SignalProxyDetailed(
+  SignalProxyDetailedAnyType(
     ObjectBase* obj, const SignalProxyInfo* info, const Glib::ustring& detail_name)
-  : SignalProxyDetailedBase(obj, info, detail_name)
+  : SignalProxyDetailed(obj, info, detail_name)
   {
   }
 
   /** Connects a signal handler to a signal.
    *
-   * For instance, connect(sigc::mem_fun(*this, &TheClass::on_something), false);
-   *
-   * For some signal handlers that return a value, it can make a big difference
-   * whether you connect before or after the default signal handler.
-   * Examples:
-   * - Gio::Application::signal_command_line() calls only one signal handler.
-   *   A handler connected after the default handler will never be called.
-   * - X event signals, such as Gtk::Widget::signal_button_press_event(), stop
-   *   calling signal handlers as soon as a called handler returns <tt>true</tt>.
-   *   If the default handler returns <tt>true</tt>, a handler connected after it
-   *   will not be called.
+   * For instance, connect( sigc::mem_fun(*this, &TheClass::on_something) );
    *
    * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
    * @param after Whether this signal handler should be called before or after the default signal
    * handler.
-   * @return A sigc::connection.
    */
-  sigc::connection connect(const SlotType& slot, bool after)
+  sigc::connection connect(const SlotType& slot, bool after = true)
   {
     return sigc::connection(connect_impl_(false, slot, after));
   }
@@ -373,7 +329,7 @@ public:
    *
    * @newin{2,48}
    */
-  sigc::connection connect(SlotType&& slot, bool after)
+  sigc::connection connect(SlotType&& slot, bool after = true)
   {
     return sigc::connection(connect_impl_(false, std::move(slot), after));
   }
@@ -383,19 +339,23 @@ public:
    *
    * For instance, connect_notify( sigc::mem_fun(*this, &TheClass::on_something) );
    *
+   * If the signal requires signal handlers with a @c void return type,
+   * the only difference between connect() and connect_notify() is the default
+   * value of @a after.
+   *
    * If the signal requires signal handlers with a return value of type T,
-   * %connect_notify() binds <tt>return T()</tt> to the connected signal handler.
+   * connect_notify() binds <tt>return T()</tt> to the connected signal handler.
    * For instance, if the return type is @c bool, the following two calls are equivalent.
    * @code
-   * connect_notify(sigc::mem_fun(*this, &TheClass::on_something));
-   * connect(sigc::bind_return<bool>(sigc::mem_fun(*this, &TheClass::on_something), false), false);
+   * connect_notify( sigc::mem_fun(*this, &TheClass::on_something) );
+   * connect( sigc::bind_return<bool>(sigc::mem_fun(*this, &TheClass::on_something), false), false
+   * );
    * @endcode
    *
    * @param slot The signal handler, which should have a @c void return type,
    *        usually created with sigc::mem_fun() or sigc::ptr_fun().
    * @param after Whether this signal handler should be called before or after the default signal
    * handler.
-   * @return A sigc::connection.
    */
   sigc::connection connect_notify(const VoidSlotType& slot, bool after = false)
   {
@@ -413,51 +373,24 @@ public:
   }
 };
 
-/** Proxy for signals with any number of arguments and possibly a detailed name.
- * Use the connect() method, with sigc::mem_fun() or sigc::ptr_fun()
- * to connect signal handlers to signals.
- *
- * This is a specialization for signal handlers that return @c void.
+/* Templates below has been added to avoid API break, and should not be
+ * used in a newly created code. SignalProxyDetailedAnyType class should be
+ * used instead of SignalProxyDetailed# class.
  */
-template <class... T>
-class SignalProxyDetailed<void(T...)> : public SignalProxyDetailedBase
-{
-public:
-  using SlotType = sigc::slot<void(T...)>;
-
-  SignalProxyDetailed(
-    ObjectBase* obj, const SignalProxyInfo* info, const Glib::ustring& detail_name)
-  : SignalProxyDetailedBase(obj, info, detail_name)
-  {
-  }
-
-  /** Connects a signal handler to a signal.
-   *
-   * For instance, connect( sigc::mem_fun(*this, &TheClass::on_something) );
-   *
-   * By default, the signal handler will be called after the default signal handler.
-   * This is usually fine for signal handlers that don't return a value.
-   *
-   * @param slot The signal handler, usually created with sigc::mem_fun() or sigc::ptr_fun().
-   * @param after Whether this signal handler should be called before or after the default signal
-   * handler.
-   * @return A sigc::connection.
-   */
-  sigc::connection connect(const SlotType& slot, bool after = true)
-  {
-    return sigc::connection(connect_impl_(false, slot, after));
-  }
-
-  /** Connects a signal handler to a signal.
-   * @see connect(const SlotType& slot, bool after).
-   *
-   * @newin{2,48}
-   */
-  sigc::connection connect(SlotType&& slot, bool after = true)
-  {
-    return sigc::connection(connect_impl_(false, std::move(slot), after));
-  }
-};
+template <typename R>
+using SignalProxyDetailed0 = SignalProxyDetailedAnyType<R>;
+template <typename R, typename T1>
+using SignalProxyDetailed1 = SignalProxyDetailedAnyType<R, T1>;
+template <typename R, typename T1, typename T2>
+using SignalProxyDetailed2 = SignalProxyDetailedAnyType<R, T1, T2>;
+template <typename R, typename T1, typename T2, typename T3>
+using SignalProxyDetailed3 = SignalProxyDetailedAnyType<R, T1, T2, T3>;
+template <typename R, typename T1, typename T2, typename T3, typename T4>
+using SignalProxyDetailed4 = SignalProxyDetailedAnyType<R, T1, T2, T3, T4>;
+template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
+using SignalProxyDetailed5 = SignalProxyDetailedAnyType<R, T1, T2, T3, T4, T5>;
+template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+using SignalProxyDetailed6 = SignalProxyDetailedAnyType<R, T1, T2, T3, T4, T5, T6>;
 
 } // namespace Glib
 
index 8603e76..2d51630 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/signalproxy_connectionnode.h>
@@ -41,8 +40,8 @@ SignalProxyConnectionNode::SignalProxyConnectionNode(sigc::slot_base&& slot, GOb
 // notify is a message coming up from the slot to be passed back to Gtk+
 // disconnect is a message coming up from the Gtk+ to be passed down to SigC++
 // static
-void
-SignalProxyConnectionNode::notify(sigc::notifiable* data)
+void*
+SignalProxyConnectionNode::notify(void* data)
 {
   // notification from libsigc++.
   SignalProxyConnectionNode* conn = static_cast<SignalProxyConnectionNode*>(data);
@@ -73,6 +72,8 @@ SignalProxyConnectionNode::notify(sigc::notifiable* data)
       g_signal_handler_disconnect(o, connection_id);
     }
   }
+
+  return nullptr; // apparently unused in libsigc++
 }
 
 // static
index 3099269..30da5c0 100644 (file)
@@ -16,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <sigc++/sigc++.h>
@@ -37,7 +36,7 @@ namespace Glib
   * It lives between the layer of Gtk+ and libsigc++.
   * It is very much an internal class.
   */
-class SignalProxyConnectionNode : public sigc::notifiable
+class SignalProxyConnectionNode
 {
 public:
   /** @param slot The signal handler for the glib signal.
@@ -56,7 +55,7 @@ public:
    * This callback is registered in the slot.
    * @param data The SignalProxyConnectionNode object (@p this).
    */
-  static void notify(sigc::notifiable* data);
+  static void* notify(void* data);
 
   /** Callback that is executed when the glib closure is destroyed.
    * @param data The SignalProxyConnectionNode object (@p this).
diff --git a/glib/glibmm/slisthandle.h b/glib/glibmm/slisthandle.h
new file mode 100644 (file)
index 0000000..7b95279
--- /dev/null
@@ -0,0 +1,410 @@
+#ifndef _GLIBMM_SLISTHANDLE_H
+#define _GLIBMM_SLISTHANDLE_H
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+#include <glibmm/containerhandle_shared.h>
+#include <glib.h>
+
+namespace Glib
+{
+
+namespace Container_Helpers
+{
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/* Create and fill a GSList as efficient as possible.
+ * This requires bidirectional iterators.
+ */
+template <class Bi, class Tr>
+GSList*
+create_slist(Bi pbegin, Bi pend, Tr)
+{
+  GSList* head = nullptr;
+
+  while (pend != pbegin)
+  {
+    // Use & to force a warning if the iterator returns a temporary object.
+    const void* const item = Tr::to_c_type(*&*--pend);
+    head = g_slist_prepend(head, const_cast<void*>(item));
+  }
+
+  return head;
+}
+
+/* Create a GSList from a 0-terminated input sequence.
+ * Build it in reverse order and reverse the whole list afterwards,
+ * because appending to the list would be horribly inefficient.
+ */
+template <class For, class Tr>
+GSList*
+create_slist(For pbegin, Tr)
+{
+  GSList* head = nullptr;
+
+  while (*pbegin)
+  {
+    // Use & to force a warning if the iterator returns a temporary object.
+    const void* const item = Tr::to_c_type(*&*pbegin);
+    head = g_slist_prepend(head, const_cast<void*>(item));
+    ++pbegin;
+  }
+
+  return g_slist_reverse(head);
+}
+
+/* Convert from any container that supports bidirectional iterators.
+ */
+template <class Tr, class Cont>
+struct SListSourceTraits
+{
+  static GSList* get_data(const Cont& cont)
+  {
+    return Glib::Container_Helpers::create_slist(cont.begin(), cont.end(), Tr());
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+/* Convert from a 0-terminated array.  The Cont
+ * argument must be a pointer to the first element.
+ */
+template <class Tr, class Cont>
+struct SListSourceTraits<Tr, Cont*>
+{
+  static GSList* get_data(const Cont* array)
+  {
+    return (array) ? Glib::Container_Helpers::create_slist(array, Tr()) : nullptr;
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+template <class Tr, class Cont>
+struct SListSourceTraits<Tr, const Cont*> : SListSourceTraits<Tr, Cont*>
+{
+};
+
+/* Convert from a 0-terminated array.  The Cont argument must be a pointer
+ * to the first element.  For consistency, the array must be 0-terminated,
+ * even though the array size is known at compile time.
+ */
+template <class Tr, class Cont, std::size_t N>
+struct SListSourceTraits<Tr, Cont[N]>
+{
+  static GSList* get_data(const Cont* array)
+  {
+    return Glib::Container_Helpers::create_slist(array, array + (N - 1), Tr());
+  }
+
+  static const Glib::OwnershipType initial_ownership = Glib::OWNERSHIP_SHALLOW;
+};
+
+template <class Tr, class Cont, std::size_t N>
+struct SListSourceTraits<Tr, const Cont[N]> : SListSourceTraits<Tr, Cont[N]>
+{
+};
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+/**
+ * @ingroup ContHelpers
+ */
+template <class Tr>
+class SListHandleIterator
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using iterator_category = std::forward_iterator_tag;
+  using value_type = CppType;
+  using difference_type = std::ptrdiff_t;
+  using reference = value_type;
+  using pointer = void;
+
+  explicit inline SListHandleIterator(const GSList* node);
+
+  inline value_type operator*() const;
+  inline SListHandleIterator<Tr>& operator++();
+  inline const SListHandleIterator<Tr> operator++(int);
+
+  inline bool operator==(const SListHandleIterator<Tr>& rhs) const;
+  inline bool operator!=(const SListHandleIterator<Tr>& rhs) const;
+
+private:
+  const GSList* node_;
+};
+
+} // namespace Container_Helpers
+
+// TODO: Remove this when we can break glibmm API.
+/** This is an intermediate type. When a method takes this, or returns this, you
+ * should use a standard C++ container of your choice, such as std::list or
+ * std::vector.
+ *
+ * However, this is not used in new API. We now prefer to just use std::vector,
+ * which is less flexibile, but makes the API clearer.
+ * @ingroup ContHandles
+ */
+template <class T, class Tr = Glib::Container_Helpers::TypeTraits<T>>
+class SListHandle
+{
+public:
+  using CppType = typename Tr::CppType;
+  using CType = typename Tr::CType;
+
+  using value_type = CppType;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+
+  using const_iterator = Glib::Container_Helpers::SListHandleIterator<Tr>;
+  using iterator = Glib::Container_Helpers::SListHandleIterator<Tr>;
+
+  template <class Cont>
+  inline SListHandle(const Cont& container);
+
+  // Take over ownership of a GSList created by GTK+ functions.
+  inline SListHandle(GSList* glist, Glib::OwnershipType ownership);
+
+  // Copying clears the ownership flag of the source handle.
+  inline SListHandle(const SListHandle<T, Tr>& other);
+
+  ~SListHandle() noexcept;
+
+  inline const_iterator begin() const;
+  inline const_iterator end() const;
+
+  template <class U>
+  inline operator std::vector<U>() const;
+  template <class U>
+  inline operator std::deque<U>() const;
+  template <class U>
+  inline operator std::list<U>() const;
+
+  template <class Cont>
+  inline void assign_to(Cont& container) const;
+  template <class Out>
+  inline void copy(Out pdest) const;
+
+  inline GSList* data() const;
+  inline std::size_t size() const;
+  inline bool empty() const;
+
+private:
+  GSList* pslist_;
+  mutable Glib::OwnershipType ownership_;
+
+  // No copy assignment.
+  SListHandle<T, Tr>& operator=(const SListHandle<T, Tr>&);
+};
+
+/***************************************************************************/
+/*  Inline implementation                                                  */
+/***************************************************************************/
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+namespace Container_Helpers
+{
+
+/**** Glib::Container_Helpers::SListHandleIterator<> ***********************/
+
+template <class Tr>
+inline SListHandleIterator<Tr>::SListHandleIterator(const GSList* node) : node_(node)
+{
+}
+
+template <class Tr>
+inline typename SListHandleIterator<Tr>::value_type SListHandleIterator<Tr>::operator*() const
+{
+  return Tr::to_cpp_type(static_cast<typename Tr::CTypeNonConst>(node_->data));
+}
+
+template <class Tr>
+inline SListHandleIterator<Tr>& SListHandleIterator<Tr>::operator++()
+{
+  node_ = node_->next;
+  return *this;
+}
+
+template <class Tr>
+inline const SListHandleIterator<Tr> SListHandleIterator<Tr>::operator++(int)
+{
+  const SListHandleIterator<Tr> tmp(*this);
+  node_ = node_->next;
+  return tmp;
+}
+
+template <class Tr>
+inline bool
+SListHandleIterator<Tr>::operator==(const SListHandleIterator<Tr>& rhs) const
+{
+  return (node_ == rhs.node_);
+}
+
+template <class Tr>
+inline bool
+SListHandleIterator<Tr>::operator!=(const SListHandleIterator<Tr>& rhs) const
+{
+  return (node_ != rhs.node_);
+}
+
+} // namespace Container_Helpers
+
+/**** Glib::SListHandle<> **************************************************/
+
+template <class T, class Tr>
+template <class Cont>
+inline SListHandle<T, Tr>::SListHandle(const Cont& container)
+: pslist_(Glib::Container_Helpers::SListSourceTraits<Tr, Cont>::get_data(container)),
+  ownership_(Glib::Container_Helpers::SListSourceTraits<Tr, Cont>::initial_ownership)
+{
+}
+
+template <class T, class Tr>
+inline SListHandle<T, Tr>::SListHandle(GSList* gslist, Glib::OwnershipType ownership)
+: pslist_(gslist), ownership_(ownership)
+{
+}
+
+template <class T, class Tr>
+inline SListHandle<T, Tr>::SListHandle(const SListHandle<T, Tr>& other)
+: pslist_(other.pslist_), ownership_(other.ownership_)
+{
+  other.ownership_ = Glib::OWNERSHIP_NONE;
+}
+
+template <class T, class Tr>
+SListHandle<T, Tr>::~SListHandle() noexcept
+{
+  if (ownership_ != Glib::OWNERSHIP_NONE)
+  {
+    if (ownership_ != Glib::OWNERSHIP_SHALLOW)
+    {
+      // Deep ownership: release each container element.
+      for (GSList* node = pslist_; node != nullptr; node = node->next)
+        Tr::release_c_type(static_cast<typename Tr::CTypeNonConst>(node->data));
+    }
+    g_slist_free(pslist_);
+  }
+}
+
+template <class T, class Tr>
+inline typename SListHandle<T, Tr>::const_iterator
+SListHandle<T, Tr>::begin() const
+{
+  return Glib::Container_Helpers::SListHandleIterator<Tr>(pslist_);
+}
+
+template <class T, class Tr>
+inline typename SListHandle<T, Tr>::const_iterator
+SListHandle<T, Tr>::end() const
+{
+  return Glib::Container_Helpers::SListHandleIterator<Tr>(nullptr);
+}
+
+template <class T, class Tr>
+template <class U>
+inline SListHandle<T, Tr>::operator std::vector<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::vector<U>(this->begin(), this->end());
+#else
+  std::vector<U> temp;
+  temp.reserve(this->size());
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline SListHandle<T, Tr>::operator std::deque<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::deque<U>(this->begin(), this->end());
+#else
+  std::deque<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class U>
+inline SListHandle<T, Tr>::operator std::list<U>() const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  return std::list<U>(this->begin(), this->end());
+#else
+  std::list<U> temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  return temp;
+#endif
+}
+
+template <class T, class Tr>
+template <class Cont>
+inline void
+SListHandle<T, Tr>::assign_to(Cont& container) const
+{
+#ifdef GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS
+  container.assign(this->begin(), this->end());
+#else
+  Cont temp;
+  Glib::Container_Helpers::fill_container(temp, this->begin(), this->end());
+  container.swap(temp);
+#endif
+}
+
+template <class T, class Tr>
+template <class Out>
+inline void
+SListHandle<T, Tr>::copy(Out pdest) const
+{
+  std::copy(this->begin(), this->end(), pdest);
+}
+
+template <class T, class Tr>
+inline GSList*
+SListHandle<T, Tr>::data() const
+{
+  return pslist_;
+}
+
+template <class T, class Tr>
+inline std::size_t
+SListHandle<T, Tr>::size() const
+{
+  return g_slist_length(pslist_);
+}
+
+template <class T, class Tr>
+inline bool
+SListHandle<T, Tr>::empty() const
+{
+  return (pslist_ == nullptr);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} // namespace Glib
+
+#endif /* _GLIBMM_SLISTHANDLE_H */
diff --git a/glib/glibmm/streamiochannel.cc b/glib/glibmm/streamiochannel.cc
new file mode 100644 (file)
index 0000000..f82a279
--- /dev/null
@@ -0,0 +1,207 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/streamiochannel.h>
+#include <glibmm/main.h> //For Source
+#include <glib.h>
+#include <fstream>
+#include <iostream>
+
+namespace Glib
+{
+
+#ifndef GLIBMM_DISABLE_DEPRECATED
+
+// static
+Glib::RefPtr<StreamIOChannel>
+StreamIOChannel::create(std::istream& stream)
+{
+  return Glib::RefPtr<StreamIOChannel>(new StreamIOChannel(&stream, nullptr));
+}
+
+// static
+Glib::RefPtr<StreamIOChannel>
+StreamIOChannel::create(std::ostream& stream)
+{
+  return Glib::RefPtr<StreamIOChannel>(new StreamIOChannel(nullptr, &stream));
+}
+
+// static
+Glib::RefPtr<StreamIOChannel>
+StreamIOChannel::create(std::iostream& stream)
+{
+  return Glib::RefPtr<StreamIOChannel>(new StreamIOChannel(&stream, &stream));
+}
+
+StreamIOChannel::StreamIOChannel(std::istream* stream_in, std::ostream* stream_out)
+: stream_in_(stream_in), stream_out_(stream_out)
+{
+  get_flags_vfunc(); // initialize GIOChannel flag bits
+}
+
+StreamIOChannel::~StreamIOChannel() noexcept
+{
+}
+
+IOStatus
+StreamIOChannel::read_vfunc(char* buf, gsize count, gsize& bytes_read)
+{
+  g_return_val_if_fail(stream_in_ != nullptr, IO_STATUS_ERROR);
+
+  stream_in_->clear();
+  stream_in_->read(buf, count);
+  bytes_read = stream_in_->gcount();
+
+  if (stream_in_->eof())
+    return IO_STATUS_EOF;
+
+  if (stream_in_->fail())
+  {
+    throw Glib::Error(G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_FAILED, "Reading from stream failed");
+  }
+
+  return IO_STATUS_NORMAL;
+}
+
+IOStatus
+StreamIOChannel::write_vfunc(const char* buf, gsize count, gsize& bytes_written)
+{
+  g_return_val_if_fail(stream_out_ != nullptr, IO_STATUS_ERROR);
+
+  bytes_written = 0;
+
+  stream_out_->clear();
+  stream_out_->write(buf, count);
+
+  if (stream_out_->fail())
+  {
+    throw Glib::Error(G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_FAILED, "Writing to stream failed");
+  }
+
+  bytes_written = count; // all or nothing ;)
+
+  return IO_STATUS_NORMAL;
+}
+
+IOStatus
+StreamIOChannel::seek_vfunc(gint64 offset, SeekType type)
+{
+  std::ios::seekdir direction = std::ios::beg;
+
+  switch (type)
+  {
+  case SEEK_TYPE_SET:
+    direction = std::ios::beg;
+    break;
+  case SEEK_TYPE_CUR:
+    direction = std::ios::cur;
+    break;
+  case SEEK_TYPE_END:
+    direction = std::ios::end;
+    break;
+  }
+
+  bool failed = false;
+
+  if (stream_in_)
+  {
+    stream_in_->clear();
+    stream_in_->seekg(offset, direction);
+    failed = stream_in_->fail();
+  }
+  if (stream_out_)
+  {
+    stream_out_->clear();
+    stream_out_->seekp(offset, direction);
+    failed = (failed || stream_out_->fail());
+  }
+
+  if (failed)
+  {
+    throw Glib::Error(G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_FAILED, "Seeking into stream failed");
+  }
+
+  return Glib::IO_STATUS_NORMAL;
+}
+
+IOStatus
+StreamIOChannel::close_vfunc()
+{
+  bool failed = false;
+
+  if (std::fstream* const fstream = dynamic_cast<std::fstream*>(stream_in_))
+  {
+    fstream->clear();
+    fstream->close();
+    failed = fstream->fail();
+  }
+  else if (std::ifstream* const ifstream = dynamic_cast<std::ifstream*>(stream_in_))
+  {
+    ifstream->clear();
+    ifstream->close();
+    failed = ifstream->fail();
+  }
+  else if (std::ofstream* const ofstream = dynamic_cast<std::ofstream*>(stream_out_))
+  {
+    ofstream->clear();
+    ofstream->close();
+    failed = ofstream->fail();
+  }
+  else
+  {
+    throw Glib::Error(
+      G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_FAILED, "Attempt to close non-file stream");
+  }
+
+  if (failed)
+  {
+    throw Glib::Error(G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_FAILED, "Failed to close stream");
+  }
+
+  return IO_STATUS_NORMAL;
+}
+
+IOStatus StreamIOChannel::set_flags_vfunc(IOFlags)
+{
+  return IO_STATUS_NORMAL;
+}
+
+IOFlags
+StreamIOChannel::get_flags_vfunc()
+{
+  gobj()->is_seekable = 1;
+  gobj()->is_readable = (stream_in_ != nullptr);
+  gobj()->is_writeable = (stream_out_ != nullptr);
+
+  IOFlags flags = IO_FLAG_IS_SEEKABLE;
+
+  if (stream_in_)
+    flags |= IO_FLAG_IS_READABLE;
+  if (stream_out_)
+    flags |= IO_FLAG_IS_WRITEABLE;
+
+  return flags;
+}
+
+Glib::RefPtr<Glib::Source> StreamIOChannel::create_watch_vfunc(IOCondition)
+{
+  g_warning("Glib::StreamIOChannel::create_watch_vfunc() not implemented");
+  return Glib::RefPtr<Glib::Source>();
+}
+
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+} // namespace Glib
diff --git a/glib/glibmm/streamiochannel.h b/glib/glibmm/streamiochannel.h
new file mode 100644 (file)
index 0000000..28a1ae7
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _GLIBMM_STREAMIOCHANNEL_H
+#define _GLIBMM_STREAMIOCHANNEL_H
+
+#include <glibmmconfig.h>
+#include <glibmm/iochannel.h>
+#include <iosfwd>
+
+namespace Glib
+{
+
+#ifndef GLIBMM_DISABLE_DEPRECATED
+
+/** @deprecated This whole class was deprecated in glibmm 2.2 - See the Glib::IOChannel
+ * documentation for an explanation.
+ */
+class StreamIOChannel : public Glib::IOChannel
+{
+public:
+  ~StreamIOChannel() noexcept override;
+
+  static Glib::RefPtr<StreamIOChannel> create(std::istream& stream);
+  static Glib::RefPtr<StreamIOChannel> create(std::ostream& stream);
+  static Glib::RefPtr<StreamIOChannel> create(std::iostream& stream);
+
+protected:
+  std::istream* stream_in_;
+  std::ostream* stream_out_;
+
+  StreamIOChannel(std::istream* stream_in, std::ostream* stream_out);
+
+  IOStatus read_vfunc(char* buf, gsize count, gsize& bytes_read) override;
+  IOStatus write_vfunc(const char* buf, gsize count, gsize& bytes_written) override;
+  IOStatus seek_vfunc(gint64 offset, SeekType type) override;
+  IOStatus close_vfunc() override;
+  IOStatus set_flags_vfunc(IOFlags flags) override;
+  IOFlags get_flags_vfunc() override;
+  Glib::RefPtr<Glib::Source> create_watch_vfunc(IOCondition cond) override;
+};
+
+#endif //#GLIBMM_DISABLE_DEPRECATED
+
+} // namespace Glib
+
+#endif /* _GLIBMM_STREAMIOCHANNEL_H */
index 329b1b0..f6ce8fa 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -14,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
index a81d770..e6659e2 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_STRINGUTILS_H
 #define _GLIBMM_STRINGUTILS_H
 
-/* $Id$ */
-
 /* Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -17,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/ustring.h>
diff --git a/glib/glibmm/threadpool.cc b/glib/glibmm/threadpool.cc
new file mode 100644 (file)
index 0000000..7bc93dd
--- /dev/null
@@ -0,0 +1,254 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+#ifndef GLIBMM_DISABLE_DEPRECATED
+
+#include <glibmm/threadpool.h>
+#include <glibmm/exceptionhandler.h>
+#include <glibmm/threads.h>
+#include <glib.h>
+#include <list>
+
+namespace Glib
+{
+
+// internal
+class ThreadPool::SlotList
+{
+public:
+  SlotList();
+  ~SlotList() noexcept;
+
+  // noncopyable
+  SlotList(const ThreadPool::SlotList&) = delete;
+  ThreadPool::SlotList& operator=(const ThreadPool::SlotList&) = delete;
+
+  sigc::slot<void>* push(const sigc::slot<void>& slot);
+  sigc::slot<void> pop(sigc::slot<void>* slot_ptr);
+
+  void lock_and_unlock();
+
+private:
+  Glib::Threads::Mutex mutex_;
+  std::list<sigc::slot<void>> list_;
+};
+
+ThreadPool::SlotList::SlotList()
+{
+}
+
+ThreadPool::SlotList::~SlotList() noexcept
+{
+}
+
+sigc::slot<void>*
+ThreadPool::SlotList::push(const sigc::slot<void>& slot)
+{
+  Threads::Mutex::Lock lock(mutex_);
+
+  list_.emplace_back(slot);
+  return &list_.back();
+}
+
+sigc::slot<void>
+ThreadPool::SlotList::pop(sigc::slot<void>* slot_ptr)
+{
+  sigc::slot<void> slot;
+
+  {
+    Threads::Mutex::Lock lock(mutex_);
+
+    std::list<sigc::slot<void>>::iterator pslot = list_.begin();
+    while (pslot != list_.end() && slot_ptr != &*pslot)
+      ++pslot;
+
+    if (pslot != list_.end())
+    {
+      slot = *pslot;
+      list_.erase(pslot);
+    }
+  }
+
+  return slot;
+}
+
+void
+ThreadPool::SlotList::lock_and_unlock()
+{
+  mutex_.lock();
+  mutex_.unlock();
+}
+
+} // namespace Glib
+
+namespace
+{
+
+static void
+call_thread_entry_slot(void* data, void* user_data)
+{
+  try
+  {
+    Glib::ThreadPool::SlotList* const slot_list =
+      static_cast<Glib::ThreadPool::SlotList*>(user_data);
+
+    sigc::slot<void> slot(slot_list->pop(static_cast<sigc::slot<void>*>(data)));
+
+    slot();
+  }
+  catch (Glib::Threads::Thread::Exit&)
+  {
+    // Just exit from the thread.  The Thread::Exit exception
+    // is our sane C++ replacement of g_thread_exit().
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+}
+
+} // anonymous namespace
+
+namespace Glib
+{
+
+ThreadPool::ThreadPool(int max_threads, bool exclusive)
+: gobject_(nullptr), slot_list_(new SlotList())
+{
+  GError* error = nullptr;
+
+  gobject_ = g_thread_pool_new(&call_thread_entry_slot, slot_list_, max_threads, exclusive, &error);
+
+  if (error)
+  {
+    delete slot_list_;
+    slot_list_ = nullptr;
+    Glib::Error::throw_exception(error);
+  }
+}
+
+ThreadPool::~ThreadPool() noexcept
+{
+  if (gobject_)
+    g_thread_pool_free(gobject_, 1, 1);
+
+  if (slot_list_)
+  {
+    slot_list_->lock_and_unlock();
+    delete slot_list_;
+  }
+}
+
+void
+ThreadPool::push(const sigc::slot<void>& slot)
+{
+  sigc::slot<void>* const slot_ptr = slot_list_->push(slot);
+
+  GError* error = nullptr;
+  g_thread_pool_push(gobject_, slot_ptr, &error);
+
+  if (error)
+  {
+    slot_list_->pop(slot_ptr);
+    Glib::Error::throw_exception(error);
+  }
+}
+
+void
+ThreadPool::set_max_threads(int max_threads)
+{
+  GError* error = nullptr;
+  g_thread_pool_set_max_threads(gobject_, max_threads, &error);
+
+  if (error)
+    Glib::Error::throw_exception(error);
+}
+
+int
+ThreadPool::get_max_threads() const
+{
+  return g_thread_pool_get_max_threads(gobject_);
+}
+
+unsigned int
+ThreadPool::get_num_threads() const
+{
+  return g_thread_pool_get_num_threads(gobject_);
+}
+
+unsigned int
+ThreadPool::unprocessed() const
+{
+  return g_thread_pool_unprocessed(gobject_);
+}
+
+bool
+ThreadPool::get_exclusive() const
+{
+  g_return_val_if_fail(gobject_ != nullptr, false);
+
+  return gobject_->exclusive;
+}
+
+void
+ThreadPool::shutdown(bool immediately)
+{
+  if (gobject_)
+  {
+    g_thread_pool_free(gobject_, immediately, 1);
+    gobject_ = nullptr;
+  }
+
+  if (slot_list_)
+  {
+    slot_list_->lock_and_unlock();
+    delete slot_list_;
+    slot_list_ = nullptr;
+  }
+}
+
+// static
+void
+ThreadPool::set_max_unused_threads(int max_threads)
+{
+  g_thread_pool_set_max_unused_threads(max_threads);
+}
+
+// static
+int
+ThreadPool::get_max_unused_threads()
+{
+  return g_thread_pool_get_max_unused_threads();
+}
+
+// static
+unsigned int
+ThreadPool::get_num_unused_threads()
+{
+  return g_thread_pool_get_num_unused_threads();
+}
+
+// static
+void
+ThreadPool::stop_unused_threads()
+{
+  g_thread_pool_stop_unused_threads();
+}
+
+} // namespace Glib
+
+#endif // GLIBMM_DISABLE_DEPRECATED
diff --git a/glib/glibmm/threadpool.h b/glib/glibmm/threadpool.h
new file mode 100644 (file)
index 0000000..684fcbc
--- /dev/null
@@ -0,0 +1,199 @@
+#ifndef _GLIBMM_THREADPOOL_H
+#define _GLIBMM_THREADPOOL_H
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmmconfig.h>
+
+#ifndef GLIBMM_DISABLE_DEPRECATED
+
+#include <sigc++/sigc++.h>
+
+extern "C" {
+using GThreadPool = struct _GThreadPool;
+}
+
+namespace Glib
+{
+
+/** @defgroup ThreadPools Thread Pools
+ * Pools of threads to execute work concurrently.
+ *
+ * @deprecated This is deprecated in favor of the standard C++ concurrency API in C++11 and C++14.
+ *
+ * @{
+ */
+
+// TODO: Is std::async() an appropriate replacement to mention for this deprecated API?
+
+/** A pool of threads to execute work concurrently.
+ *
+ * @deprecated This is deprecated in favor of the standard C++ concurrency API in C++11 and C++14.
+ */
+class ThreadPool
+{
+public:
+  /** Constructs a new thread pool.
+   * Whenever you call ThreadPool::push(), either a new thread is created or an
+   * unused one is reused. At most @a max_threads threads are running
+   * concurrently for this thread pool. @a max_threads&nbsp;=&nbsp;-1 allows
+   * unlimited threads to be created for this thread pool.
+   *
+   * The parameter @a exclusive determines, whether the thread pool owns all
+   * threads exclusive or whether the threads are shared globally. If @a
+   * exclusive is <tt>true</tt>, @a max_threads threads are started immediately
+   * and they will run exclusively for this thread pool until it is destroyed
+   * by ~ThreadPool(). If @a exclusive is <tt>false</tt>, threads are created
+   * when needed and shared between all non-exclusive thread pools.  This
+   * implies that @a max_threads may not be -1 for exclusive thread pools.
+   *
+   * @param max_threads The maximal number of threads to execute concurrently
+   * in the new thread pool, -1 means no limit.
+   * @param exclusive Should this thread pool be exclusive?
+   * @throw Glib::ThreadError An error can only occur when @a exclusive is
+   * set to <tt>true</tt> and not all @a max_threads threads could be created.
+   */
+  explicit ThreadPool(int max_threads = -1, bool exclusive = false);
+  virtual ~ThreadPool() noexcept;
+
+  // See http://bugzilla.gnome.org/show_bug.cgi?id=512348 about the sigc::trackable issue.
+  // TODO: At the next ABI break, consider changing const sigc::slot<void>& slot
+  // to const std::function<void()>& func, if it can be assumed that all supported
+  // compilers understand the C++11 template class std::function<>.
+  /** Inserts @a slot into the list of tasks to be executed by the pool.
+   * When the number of currently running threads is lower than the maximal
+   * allowed number of threads, a new thread is started (or reused).  Otherwise
+   * @a slot stays in the queue until a thread in this pool finishes its
+   * previous task and processes @a slot.
+   *
+   * Because sigc::trackable is not thread-safe, if the slot represents a
+   * non-static class method and is created by sigc::mem_fun(), the class concerned
+   * should not derive from sigc::trackable. You can use, say, boost::bind() or,
+   * in C++11, std::bind() or a C++11 lambda expression instead of sigc::mem_fun().
+   *
+   * @param slot A new task for the thread pool.
+   * @throw Glib::ThreadError An error can only occur when a new thread
+   * couldn't be created. In that case @a slot is simply appended to the
+   * queue of work to do.
+   */
+  void push(const sigc::slot<void>& slot);
+
+  /** Sets the maximal allowed number of threads for the pool.
+   * A value of -1 means that the maximal number of threads is unlimited.
+   * Setting @a max_threads to 0 means stopping all work for pool. It is
+   * effectively frozen until @a max_threads is set to a non-zero value again.
+   *
+   * A thread is never terminated while it is still running. Instead the
+   * maximal number of threads only has effect for the allocation of new
+   * threads in ThreadPool::push().  A new thread is allocated whenever the
+   * number of currently running threads in the pool is smaller than the
+   * maximal number.
+   *
+   * @param max_threads A new maximal number of threads for the pool.
+   * @throw Glib::ThreadError An error can only occur when a new thread
+   * couldn't be created.
+   */
+  void set_max_threads(int max_threads);
+
+  /** Returns the maximal number of threads for the pool.
+   * @return The maximal number of threads.
+   */
+  int get_max_threads() const;
+
+  /** Returns the number of threads currently running in the pool.
+   * @return The number of threads currently running.
+   */
+  unsigned int get_num_threads() const;
+
+  /** Returns the number of tasks still unprocessed in the pool.
+   * @return The number of unprocessed tasks.
+   */
+  unsigned int unprocessed() const;
+
+  /** Returns whether all threads are exclusive to this pool.
+   * @return Whether all threads are exclusive to this pool.
+   */
+  bool get_exclusive() const;
+
+  /** Frees all resources allocated for the pool.
+   * If @a immediately is <tt>true</tt>, no new task is processed.  Otherwise the
+   * pool is not freed before the last task is processed.  Note however, that no
+   * thread of this pool is interrupted while processing a task. Instead at least
+   * all still running threads can finish their tasks before the pool is freed.
+   *
+   * This method does not return before all tasks to be processed (dependent on
+   * @a immediately, whether all or only the currently running) are ready.
+   * After calling shutdown() the pool must not be used anymore.
+   *
+   * @param immediately Should the pool shut down immediately?
+   */
+  void shutdown(bool immediately = false);
+
+  /** Sets the maximal number of unused threads to @a max_threads.
+   * If @a max_threads is -1, no limit is imposed on the number of unused threads.
+   * @param max_threads Maximal number of unused threads.
+   */
+  static void set_max_unused_threads(int max_threads);
+
+  /** Returns the maximal allowed number of unused threads.
+   * @return The maximal number of unused threads.
+   */
+  static int get_max_unused_threads();
+
+  /** Returns the number of currently unused threads.
+   * @return The number of currently unused threads.
+   */
+  static unsigned int get_num_unused_threads();
+
+  /** Stops all currently unused threads.
+   * This does not change the maximal number of unused threads.  This function can
+   * be used to regularly stop all unused threads e.g. from Glib::signal_timeout().
+   */
+  static void stop_unused_threads();
+
+  GThreadPool* gobj() { return gobject_; }
+  const GThreadPool* gobj() const { return gobject_; }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  class SlotList;
+#endif
+
+private:
+  GThreadPool* gobject_;
+  SlotList* slot_list_;
+
+  ThreadPool(const ThreadPool&);
+  ThreadPool& operator=(const ThreadPool&);
+};
+
+/** @} group ThreadPools */
+
+/***************************************************************************/
+/*  inline implementation                                                  */
+/***************************************************************************/
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/**** Glib::Private ********************************************************/
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} // namespace Glib
+
+#endif // GLIBMM_DISABLE_DEPRECATED
+
+#endif /* _GLIBMM_THREADPOOL_H */
index ad3bd6b..7f32b18 100644 (file)
@@ -13,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm.h>
index 2559ffa..fcee92b 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_TIMER_H
 #define _GLIBMM_TIMER_H
 
-/* $Id$ */
-
 /* timer.h
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -19,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 extern "C" {
index 63e93c5..c8bb9a9 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* timeval.cc
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/timeval.h>
index 11b3c44..e67a9e0 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_TIMEVAL_H
 #define _GLIBMM_TIMEVAL_H
 
-/* $Id$ */
-
 /* timeval.h
  *
  * Copyright (C) 2002 The gtkmm Development Team
@@ -19,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index d05e986..c9895fb 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -1219,12 +1218,6 @@ ustring::validate(ustring::const_iterator& first_invalid) const
   return (is_valid != 0);
 }
 
-ustring
-ustring::make_valid() const
-{
-  return ustring(g_utf8_make_valid(string_.data(), string_.size()));
-}
-
 bool
 ustring::is_ascii() const
 {
index 0aee963..532a78f 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -184,9 +183,7 @@ gunichar get_unichar_from_std_iterator(std::string::const_iterator pos) G_GNUC_P
  * If you're using std::ostringstream to build strings for display in the
  * user interface, you must convert the result back to UTF-8 as shown below:
  * @code
- * std::locale::global(std::locale("")); // Set the global locale to the user's preferred locale.
- *                                       // Usually unnecessary here, because Glib::init()
- *                                       // does it for you.
+ * std::locale::global(std::locale("")); // set the global locale to the user's preferred locale
  * std::ostringstream output;
  * output << percentage << " % done";
  * label->set_text(Glib::locale_to_utf8(output.str()));
@@ -596,12 +593,6 @@ public:
   /*! Check whether the string is valid UTF-8. */
   bool validate(const_iterator& first_invalid) const;
 
-  /*! Return a copy that is a valid UTF-8 string replacing invalid bytes in the
-   *  original with Unicode replacement character (U+FFFD).
-   *  If the string is valid - return it's copy.
-   */
-  ustring make_valid() const;
-
   /*! Check whether the string is plain 7-bit ASCII. @par
    * Unlike any other ustring method, is_ascii() is safe to use on invalid
    * UTF-8 strings.  If the string isn't valid UTF-8, it cannot be valid
@@ -611,7 +602,7 @@ public:
   bool is_ascii() const;
 
   /*! "Normalize" the %Unicode character representation of the string. */
-  ustring normalize(NormalizeMode mode = NormalizeMode::DEFAULT_COMPOSE) const;
+  ustring normalize(NormalizeMode mode = NORMALIZE_DEFAULT_COMPOSE) const;
 
   //! @}
   //! @name Character case conversion.
index 172ff7a..4c21660 100644 (file)
@@ -1,7 +1,3 @@
-// -*- c++ -*-
-
-/* $Id$ */
-
 /* Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -15,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
index 5e17183..eaf4c15 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+/* Occasionally, a struct variable has to be initialized after its definition,
+ * i.e. when using structs as class member data.  For convenience, the macro
+ * GLIBMM_INITIALIZE_STRUCT(Var, Type) is provided.  It even avoids creating
+ * a temporary if the compiler is GCC.
+ *
+ * @deprecated Use e.g. std::memset() instead.
+ * It's not used any more in the code generated by _CLASS_BOXEDTYPE_STATIC.
+ * It generates compiler warnings if __STRICT_ANSI__ is defined.
+ */
+#if ((__GNUC__ >= 3) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) && !defined(__STRICT_ANSI__)
+
+#define GLIBMM_INITIALIZE_STRUCT(Var, Type) __builtin_memset(&(Var), 0, sizeof(Type))
+
+#else
+
+// TODO: This causes warnings like this:
+//"missing initializer for member"
+#define GLIBMM_INITIALIZE_STRUCT(Var, Type) \
+  G_STMT_START                              \
+  {                                         \
+    Type const temp_initializer__ = {       \
+      0,                                    \
+    };                                      \
+    (Var) = temp_initializer__;             \
+  }                                         \
+  G_STMT_END
+
+#endif
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 namespace Glib
 {
 
 // These are used by gmmproc-generated type conversions:
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+/** Helper to deal with memory allocated
+ * by GLib functions in an exception-safe manner.
+ *
+ * @deprecated Use make_unique_ptr_gfree() instead.
+ */
+template <typename T>
+class ScopedPtr
+{
+private:
+  T* ptr_;
+  ScopedPtr(const ScopedPtr<T>&);
+  ScopedPtr<T>& operator=(const ScopedPtr<T>&);
+
+public:
+  ScopedPtr() : ptr_(nullptr) {}
+  explicit ScopedPtr(T* ptr) : ptr_(ptr) {}
+  ~ScopedPtr() noexcept { g_free(ptr_); }
+  T* get() const { return ptr_; }
+  T** addr() { return &ptr_; }
+};
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 /** Helper to deal with memory allocated
  * by GLib functions in an exception-safe manner.
  *
@@ -42,6 +95,17 @@ make_unique_ptr_gfree(T* p)
   return std::unique_ptr<T[], decltype(&g_free)>(p, &g_free);
 }
 
+// TODO: Deprecate this? We don't use it ourselves.
+/** Removes the const nature of a ptr
+ *
+ */
+template <class T>
+inline T*
+unconst(const T* t)
+{
+  return const_cast<T*>(t);
+}
+
 // Convert const gchar* to ustring, while treating NULL as empty string.
 inline Glib::ustring
 convert_const_gchar_ptr_to_ustring(const char* str)
index 893bb85..3eece8f 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -14,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/value.h>
@@ -138,7 +134,7 @@ Glib::RefPtr<Glib::ObjectBase>
 ValueBase_Object::get_object_copy() const
 {
   GObject* const data = static_cast<GObject*>(g_value_get_object(&gobject_));
-  return Glib::make_refptr_for_instance<Glib::ObjectBase>(Glib::wrap_auto(data, true));
+  return Glib::RefPtr<Glib::ObjectBase>(Glib::wrap_auto(data, true));
 }
 
 GParamSpec*
index f2d3f30..fc8205c 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -140,6 +139,7 @@ protected:
 class ValueBase_Enum : public ValueBase
 {
 public:
+  using CType = gint;
   static GType value_type() G_GNUC_CONST;
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -160,6 +160,7 @@ protected:
 class ValueBase_Flags : public ValueBase
 {
 public:
+  using CType = guint;
   static GType value_type() G_GNUC_CONST;
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -180,6 +181,7 @@ protected:
 class ValueBase_String : public ValueBase
 {
 public:
+  using CType = const gchar*;
   static GType value_type() G_GNUC_CONST;
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -213,53 +215,31 @@ class Value_Boxed : public ValueBase_Boxed
 {
 public:
   using CppType = T;
+  using CType = typename T::BaseObjectType*;
 
   static GType value_type() { return T::get_type(); }
 
   void set(const CppType& data) { set_boxed(data.gobj()); }
-  CppType get() const { return CppType(static_cast<typename T::BaseObjectType*>(get_boxed())); }
+  CppType get() const { return CppType(static_cast<CType>(get_boxed())); }
 };
 
 // More spec-compliant compilers (such as Tru64) need this to be near Glib::Object instead.
 #ifdef GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION
 
-namespace Traits {
-
-template<typename, typename>
-struct HasGetBaseType;
-
-template<typename T, typename Ret, typename... Args>
-struct HasGetBaseType<T, Ret(Args...)> {
-  template<typename U, U>
-   struct Check;
-
-  template<typename U>
-  static std::true_type
-  Test(Check<Ret(*)(Args...), &U::get_base_type>*);
-
-  template<typename U>
-  static std::false_type Test(...);
-
-  static const bool value = decltype(Test<T>(0))::value;
-  //using type = decltype(Test<T>(0));
-};
-
-} // namespace Traits
-
 /** Partial specialization for RefPtr<> to Glib::Object.
  * @ingroup glibmmValue
  */
 template <class T>
-class Value<Glib::RefPtr<T>, typename std::enable_if<Glib::Traits::HasGetBaseType<T, GType()>::value>::type>
-: public ValueBase_Object
+class Value<Glib::RefPtr<T>> : public ValueBase_Object
 {
 public:
   using CppType = Glib::RefPtr<T>;
+  using CType = typename T::BaseObjectType*;
 
   static GType value_type() { return T::get_base_type(); }
 
-  void set(const CppType& data) { set_object(const_cast<std::remove_const_t<T>*>(data.get())); }
-  CppType get() const { return std::dynamic_pointer_cast<T>(get_object_copy()); }
+  void set(const CppType& data) { set_object(data.operator->()); }
+  CppType get() const { return Glib::RefPtr<T>::cast_dynamic(get_object_copy()); }
 };
 
 // The SUN Forte Compiler has a problem with this:
@@ -268,19 +248,18 @@ public:
 /** Partial specialization for RefPtr<> to const Glib::Object.
  * @ingroup glibmmValue
  */
-/*
 template <class T>
-class Value<Glib::RefPtr<const T>, typename std::enable_if<std::is_base_of<Glib::ObjectBase, T>::value>::type> : public ValueBase_Object
+class Value<Glib::RefPtr<const T>> : public ValueBase_Object
 {
 public:
   using CppType = Glib::RefPtr<const T>;
+  using CType = typename T::BaseObjectType*;
 
   static GType value_type() { return T::get_base_type(); }
 
-  void set(const CppType& data) { set_object(const_cast<T*>(data.get())); }
-  CppType get() const { return std::dynamic_pointer_cast<T>(get_object_copy()); }
+  void set(const CppType& data) { set_object(const_cast<T*>(data.operator->())); }
+  CppType get() const { return Glib::RefPtr<T>::cast_dynamic(get_object_copy()); }
 };
-*/
 #endif // GLIBMM_HAVE_DISAMBIGUOUS_CONST_TEMPLATE_SPECIALIZATIONS
 
 #endif // GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION
@@ -331,7 +310,7 @@ class Value_Enum : public ValueBase_Enum
 public:
   using CppType = T;
 
-  void set(CppType data) { set_enum(static_cast<int>(data)); }
+  void set(CppType data) { set_enum(data); }
   CppType get() const { return CppType(get_enum()); }
 };
 
@@ -344,7 +323,7 @@ class Value_Flags : public ValueBase_Flags
 public:
   using CppType = T;
 
-  void set(CppType data) { set_flags(static_cast<int>(data)); }
+  void set(CppType data) { set_flags(data); }
   CppType get() const { return CppType(get_flags()); }
 };
 
index 69354ef..1526070 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* Copyright 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -14,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/value.h>
index 0284888..d2ea01c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef _GLIBMM_VALUE_CUSTOM_H
@@ -57,12 +56,12 @@ GType custom_pointer_type_register(const char* type_name);
 /**
  * @ingroup glibmmValue
  */
-template <class PtrT>
+template <class T, class PtrT>
 class Value_Pointer : public ValueBase_Object
 {
 public:
-  using T = std::remove_cv_t<std::remove_pointer_t<PtrT>>;
   using CppType = PtrT;
+  using CType = void*;
 
   static inline GType value_type() G_GNUC_CONST;
 
@@ -96,11 +95,12 @@ private:
  * cannot ensure that no exceptions will be thrown, consider using either
  * a normal pointer or a smart pointer to hold your objects indirectly.
  */
-template <class T, typename Enable = void>
+template <class T>
 class Value : public ValueBase_Boxed
 {
 public:
   using CppType = T;
+  using CType = T*;
 
   static GType value_type() G_GNUC_CONST;
 
@@ -120,8 +120,8 @@ private:
  * No attempt is made to manage the memory associated with the
  * pointer, you must take care of that yourself.
  */
-template <class T, typename Enable>
-class Value<T*, Enable> : public Value_Pointer<T*>
+template <class T>
+class Value<T*> : public Value_Pointer<T, T*>
 {
 };
 
@@ -130,37 +130,37 @@ class Value<T*, Enable> : public Value_Pointer<T*>
  * No attempt is made to manage the memory associated with the
  * pointer, you must take care of that yourself.
  */
-template <class T, typename Enable>
-class Value<const T*, Enable> : public Value_Pointer<const T*>
+template <class T>
+class Value<const T*> : public Value_Pointer<T, const T*>
 {
 };
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 
-/**** Glib::Value_Pointer<PtrT> *****************************************/
+/**** Glib::Value_Pointer<T, PtrT> *****************************************/
 
 /** Implementation for Glib::Object pointers **/
 
 // static
-template <class PtrT>
+template <class T, class PtrT>
 inline GType
-Value_Pointer<PtrT>::value_type_(Glib::Object*)
+Value_Pointer<T, PtrT>::value_type_(Glib::Object*)
 {
   return T::get_base_type();
 }
 
-template <class PtrT>
+template <class T, class PtrT>
 inline void
-Value_Pointer<PtrT>::set_(PtrT data, Glib::Object*)
+Value_Pointer<T, PtrT>::set_(PtrT data, Glib::Object*)
 {
   set_object(const_cast<T*>(data));
 }
 
 // More spec-compliant compilers (such as Tru64) need this to be near Glib::Object instead.
 #ifdef GLIBMM_CAN_USE_DYNAMIC_CAST_IN_UNUSED_TEMPLATE_WITHOUT_DEFINITION
-template <class PtrT>
+template <class T, class PtrT>
 inline PtrT
-Value_Pointer<PtrT>::get_(Glib::Object*) const
+Value_Pointer<T, PtrT>::get_(Glib::Object*) const
 {
   return dynamic_cast<T*>(get_object());
 }
@@ -169,9 +169,9 @@ Value_Pointer<PtrT>::get_(Glib::Object*) const
 /** Implementation for custom pointers **/
 
 // static
-template <class PtrT>
+template <class T, class PtrT>
 GType
-Value_Pointer<PtrT>::value_type_(void*)
+Value_Pointer<T, PtrT>::value_type_(void*)
 {
   static GType custom_type = 0;
 
@@ -181,16 +181,16 @@ Value_Pointer<PtrT>::value_type_(void*)
   return custom_type;
 }
 
-template <class PtrT>
+template <class T, class PtrT>
 inline void
-Value_Pointer<PtrT>::set_(PtrT data, void*)
+Value_Pointer<T, PtrT>::set_(PtrT data, void*)
 {
   gobject_.data[0].v_pointer = const_cast<T*>(data);
 }
 
-template <class PtrT>
+template <class T, class PtrT>
 inline PtrT
-Value_Pointer<PtrT>::get_(void*) const
+Value_Pointer<T, PtrT>::get_(void*) const
 {
   return static_cast<T*>(gobject_.data[0].v_pointer);
 }
@@ -198,25 +198,25 @@ Value_Pointer<PtrT>::get_(void*) const
 /** Public forwarding interface **/
 
 // static
-template <class PtrT>
+template <class T, class PtrT>
 inline GType
-Value_Pointer<PtrT>::value_type()
+Value_Pointer<T, PtrT>::value_type()
 {
   // Dispatch to the specific value_type_() overload.
-  return Value_Pointer<PtrT>::value_type_(static_cast<T*>(nullptr));
+  return Value_Pointer<T, PtrT>::value_type_(static_cast<T*>(nullptr));
 }
 
-template <class PtrT>
+template <class T, class PtrT>
 inline void
-Value_Pointer<PtrT>::set(PtrT data)
+Value_Pointer<T, PtrT>::set(PtrT data)
 {
   // Dispatch to the specific set_() overload.
   this->set_(data, static_cast<T*>(nullptr));
 }
 
-template <class PtrT>
+template <class T, class PtrT>
 inline PtrT
-Value_Pointer<PtrT>::get() const
+Value_Pointer<T, PtrT>::get() const
 {
   // Dispatch to the specific get_() overload.
   return this->get_(static_cast<T*>(nullptr));
@@ -225,29 +225,29 @@ Value_Pointer<PtrT>::get() const
 /**** Glib::Value<T> *******************************************************/
 
 // Static data, specific to each template instantiation.
-template <class T, typename Enable>
-GType Value<T, Enable>::custom_type_ = 0;
+template <class T>
+GType Value<T>::custom_type_ = 0;
 
-template <class T, typename Enable>
+template <class T>
 inline void
-Value<T, Enable>::set(const typename Value<T, Enable>::CppType& data)
+Value<T>::set(const typename Value<T>::CppType& data)
 {
   // Assume the value is already default-initialized.  See value_init_func().
   *static_cast<T*>(gobject_.data[0].v_pointer) = data;
 }
 
-template <class T, typename Enable>
-inline typename Value<T, Enable>::CppType
-Value<T, Enable>::get() const
+template <class T>
+inline typename Value<T>::CppType
+Value<T>::get() const
 {
   // Assume the pointer is not NULL.  See value_init_func().
   return *static_cast<T*>(gobject_.data[0].v_pointer);
 }
 
 // static
-template <class T, typename Enable>
+template <class T>
 GType
-Value<T, Enable>::value_type()
+Value<T>::value_type()
 {
   if (!custom_type_)
   {
@@ -258,26 +258,26 @@ Value<T, Enable>::value_type()
 }
 
 // static
-template <class T, typename Enable>
+template <class T>
 void
-Value<T, Enable>::value_init_func(GValue* value)
+Value<T>::value_init_func(GValue* value)
 {
   // Never store a NULL pointer (unless we're out of memory).
   value->data[0].v_pointer = new (std::nothrow) T();
 }
 
 // static
-template <class T, typename Enable>
+template <class T>
 void
-Value<T, Enable>::value_free_func(GValue* value)
+Value<T>::value_free_func(GValue* value)
 {
   delete static_cast<T*>(value->data[0].v_pointer);
 }
 
 // static
-template <class T, typename Enable>
+template <class T>
 void
-Value<T, Enable>::value_copy_func(const GValue* src_value, GValue* dest_value)
+Value<T>::value_copy_func(const GValue* src_value, GValue* dest_value)
 {
   // Assume the source is not NULL.  See value_init_func().
   const T& source = *static_cast<T*>(src_value->data[0].v_pointer);
similarity index 66%
rename from glib/glibmm/extraclassinit.cc
rename to glib/glibmm/variantdbusstring.cc
index 343fc6f..e8ad5ce 100644 (file)
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <glibmm/extraclassinit.h>
-
-namespace Glib
-{
-
-ExtraClassInit::ExtraClassInit(GClassInitFunc class_init_func, void* class_data,
-  GInstanceInitFunc instance_init_func)
-{
-  if (class_init_func)
-    add_custom_class_init_function(class_init_func, class_data);
-
-  if (instance_init_func)
-    set_custom_instance_init_function(instance_init_func);
-}
-
-} // namespace Glib
+#include <glibmm/variantdbusstring.h>
diff --git a/glib/glibmm/variantdbusstring.h b/glib/glibmm/variantdbusstring.h
new file mode 100644 (file)
index 0000000..f6a6e75
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _GLIBMM_VARIANT_DBUS_STRING_H
+#define _GLIBMM_VARIANT_DBUS_STRING_H
+/* Copyright (C) 2017 The glibmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/ustring.h>
+
+namespace Glib
+{
+
+/** String class for D-Bus object paths in Glib::Variant.
+ *
+ * Use it if you want to create a Glib::Variant with D-Bus object paths.
+ *
+ * @code
+ * using opstring_with_string_t =
+ *   std::map<Glib::DBusObjectPathString, Glib::Variant<Glib::ustring>>;
+ * opstring_with_string_t map1;
+ * map1["/map1/path1"] = Glib::Variant<Glib::ustring>::create("value1");
+ * auto variant1 = Glib::Variant<opstring_with_string_t>::create(map1);
+ * @endcode
+ *
+ * @newin{2,54}
+ * @ingroup Variant
+*/
+class DBusObjectPathString : public Glib::ustring
+{
+public:
+  using Glib::ustring::ustring;
+};
+
+/** String class for D-Bus signatures in Glib::Variant.
+ *
+ * Use it if you want to create a Glib::Variant with a D-Bus signature.
+ *
+ * @code
+ * auto variant = Glib::Variant<Glib::DBusSignatureString>::create("s");
+ * @endcode
+ *
+ * @newin{2,54}
+ * @ingroup Variant
+*/
+class DBusSignatureString : public Glib::ustring
+{
+public:
+  using Glib::ustring::ustring;
+};
+
+} // namespace Glib
+
+#endif /* _GLIBMM_VARIANT_DBUS_STRING_H */
index 8a8e711..b4cac1e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/vectorutils.h>
index 6ea434a..f68903d 100644 (file)
@@ -1,4 +1,3 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_VECTORUTILS_H
 #define _GLIBMM_VECTORUTILS_H
 
@@ -15,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <vector>
 #include <glibmmconfig.h>
diff --git a/glib/glibmm/weakref.h b/glib/glibmm/weakref.h
new file mode 100644 (file)
index 0000000..f4226cf
--- /dev/null
@@ -0,0 +1,465 @@
+#ifndef _GLIBMM_WEAKREF_H
+#define _GLIBMM_WEAKREF_H
+
+/* Copyright (C) 2015 The glibmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib-object.h>
+#include <glibmm/refptr.h>
+#include <glibmm/objectbase.h>
+#include <type_traits> // std::is_base_of<>
+#include <utility> // std::swap<>, std::forward<>
+
+namespace Glib
+{
+
+/** WeakRef<> is a weak reference smartpointer.
+ *
+ * WeakRef can store a pointer to any class that is derived from Glib::ObjectBase,
+ * and whose reference() method is noexcept.
+ * In glibmm and gtkmm, that is anything derived from Glib::ObjectBase.
+ *
+ * Unlike a RefPtr, a WeakRef does not contribute to the reference counting of
+ * the underlying object.
+ *
+ * @newin{2,46}
+ */
+template <typename T_CppObject>
+class WeakRef
+{
+  static_assert(std::is_base_of<Glib::ObjectBase, T_CppObject>::value,
+    "Glib::WeakRef can be used only for classes derived from Glib::ObjectBase.");
+
+public:
+  /** Default constructor.
+   *
+   * Create an empty weak reference.
+   */
+  inline WeakRef() noexcept;
+
+  /// Copy constructor.
+  inline WeakRef(const WeakRef& src) noexcept;
+
+  /// Move constructor.
+  inline WeakRef(WeakRef&& src) noexcept;
+
+  /// Copy constructor from different, but castable type.
+  template <typename T_CastFrom>
+  inline WeakRef(const WeakRef<T_CastFrom>& src) noexcept;
+
+  /// Move constructor from different, but castable type.
+  template <typename T_CastFrom>
+  inline WeakRef(WeakRef<T_CastFrom>&& src) noexcept;
+
+  /** Constructor from a RefPtr of the same or a castable type.
+   *
+   * Create a weak reference from a RefPtr of the same or a castable type.
+   * If the RefPtr references nothing, an empty weak reference will be constructed.
+   */
+  template <typename T_CastFrom>
+  inline WeakRef(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /// Destructor.
+  inline ~WeakRef() noexcept;
+
+  /// Swap the contents of two WeakRef<>.
+  inline void swap(WeakRef& other) noexcept;
+
+  /// Copy assignment operator.
+  inline WeakRef& operator=(const WeakRef& src) noexcept;
+
+  /// Move assignment operator.
+  inline WeakRef& operator=(WeakRef&& src) noexcept;
+
+  /// Copy assignment from different, but castable type.
+  template <typename T_CastFrom>
+  inline WeakRef& operator=(const WeakRef<T_CastFrom>& src) noexcept;
+
+  /// Move assignment from different, but castable type.
+  template <typename T_CastFrom>
+  inline WeakRef& operator=(WeakRef<T_CastFrom>&& src) noexcept;
+
+  /// Assignment from a RefPtr of the same or a castable type.
+  template <typename T_CastFrom>
+  inline WeakRef& operator=(const RefPtr<T_CastFrom>& src) noexcept;
+
+  /** Test whether the WeakRef<> points to any underlying instance.
+   *
+   * Mimics usage of ordinary pointers:
+   * @code
+   * if (ptr)
+   *   do_something();
+   * @endcode
+   *
+   * In a multi-threaded program a <tt>true</tt> return value can become
+   * obsolete at any time, even before the caller has a chance to test it,
+   * because the underlying instance may lose its last reference in another
+   * thread. Use get() if this is not acceptable.
+   */
+  inline explicit operator bool() const noexcept;
+
+  /** Create a strong reference to the underlying object.
+   *
+   * This is a thread-safe way to acquire a strong reference to the underlying
+   * object. If the WeakRef is empty, the returned RefPtr will reference nothing.
+   */
+  inline RefPtr<T_CppObject> get() const noexcept;
+
+  /// Make this WeakRef empty.
+  inline void reset() noexcept;
+
+  /** Dynamic cast to derived class.
+   *
+   * The WeakRef can't be cast with the usual notation so instead you can use
+   * @code
+   * ptr_derived = Glib::WeakRef<Derived>::cast_dynamic(ptr_base);
+   * @endcode
+   */
+  template <typename T_CastFrom>
+  static inline WeakRef cast_dynamic(const WeakRef<T_CastFrom>& src) noexcept;
+
+  /** Static cast to derived class.
+   *
+   * The WeakRef can't be cast with the usual notation so instead you can use
+   * @code
+   * ptr_derived = Glib::WeakRef<Derived>::cast_static(ptr_base);
+   * @endcode
+   */
+  template <typename T_CastFrom>
+  static inline WeakRef cast_static(const WeakRef<T_CastFrom>& src) noexcept;
+
+  /** Cast to non-const.
+   *
+   * The WeakRef can't be cast with the usual notation so instead you can use
+   * @code
+   * ptr_nonconst = Glib::WeakRef<NonConstType>::cast_const(ptr_const);
+   * @endcode
+   */
+  template <typename T_CastFrom>
+  static inline WeakRef cast_const(const WeakRef<T_CastFrom>& src) noexcept;
+
+private:
+  // Let all instantiations of WeakRef access private data.
+  template <typename T_CastFrom>
+  friend class WeakRef;
+
+  // If pCppObject != nullptr && gobject == nullptr,
+  // then the caller holds a strong reference.
+  void set(T_CppObject* pCppObject, GWeakRef* gobject) noexcept;
+
+  // WeakRef owns *gobject_, but it does not own *pCppObject_.
+  // Invariant: (!pCppObject_ || gobject_),
+  // i.e. if pCppObject_ != nullptr then also gobject_ != nullptr.
+  T_CppObject* pCppObject_;
+  GWeakRef* gobject_;
+
+  // Some methods would be simpler if gobject_ were a GWeakRef instead of
+  // a GWeakRef*, but then the move constructor and the move assignment
+  // operation would not be efficient.
+
+}; // end class WeakRef
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>::WeakRef() noexcept : pCppObject_(nullptr), gobject_(nullptr)
+{
+}
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>::WeakRef(const WeakRef& src) noexcept : pCppObject_(src.pCppObject_),
+                                                             gobject_(nullptr)
+{
+  if (pCppObject_)
+  {
+    // We must own a strong reference to the underlying GObject while
+    // calling g_weak_ref_init().
+    gpointer ptr = g_weak_ref_get(src.gobject_);
+    if (ptr)
+    {
+      gobject_ = new GWeakRef;
+      g_weak_ref_init(gobject_, pCppObject_->gobj());
+      g_object_unref(ptr);
+    }
+    else
+      pCppObject_ = nullptr;
+  }
+}
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>::WeakRef(WeakRef&& src) noexcept : pCppObject_(src.pCppObject_),
+                                                        gobject_(src.gobject_)
+{
+  src.pCppObject_ = nullptr;
+  src.gobject_ = nullptr;
+}
+
+// The templated ctor allows copy construction from any object that's
+// castable. Thus, it does downcasts:
+//   base_ref = derived_ref
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>::WeakRef(const WeakRef<T_CastFrom>& src) noexcept
+  : pCppObject_(src.pCppObject_),
+    gobject_(nullptr)
+{
+  if (pCppObject_)
+  {
+    // We must own a strong reference to the underlying GObject while
+    // calling g_weak_ref_init().
+    gpointer ptr = g_weak_ref_get(src.gobject_);
+    if (ptr)
+    {
+      gobject_ = new GWeakRef;
+      g_weak_ref_init(gobject_, pCppObject_->gobj());
+      g_object_unref(ptr);
+    }
+    else
+      pCppObject_ = nullptr;
+  }
+}
+
+// The templated ctor allows move construction from any object that's
+// castable. Thus, it does downcasts:
+//   base_ref = std::move(derived_ref)
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>::WeakRef(WeakRef<T_CastFrom>&& src) noexcept : pCppObject_(src.pCppObject_),
+                                                                    gobject_(src.gobject_)
+{
+  src.pCppObject_ = nullptr;
+  src.gobject_ = nullptr;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>::WeakRef(const RefPtr<T_CastFrom>& src) noexcept
+  : pCppObject_(src.operator->()),
+    gobject_(nullptr)
+{
+  if (pCppObject_)
+  {
+    gobject_ = new GWeakRef;
+    g_weak_ref_init(gobject_, pCppObject_->gobj());
+  }
+}
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>::~WeakRef() noexcept
+{
+  if (gobject_)
+  {
+    g_weak_ref_clear(gobject_);
+    delete gobject_;
+  }
+}
+
+template <class T_CppObject>
+void
+WeakRef<T_CppObject>::swap(WeakRef& other) noexcept
+{
+  std::swap(pCppObject_, other.pCppObject_);
+  std::swap(gobject_, other.gobject_);
+}
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>&
+WeakRef<T_CppObject>::operator=(const WeakRef& src) noexcept
+{
+  set(src.pCppObject_, src.gobject_);
+  return *this;
+}
+
+template <typename T_CppObject>
+WeakRef<T_CppObject>&
+WeakRef<T_CppObject>::operator=(WeakRef&& src) noexcept
+{
+  // See RefPtr for an explanation of the swap() technique to implement
+  // copy assignment and move assignment.
+  // This technique is inefficient for copy assignment of WeakRef,
+  // because it involves copy construction + destruction, i.e. in a typical
+  // case g_weak_ref_init() + g_weak_ref_clear(), when a g_weak_ref_set()
+  // would be enough. For move assignment, the swap technique is fine.
+  WeakRef<T_CppObject> temp(std::forward<WeakRef<T_CppObject>>(src));
+  this->swap(temp);
+  return *this;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>&
+WeakRef<T_CppObject>::operator=(const WeakRef<T_CastFrom>& src) noexcept
+{
+  set(src.pCppObject_, src.gobject_);
+  return *this;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>&
+WeakRef<T_CppObject>::operator=(WeakRef<T_CastFrom>&& src) noexcept
+{
+  WeakRef<T_CppObject> temp(std::forward<WeakRef<T_CastFrom>>(src));
+  this->swap(temp);
+  return *this;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>&
+WeakRef<T_CppObject>::operator=(const RefPtr<T_CastFrom>& src) noexcept
+{
+  T_CppObject* pCppObject = src.operator->();
+  set(pCppObject, nullptr);
+  return *this;
+}
+
+template <class T_CppObject>
+WeakRef<T_CppObject>::operator bool() const noexcept
+{
+  if (!pCppObject_)
+    return false;
+
+  gpointer ptr = g_weak_ref_get(gobject_);
+  if (!ptr)
+    return false;
+
+  g_object_unref(ptr);
+  return true;
+}
+
+template <typename T_CppObject>
+RefPtr<T_CppObject>
+WeakRef<T_CppObject>::get() const noexcept
+{
+  RefPtr<T_CppObject> ret;
+
+  if (!pCppObject_)
+    return ret;
+
+  gpointer ptr = g_weak_ref_get(gobject_);
+  if (!ptr)
+    return ret;
+
+  // A RefPtr constructed from pointer expects reference to be done externally.
+  pCppObject_->reference();
+  ret = RefPtr<T_CppObject>(pCppObject_);
+
+  g_object_unref(ptr);
+
+  return ret;
+}
+
+template <typename T_CppObject>
+void
+WeakRef<T_CppObject>::reset() noexcept
+{
+  set(nullptr, nullptr);
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>
+WeakRef<T_CppObject>::cast_dynamic(const WeakRef<T_CastFrom>& src) noexcept
+{
+  WeakRef<T_CppObject> ret;
+
+  if (!src.pCppObject_)
+    return ret;
+
+  gpointer ptr = g_weak_ref_get(src.gobject_);
+  if (!ptr)
+    return ret;
+
+  // Don't call dynamic_cast<>() unless we know that the referenced object
+  // still exists.
+  T_CppObject* const pCppObject = dynamic_cast<T_CppObject*>(src.pCppObject_);
+  ret.set(pCppObject, nullptr);
+  g_object_unref(ptr);
+
+  return ret;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>
+WeakRef<T_CppObject>::cast_static(const WeakRef<T_CastFrom>& src) noexcept
+{
+  T_CppObject* const pCppObject = static_cast<T_CppObject*>(src.pCppObject_);
+
+  WeakRef<T_CppObject> ret;
+  ret.set(pCppObject, src.gobject_);
+  return ret;
+}
+
+template <typename T_CppObject>
+template <typename T_CastFrom>
+WeakRef<T_CppObject>
+WeakRef<T_CppObject>::cast_const(const WeakRef<T_CastFrom>& src) noexcept
+{
+  T_CppObject* const pCppObject = const_cast<T_CppObject*>(src.pCppObject_);
+
+  WeakRef<T_CppObject> ret;
+  ret.set(pCppObject, src.gobject_);
+  return ret;
+}
+
+template <typename T_CppObject>
+void
+WeakRef<T_CppObject>::set(T_CppObject* pCppObject, GWeakRef* gobject) noexcept
+{
+  // We must own a strong reference to the underlying GObject while
+  // calling g_weak_ref_init() or g_weak_ref_set().
+  // If pCppObject != nullptr && gobject == nullptr,
+  // then the caller holds a strong reference.
+
+  // An aim with this moderately complicated method is to keep the same
+  // GWeakRef, calling g_weak_ref_set() when possible, instead of using swap(),
+  // which implies creating a new WeakRef, swapping with *this, and deleting
+  // the new WeakRef.
+
+  gpointer ptr = nullptr;
+  if (pCppObject && gobject)
+    ptr = g_weak_ref_get(gobject);
+
+  pCppObject_ = (ptr || !gobject) ? pCppObject : nullptr;
+  if (pCppObject_ && !gobject_)
+  {
+    gobject_ = new GWeakRef;
+    g_weak_ref_init(gobject_, pCppObject_->gobj());
+  }
+  else if (gobject_)
+    g_weak_ref_set(gobject_, pCppObject_ ? pCppObject_->gobj() : nullptr);
+
+  if (ptr)
+    g_object_unref(ptr);
+}
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+/** Swap the contents of two WeakRef<>.
+ * @relates Glib::WeakRef
+ */
+template <class T_CppObject>
+inline void
+swap(WeakRef<T_CppObject>& lhs, WeakRef<T_CppObject>& rhs) noexcept
+{
+  lhs.swap(rhs);
+}
+
+} // namespace Glib
+
+#endif // _GLIBMM_WEAKREF_H
index ee9ca79..3e78c3b 100644 (file)
@@ -1,6 +1,3 @@
-// -*- c++ -*-
-/* $Id$ */
-
 /* wrap.cc
  *
  * Copyright (C) 1998-2002 The gtkmm Development Team
@@ -16,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmmconfig.h>
@@ -216,7 +212,7 @@ wrap_auto(GObject* object, bool take_copy)
 Glib::RefPtr<Object>
 wrap(GObject* object, bool take_copy /* = false */)
 {
-  return Glib::make_refptr_for_instance<Object>(dynamic_cast<Object*>(wrap_auto(object, take_copy)));
+  return Glib::RefPtr<Object>(dynamic_cast<Object*>(wrap_auto(object, take_copy)));
 }
 
 } /* namespace Glib */
index eec39bb..dfa4c96 100644 (file)
@@ -14,8 +14,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib-object.h>
index f53ae41..df27023 100644 (file)
@@ -1,9 +1,6 @@
-// -*- c++ -*-
 #ifndef _GLIBMM_WRAP_INIT_H
 #define _GLIBMM_WRAP_INIT_H
 
-/* $Id$ */
-
 /* wrap_init.h
  *
  * Copyright 2002 The gtkmm Development Team
@@ -19,8 +16,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/error.h>
index a36c293..e5639cb 100644 (file)
@@ -22,6 +22,9 @@
 
 #ifdef GLIBMM_CONFIGURE
 
+/* Define only on Mac OS, COCOA */
+#undef GLIBMM_OS_COCOA
+
 /* Define if extern "C" and extern "C++" function pointers are compatible. */
 #undef GLIBMM_CAN_ASSIGN_NON_EXTERN_C_FUNCTIONS_TO_EXTERN_C_CALLBACKS
 
index 6d02c39..ce69ace 100644 (file)
@@ -11,8 +11,7 @@
  * Library General Public License for more details.
  *
  * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -20,8 +19,7 @@ _DEFS(glibmm,glib)
 #include <glibmm/refptr.h>
 #include <glibmm/ustring.h>
 #include <glibmm/error.h>
-#include <sigc++/slot.h>
-#include <sigc++/bind.h>
+#include <glibmm/arrayhandle.h>
 #include <glib.h>
 
 namespace Glib
@@ -58,8 +56,8 @@ class BalancedTree
 {
   _CLASS_GENERIC(BalancedTree, GTree)
 public:
-  using TraverseFunc = sigc::slot<bool(const K&, const V&)>;
-  using CompareFunc = sigc::slot<int(const K&, const K&)>;
+  using TraverseFunc = sigc::slot<bool, const K&, const V&>;
+  using CompareFunc = sigc::slot<int, const K&, const K&>;
 
 protected:
   BalancedTree() :
@@ -68,7 +66,7 @@ protected:
     gobject_ = g_tree_new_full(on_compare_tree, &key_compare_slot, on_destroy_key, on_destroy_value);
   }
 
-  explicit BalancedTree(const CompareFunc &key_compare_slot_) :
+  BalancedTree(const CompareFunc &key_compare_slot_) :
     key_compare_slot(key_compare_slot_)
   {
     gobject_ = g_tree_new_full(on_compare_tree, &key_compare_slot, on_destroy_key, on_destroy_value);
@@ -79,12 +77,12 @@ protected:
 public:
   static Glib::RefPtr< BalancedTree<K, V> > create()
   {
-    return Glib::make_refptr_for_instance< BalancedTree<K, V> >(new BalancedTree());
+    return Glib::RefPtr< BalancedTree<K, V> >(new BalancedTree());
   }
 
   static Glib::RefPtr< BalancedTree<K, V> > create(const CompareFunc &key_compare_slot)
   {
-    return Glib::make_refptr_for_instance< BalancedTree<K, V> >(new BalancedTree(key_compare_slot));
+    return Glib::RefPtr< BalancedTree<K, V> >(new BalancedTree(key_compare_slot));
   }
 
   ~BalancedTree()
@@ -236,8 +234,8 @@ public:
    */
   V* search(const CompareFunc &search_func, const K& key)
   {
-    sigc::slot<int(const K&, const CompareFunc&, const K&)> real_slot = sigc::ptr_fun(on_compare_key);
-    sigc::slot<int(const K&)> bound_slot = sigc::bind(real_slot, search_func, key);
+    sigc::slot<int, const K&, const CompareFunc&, const K&> real_slot = sigc::ptr_fun(on_compare_key);
+    sigc::slot<int, const K&> bound_slot = sigc::bind(real_slot, search_func, key);
     gpointer value = g_tree_search(gobj(), c_callback_search, reinterpret_cast<gconstpointer>(&bound_slot));
 
     return reinterpret_cast<V*>(value);
@@ -279,7 +277,7 @@ private:
   /// Wrapper for invoking GCompareFunc.
   static gint c_callback_search(gconstpointer a, gconstpointer b)
   {
-    const auto slot = reinterpret_cast<const sigc::slot<int(const K&)> *>(b);
+    const sigc::slot<int, const K&>* slot = reinterpret_cast<const sigc::slot<int, const K&> *>(b);
     return (*slot)(*reinterpret_cast<const K*>(a));
   }
 
index dfad8a6..576b64f 100644 (file)
@@ -14,8 +14,6 @@
  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
-using Flags = Glib::Binding::Flags;
-
 #include <glibmm/binding.h>
 #include <glib.h>
 
@@ -82,7 +80,7 @@ namespace Glib
 // static
 Glib::RefPtr<Binding>
 Binding::bind_property_value(const PropertyProxy_Base& source_property,
-  const PropertyProxy_Base& target_property, Flags flags, const SlotTransform& transform_to,
+  const PropertyProxy_Base& target_property, BindingFlags flags, const SlotTransform& transform_to,
   const SlotTransform& transform_from)
 {
   GBinding* binding = nullptr;
@@ -114,7 +112,7 @@ Binding::bind_property_value(const PropertyProxy_Base& source_property,
   // either the source object or the target object is finalized.
   // The GBinding object must not be destroyed while there are RefPtrs around.
   g_object_ref(binding);
-  return Glib::make_refptr_for_instance<Binding>(new Binding(binding));
+  return Glib::RefPtr<Binding>(new Binding(binding));
 }
 
 void
index c99c8ca..b30cba1 100644 (file)
@@ -24,6 +24,7 @@ _PINCLUDE(glibmm/private/object_p.h)
 
 namespace Glib
 {
+_WRAP_ENUM(BindingFlags, GBindingFlags, newin "2,44")
 
 /** Bind two object properties.
  *
@@ -100,14 +101,12 @@ class Binding : public Glib::Object
   _CLASS_GOBJECT(Binding, GBinding, G_BINDING, Glib::Object, GObject)
 
 public:
-  _WRAP_ENUM(Flags, GBindingFlags, newin "2,44")
-
   /** For instance,<br>
    *   bool on_transform_to(const GValue* from_value, GValue* to_value);
    *
    * @return <tt>true</tt> if the transformation was successful, and <tt>false</tt> otherwise.
    */
-  using SlotTransform = sigc::slot<bool(const GValue*, GValue*)>;
+  using SlotTransform = sigc::slot<bool, const GValue*, GValue*>;
 
   /** Creates a binding between @a source_property and @a target_property,
    * allowing you to set the transformation functions to be used by the binding.
@@ -141,7 +140,7 @@ public:
   static Glib::RefPtr<Binding> bind_property_value(
     const PropertyProxy_Base& source_property,
     const PropertyProxy_Base& target_property,
-    Flags flags = Flags::DEFAULT,
+    BindingFlags flags = BINDING_DEFAULT,
     const SlotTransform& transform_to = SlotTransform(),
     const SlotTransform& transform_from = SlotTransform());
 
@@ -162,7 +161,7 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy_Base& source_property,
     const PropertyProxy_Base& target_property,
-    Flags flags = Flags::DEFAULT)
+    BindingFlags flags = BINDING_DEFAULT)
   {
     return bind_property_value(source_property, target_property, flags);
   }
@@ -184,7 +183,7 @@ public:
    *         stored in a Glib::Value<T_target> object.
    * @tparam T_functor_to Type of functor that translates from the source to the target.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_source&, T_target&)>.
+   *         sigc::slot<bool, const T_source&, T_target&>.
    *
    * @see bind_property_value()
    *
@@ -194,10 +193,10 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy<T_source>& source_property,
     const PropertyProxy<T_target>& target_property,
-    Flags flags,
+    BindingFlags flags,
     const T_functor_to& transform_to)
   {
-    sigc::slot<bool(const T_source&, T_target&)> slot_transform_to = transform_to;
+    sigc::slot<bool, const T_source&, T_target&> slot_transform_to = transform_to;
 
     return bind_property_value(source_property, target_property, flags,
       slot_transform_to.empty() ? SlotTransform() : TransformProp<T_source, T_target>(slot_transform_to));
@@ -220,7 +219,7 @@ public:
    *         stored in a Glib::Value<T_target> object.
    * @tparam T_functor_to Type of functor that translates from the source to the target.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_source&, T_target&)>.
+   *         sigc::slot<bool, const T_source&, T_target&>.
    *
    * @see bind_property_value()
    *
@@ -230,10 +229,10 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy<T_source>& source_property,
     const PropertyProxy_WriteOnly<T_target>& target_property,
-    Flags flags,
+    BindingFlags flags,
     const T_functor_to& transform_to)
   {
-    sigc::slot<bool(const T_source&, T_target&)> slot_transform_to = transform_to;
+    sigc::slot<bool, const T_source&, T_target&> slot_transform_to = transform_to;
 
     return bind_property_value(source_property, target_property, flags,
       slot_transform_to.empty() ? SlotTransform() : TransformProp<T_source, T_target>(slot_transform_to));
@@ -256,7 +255,7 @@ public:
    *         stored in a Glib::Value<T_target> object.
    * @tparam T_functor_to Type of functor that translates from the source to the target.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_source&, T_target&)>.
+   *         sigc::slot<bool, const T_source&, T_target&>.
    *
    * @see bind_property_value()
    *
@@ -266,10 +265,10 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy_ReadOnly<T_source>& source_property,
     const PropertyProxy<T_target>& target_property,
-    Flags flags,
+    BindingFlags flags,
     const T_functor_to& transform_to)
   {
-    sigc::slot<bool(const T_source&, T_target&)> slot_transform_to = transform_to;
+    sigc::slot<bool, const T_source&, T_target&> slot_transform_to = transform_to;
 
     return bind_property_value(source_property, target_property, flags,
       slot_transform_to.empty() ? SlotTransform() : TransformProp<T_source, T_target>(slot_transform_to));
@@ -292,7 +291,7 @@ public:
    *         stored in a Glib::Value<T_target> object.
    * @tparam T_functor_to Type of functor that translates from the source to the target.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_source&, T_target&)>.
+   *         sigc::slot<bool, const T_source&, T_target&>.
    *
    * @see bind_property_value()
    *
@@ -302,10 +301,10 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy_ReadOnly<T_source>& source_property,
     const PropertyProxy_WriteOnly<T_target>& target_property,
-    Flags flags,
+    BindingFlags flags,
     const T_functor_to& transform_to)
   {
-    sigc::slot<bool(const T_source&, T_target&)> slot_transform_to = transform_to;
+    sigc::slot<bool, const T_source&, T_target&> slot_transform_to = transform_to;
 
     return bind_property_value(source_property, target_property, flags,
       slot_transform_to.empty() ? SlotTransform() : TransformProp<T_source, T_target>(slot_transform_to));
@@ -330,10 +329,10 @@ public:
    *         stored in a Glib::Value<T_target> object.
    * @tparam T_functor_to Type of functor that translates from the source to the target.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_source&, T_target&)>.
+   *         sigc::slot<bool, const T_source&, T_target&>.
    * @tparam T_functor_from Type of functor that translates from the target to the source.
    *         Must be convertible to<br>
-   *         sigc::slot<bool(const T_target&, T_source&)>.
+   *         sigc::slot<bool, const T_target&, T_source&>.
    *
    * @see bind_property_value()
    *
@@ -343,12 +342,12 @@ public:
   static Glib::RefPtr<Binding> bind_property(
     const PropertyProxy<T_source>& source_property,
     const PropertyProxy<T_target>& target_property,
-    Flags flags,
+    BindingFlags flags,
     const T_functor_to& transform_to,
     const T_functor_from& transform_from)
   {
-    sigc::slot<bool(const T_source&, T_target&)> slot_transform_to = transform_to;
-    sigc::slot<bool(const T_target&, T_source&)> slot_transform_from = transform_from;
+    sigc::slot<bool, const T_source&, T_target&> slot_transform_to = transform_to;
+    sigc::slot<bool, const T_target&, T_source&> slot_transform_from = transform_from;
 
     return bind_property_value(source_property, target_property, flags,
       slot_transform_to.empty() ? SlotTransform() : TransformProp<T_source, T_target>(slot_transform_to),
@@ -361,7 +360,7 @@ public:
   _WRAP_METHOD(Glib::RefPtr<Glib::ObjectBase> get_target(), g_binding_get_target, refreturn, newin "2,44")
   _WRAP_METHOD(Glib::RefPtr<const Glib::ObjectBase> get_target() const, g_binding_get_target, refreturn, constversion, newin "2,44")
   _WRAP_METHOD(Glib::ustring get_target_property() const, g_binding_get_target_property, newin "2,44")
-  _WRAP_METHOD(Flags get_flags() const, g_binding_get_flags, newin "2,44")
+  _WRAP_METHOD(BindingFlags get_flags() const, g_binding_get_flags, newin "2,44")
 
   /** Explicitly releases the binding between the source and the target
    * property expressed by this Binding instance.
@@ -375,7 +374,7 @@ public:
   void unbind();
   _IGNORE(g_binding_unbind)
 
-  _WRAP_PROPERTY("flags", Flags, newin "2,44")
+  _WRAP_PROPERTY("flags", Glib::BindingFlags, newin "2,44")
   _WRAP_PROPERTY("source", Glib::RefPtr<Glib::ObjectBase>, newin "2,44")
   _WRAP_PROPERTY("source-property", Glib::ustring, newin "2,44")
   _WRAP_PROPERTY("target", Glib::RefPtr<Glib::ObjectBase>, newin "2,44")
@@ -392,12 +391,13 @@ private:
   // The functor TransformProp can be implicitly converted to a SlotTransform
   // and used in a call to bind_property_value().
   template <typename T_from, typename T_to>
-  class TransformProp
+  class TransformProp : public sigc::functor_base
   {
   public:
-    using SlotTypedTransform = sigc::slot<bool(const T_from&, T_to&)>;
+    using result_type = bool;
+    using SlotTypedTransform = sigc::slot<bool, const T_from&, T_to&>;
 
-    explicit TransformProp(const SlotTypedTransform& slot) : typed_transform(slot) {}
+    TransformProp(const SlotTypedTransform& slot) : typed_transform(slot) {}
 
     bool operator()(const GValue* from_value, GValue* to_value)
     {
index 2cb910c..003c58b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace
index 3ed2d69..9dac5e2 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -58,7 +57,7 @@ public:
    * int compare(const guint8* first, const guint8* second);
    * </code>
    */
-  using SlotCompare = sigc::slot<int(const guint8*, const guint8*)>;
+  using SlotCompare = sigc::slot<int, const guint8*, const guint8*>;
 
   _WRAP_METHOD(static Glib::RefPtr<ByteArray> create(), g_byte_array_new)
 
@@ -104,7 +103,7 @@ class Value< Glib::RefPtr<Glib::ByteArray> > : public ValueBase_Boxed
 public:
   static GType value_type() { return Glib::ByteArray::get_type(); }
   void set(const Glib::RefPtr<Glib::ByteArray>& array) { set_boxed(Glib::unwrap(array)); }
-  Glib::RefPtr<Glib::ByteArray> get()                  { return make_refptr_for_instance<Glib::ByteArray>(reinterpret_cast<Glib::ByteArray*>(get_boxed())); }
+  Glib::RefPtr<Glib::ByteArray> get()                  { return Glib::RefPtr<Glib::ByteArray>(reinterpret_cast<Glib::ByteArray*>(get_boxed())); }
 };
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
index 0ff936a..bc43f2d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Glib
index b4b1f2a..867b99c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -21,6 +20,7 @@ _DEFS(glibmm,glib)
 #include <glibmm/refptr.h>
 #include <glibmm/ustring.h>
 #include <glibmm/error.h>
+#include <glibmm/arrayhandle.h>
 #include <glib.h>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
index 0db13da..f38e2fc 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
@@ -21,7 +20,7 @@
 namespace Glib
 {
 
-Checksum::Checksum(Type type) : gobject_(g_checksum_new((GChecksumType)type))
+Checksum::Checksum(ChecksumType type) : gobject_(g_checksum_new((GChecksumType)type))
 {
 }
 
@@ -31,13 +30,13 @@ Checksum::operator bool() const
 }
 
 gssize
-Checksum::get_length(Type checksum_type)
+Checksum::get_length(ChecksumType checksum_type)
 {
   return g_checksum_type_get_length((GChecksumType)checksum_type);
 }
 
 std::string
-Checksum::compute_checksum(Type checksum_type, const std::string& data)
+Checksum::compute_checksum(ChecksumType checksum_type, const std::string& data)
 {
   return Glib::convert_return_gchar_ptr_to_ustring(
     g_compute_checksum_for_string(((GChecksumType)checksum_type), data.c_str(), data.size()));
index 9394eb2..a4a4d49 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -43,16 +42,16 @@ class Checksum
   _IGNORE(g_checksum_copy, g_checksum_free)
 
 public:
-  _WRAP_ENUM(Type, GChecksumType, NO_GTYPE)
+  _WRAP_ENUM(ChecksumType, GChecksumType, NO_GTYPE)
 
-#m4 _CONVERSION(`Type', `GChecksumType', `(static_cast<$2>($3))')
+#m4 _CONVERSION(`ChecksumType', `GChecksumType', `(($2)$3)')
 
   /** Creates a new Checksum, using the checksum algorithm @a checksum_type.
    * If the checksum_type is not known, then operator bool() will return false.
    *
    * @param checksum_type Checksum type, one of defined above.
    */
-  explicit Checksum(Type checksum_type);
+  explicit Checksum(ChecksumType checksum_type);
 
   /** Returns true if the Checksum object is valid.
    * This will return false, for instance, if an unsupported checksum type was provided to the constructor.
@@ -61,7 +60,9 @@ public:
 
   _WRAP_METHOD(void reset(), g_checksum_reset)
 
-  _WRAP_METHOD(void update(const guchar* data, gssize length), g_checksum_update)
+  //TODO: length should really be gssize, not gsize, when we can break ABI:
+#m4 _CONVERSION(`gsize',`gssize',`(gssize)($3)')
+  _WRAP_METHOD(void update(const guchar* data, gsize length), g_checksum_update)
 
   /** Feeds data into an existing Checksum.
    * The checksum must still be open, that is get_string() or get_digest() must not have been called on the checksum.
@@ -75,25 +76,26 @@ public:
   _WRAP_METHOD(std::string get_string() const, g_checksum_get_string)
 
 
-  _WRAP_METHOD(static std::string compute_checksum(Type checksum_type, const guchar* data, gsize length), g_compute_checksum_for_data)
+  _WRAP_METHOD(static std::string compute_checksum(ChecksumType checksum_type, const guchar* data, gsize length), g_compute_checksum_for_data)
 
   /** Computes the checksum of a string.
    *
-   * @param checksum_type A Type
+   * @param checksum_type A ChecksumType
    * @param str The string to compute the checksum of.
    * @result The checksum as a hexadecimal string.
    */
-  static std::string compute_checksum(Type checksum_type, const std::string& str);
+  static std::string compute_checksum(ChecksumType checksum_type, const std::string& str);
   _IGNORE(g_compute_checksum_for_string)
 
 
   //We don't use _WRAP_METHOD because this is not really a GCheckSum function:
   /** Gets the length in bytes of digests of type @a checksum_type.
    *
-   * @param checksum_type A Type.
+   * @param checksum_type A ChecksumType.
    * @result The checksum length, or -1 if @a checksum_type is not supported.
    */
-  static gssize get_length(Type checksum_type);
+  static gssize get_length(ChecksumType checksum_type);
 };
 
 } //namespace Glib
+
index 6a84847..cd08eac 100644 (file)
@@ -1,5 +1,3 @@
-// -*- c++ -*-
-
 /* Copyright (C) 2002 The gtkmm Development Team
  *
  * This library is free software; you can redistribute it and/or
@@ -13,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <glib/gtestutils.h> //For g_assert() in glib >= 2.15.0
index 408ceb3..9c211bc 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index 7aac7a4..7e62718 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 //#include <glib/gtestutils.h> //For g_assert() in glib >= 2.15.0
@@ -76,6 +75,24 @@ Date::set_parse(const Glib::ustring& str)
   g_date_set_parse(&gobject_, str.c_str());
 }
 
+_DEPRECATE_IFDEF_START
+
+// Avoid a build problem in the case that std::time_t is equivalent to gint32 (GTime is also gint32)
+// That would make the set_time() method overload impossible.
+#ifdef GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32
+void
+Date::set_time(GTime time)
+{
+  // This method, and the C function g_date_set_time() that it wraps, are deprecated.
+  //(::time_t is used here instead of std::time_t, since the C function is declared
+  // with ::time_t. It's not important. The C++ standard requires that ::time_t
+  // and std::time_t shall be identical when both are defined.)
+  g_date_set_time_t(&gobject_, static_cast<time_t>(time));
+}
+#endif // GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32
+
+_DEPRECATE_IFDEF_END
+
 void
 Date::set_time(std::time_t timet)
 {
@@ -230,22 +247,12 @@ Date::get_weekday() const
   return (Date::Weekday)g_date_get_weekday(&gobject_);
 }
 
-int Date::get_weekday_as_int() const
-{
-  return g_date_get_weekday(&gobject_);
-}
-
 Date::Month
 Date::get_month() const
 {
   return (Date::Month)g_date_get_month(&gobject_);
 }
 
-int Date::get_month_as_int() const
-{
-  return g_date_get_month(&gobject_);
-}
-
 Date::Year
 Date::get_year() const
 {
index 1f674c1..64d4e9e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -37,9 +36,9 @@ public:
   using Day = guint8 ;
   using Year = guint16;
 
-  _WRAP_ENUM(Month, GDateMonth, NO_GTYPE)
-  _WRAP_ENUM(Weekday, GDateWeekday, NO_GTYPE)
-  _WRAP_ENUM(DMY, GDateDMY, NO_GTYPE)
+  _WRAP_ENUM(Month, GDateMonth, s#^DATE_##, NO_GTYPE, get_type_func=)
+  _WRAP_ENUM(Weekday, GDateWeekday, s#^DATE_##, NO_GTYPE)
+  _WRAP_ENUM(DMY, GDateDMY, s#^DATE_##, NO_GTYPE)
 
   static const Day     BAD_DAY    = 0;
   static const Year    BAD_YEAR   = 0;
@@ -109,6 +108,24 @@ public:
    */
   void set_parse (const Glib::ustring& str);
 
+
+  _DEPRECATE_IFDEF_START
+
+  //Avoid a build problem in the case that std::time_t is equivalent to gint32 (GTime is also gint32)
+  //That would make the set_time() method overload impossible.
+  #ifdef GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32
+  /** Sets the value of a date from a GTime value.
+   *
+   * @param time GTime value to set.
+   *
+   * @deprecated Please use set_time(std::time_t) or set_time(const GTimeVal&).
+   */
+  void set_time(GTime time);
+  #endif //GLIBMM_HAVE_C_STD_TIME_T_IS_NOT_INT32
+
+  _DEPRECATE_IFDEF_END
+
+
   /** Sets the value of a date from a <type>std::time_t</type> value.
    *
    * @param timet std::time_t value to set
@@ -277,21 +294,11 @@ public:
    */
   Weekday get_weekday() const;
 
-  /** Returns the day of the week for a Date. The date must be valid.
-   * @return Day of the week as an int. Monday=1 .. Sunday=7.
-   */
-  int get_weekday_as_int() const;
-
   /** Returns the month of the year. The date must be valid.
    * @return Month of the year as a Date::Month.
    */
   Month        get_month()               const;
 
-  /** Returns the month of the year. The date must be valid.
-   * @return Month of the year as an int. January=1 .. December=12.
-   */
-  int          get_month_as_int()        const;
-
   /** Returns the year of a Date. The date must be valid.
    * @return Year in which the date falls.
    */
index d47f05c..fbad36e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
index 8a4a4a8..6665950 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index f3c6be6..55b57e0 100644 (file)
@@ -11,6 +11,5 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
index 290ee4b..656f285 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index 78bb944..bab18c1 100644 (file)
@@ -36,9 +36,12 @@ glibmm_files_any_hg =                \
        regex.hg                \
        shell.hg                \
        spawn.hg                \
+       thread.hg               \
+       threads.hg              \
        timezone.hg             \
        unicode.hg              \
        uriutils.hg             \
+       valuearray.hg \
        variant.hg              \
        variantdict.hg          \
        variantiter.hg          \
@@ -50,7 +53,7 @@ glibmm_files_any_hg =         \
 glibmm_files_used_hg = $(glibmm_files_any_hg)
 
 ## All .hg files
-glibmm_files_hg = $(glibmm_files_any_hg)
+glibmm_files_hg = $(glibmm_files_used_hg)
 
 glibmm_files_ccg = $(glibmm_files_hg:.hg=.ccg)
 
index eabe8e2..777aa9d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index b8792b6..3abb38b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index 4a32ecd..469c90a 100644 (file)
@@ -2,14 +2,9 @@
   <substitute_type_name from="GDateMonth" to="Glib::Date::Month" />
   <substitute_type_name from="GDateWeekday" to="Glib::Date::Weekday" />
   <substitute_type_name from="GDateDMY" to="Glib::Date::DMY" />
-  <substitute_enumerator_name from_prefix="G_DATE_" to_prefix="Glib::Date::" />
-  <substitute_enumerator_name from_prefix="G_PARAM_" to_prefix="Glib::ParamFlags::" />
-  <substitute_enumerator_name from_prefix="G_REGEX_MATCH_" to_prefix="Glib::RegexMatchFlags::" />
-  <substitute_enumerator_name from_prefix="G_REGEX_" to_prefix="Glib::RegexCompileFlags::" />
-  <substitute_enumerator_name from_prefix="G_SPAWN_ERROR_" to_prefix="Glib::SpawnError::" />
-  <substitute_enumerator_name from_prefix="G_TIME_TYPE_" to_prefix="Glib::TimeType::" />
-  <substitute_enumerator_name from_prefix="G_UNICODE_BREAK_" to_prefix="Glib::UnicodeBreakType::" />
-  <substitute_enumerator_name from_prefix="G_NORMALIZE_" to_prefix="Glib::NormalizeMode::" />
+
+  <!-- enum GOptionArg is not wrapped. Don't substitute. -->
+  <substitute_enumerator_name from_prefix="G_OPTION_ARG_" to_prefix="G_OPTION_ARG_" />
   <!-- These are preprocessor defines. Don't substitute. -->
   <substitute_enumerator_name from="G_PARAM_STATIC_STRINGS" to="G_PARAM_STATIC_STRINGS" />
   <substitute_enumerator_name from_prefix="G_VARIANT_TYPE_" to_prefix="G_VARIANT_TYPE_" />
index d65d39e..2748e77 100644 (file)
@@ -25,6 +25,7 @@
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property target-property
@@ -34,6 +35,7 @@
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "")
 )
 
 (define-property flags
@@ -43,6 +45,7 @@
   (readable #t)
   (writable #t)
   (construct-only #t)
+  (default-value "G_BINDING_DEFAULT")
 )
 
 ;; GBytes is neither a GObject nor a GInterface. Not checked for signals and properties.
index 187db24..b9d100f 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/exceptionhandler.h>
@@ -35,7 +34,9 @@ namespace
 // g_io_channel_new_file().  Neither is there a way to hook up a wrapper
 // object in an existing GIOChannel, nor exists any destroy notification.
 //
-// So that means: If the IOChannel backend is unknown (normal case), then the
+// So that means:  If the IOChannel is implemented in C++ -- that is, our
+// GlibmmIOChannel backend is used -- we use the GIOChannel reference
+// counting mechanism.  If the IOChannel backend is unknown, then the
 // wrapper instance holds always exactly one reference to the GIOChannel.
 // The wrapper object itself is then managed via our own refcounting
 // mechanism.  To do that a utility class ForeignIOChannel is introduced to
@@ -74,8 +75,51 @@ ForeignIOChannel::unreference() const
 namespace Glib
 {
 
+class GlibmmIOChannel
+{
+public:
+  GIOChannel base;
+  Glib::IOChannel* wrapper;
+
+  static const GIOFuncs vfunc_table;
+
+  static GIOStatus io_read(
+    GIOChannel* channel, char* buf, gsize count, gsize* bytes_read, GError** err);
+
+  static GIOStatus io_write(
+    GIOChannel* channel, const char* buf, gsize count, gsize* bytes_written, GError** err);
+
+  static GIOStatus io_seek(GIOChannel* channel, gint64 offset, GSeekType type, GError** err);
+  static GIOStatus io_close(GIOChannel* channel, GError** err);
+
+  static GSource* io_create_watch(GIOChannel* channel, GIOCondition condition);
+  static void io_free(GIOChannel* channel);
+
+  static GIOStatus io_set_flags(GIOChannel* channel, GIOFlags flags, GError** err);
+  static GIOFlags io_get_flags(GIOChannel* channel);
+};
+
+// static
+const GIOFuncs GlibmmIOChannel::vfunc_table = {
+  &GlibmmIOChannel::io_read, &GlibmmIOChannel::io_write, &GlibmmIOChannel::io_seek,
+  &GlibmmIOChannel::io_close, &GlibmmIOChannel::io_create_watch, &GlibmmIOChannel::io_free,
+  &GlibmmIOChannel::io_set_flags, &GlibmmIOChannel::io_get_flags,
+};
+
 /**** GLib::IOChannel ******************************************************/
 
+/* Construct a custom C++-implemented IOChannel.  GlibmmIOChannel is an
+ * extended GIOChannel struct which allows us to hook up a pointer to this
+ * persistent wrapper instance.
+ */
+IOChannel::IOChannel() : gobject_(static_cast<GIOChannel*>(g_malloc(sizeof(GlibmmIOChannel))))
+{
+  g_io_channel_init(gobject_);
+  gobject_->funcs = const_cast<GIOFuncs*>(&GlibmmIOChannel::vfunc_table);
+
+  reinterpret_cast<GlibmmIOChannel*>(gobject_)->wrapper = this;
+}
+
 IOChannel::IOChannel(IOChannel&& other) noexcept : sigc::trackable(std::move(other)),
                                                    gobject_(std::move(other.gobject_))
 {
@@ -101,7 +145,9 @@ IOChannel::operator=(IOChannel&& other) noexcept
  */
 IOChannel::IOChannel(GIOChannel* gobject, bool take_copy) : gobject_(gobject)
 {
+  // This ctor should never be called for GlibmmIOChannel instances.
   g_assert(gobject != nullptr);
+  g_assert(gobject->funcs != &GlibmmIOChannel::vfunc_table);
 
   if (take_copy)
     g_io_channel_ref(gobject_);
@@ -112,6 +158,19 @@ IOChannel::release_gobject()
 {
   if (gobject_)
   {
+    // Check whether this IOChannel is implemented in C++, i.e. whether it
+    // uses our GlibmmIOChannel forwarding backend.  Normally, this will never
+    // be true because the wrapper should only be deleted in the io_free()
+    // callback, which clears gobject_ before deleting.  But in case the ctor
+    // of a derived class threw an exception the GIOChannel must be destroyed
+    // prematurely.
+    //
+    if (gobject_->funcs == &GlibmmIOChannel::vfunc_table)
+    {
+      // Disconnect the wrapper object so that it won't be deleted twice.
+      reinterpret_cast<GlibmmIOChannel*>(gobject_)->wrapper = nullptr;
+    }
+
     const auto tmp_gobject = gobject_;
     gobject_ = nullptr;
 
@@ -276,7 +335,56 @@ IOChannel::get_line_term() const
 Glib::RefPtr<IOSource>
 IOChannel::create_watch(IOCondition condition)
 {
-  return IOSource::create(gobj(), condition);
+  // The corresponding unreference() takes place in the dtor
+  // of the Glib::RefPtr<IOChannel> object below.
+  reference();
+  return IOSource::create(Glib::RefPtr<IOChannel>(this), condition);
+}
+
+IOStatus
+IOChannel::read_vfunc(char*, gsize, gsize&)
+{
+  g_assert_not_reached();
+  return IO_STATUS_ERROR;
+}
+
+IOStatus
+IOChannel::write_vfunc(const char*, gsize, gsize&)
+{
+  g_assert_not_reached();
+  return IO_STATUS_ERROR;
+}
+
+IOStatus IOChannel::seek_vfunc(gint64, SeekType)
+{
+  g_assert_not_reached();
+  return IO_STATUS_ERROR;
+}
+
+IOStatus
+IOChannel::close_vfunc()
+{
+  g_assert_not_reached();
+  return IO_STATUS_ERROR;
+}
+
+Glib::RefPtr<Glib::Source> IOChannel::create_watch_vfunc(IOCondition)
+{
+  g_assert_not_reached();
+  return Glib::RefPtr<Glib::Source>();
+}
+
+IOStatus IOChannel::set_flags_vfunc(IOFlags)
+{
+  g_assert_not_reached();
+  return IO_STATUS_ERROR;
+}
+
+IOFlags
+IOChannel::get_flags_vfunc()
+{
+  g_assert_not_reached();
+  return IOFlags(0);
 }
 
 void
@@ -298,11 +406,180 @@ wrap(GIOChannel* gobject, bool take_copy)
 
   if (gobject)
   {
-    cpp_object = new ForeignIOChannel(gobject, take_copy);
-    cpp_object->reference(); // the refcount is initially 0
+    if (gobject->funcs == &GlibmmIOChannel::vfunc_table)
+    {
+      cpp_object = reinterpret_cast<GlibmmIOChannel*>(gobject)->wrapper;
+
+      if (take_copy && cpp_object)
+        cpp_object->reference();
+    }
+    else
+    {
+      cpp_object = new ForeignIOChannel(gobject, take_copy);
+      cpp_object->reference(); // the refcount is initially 0
+    }
+  }
+
+  return Glib::RefPtr<IOChannel>(cpp_object);
+}
+
+/**** Glib::GlibmmIOChannel ************************************************/
+
+GIOStatus
+GlibmmIOChannel::io_read(
+  GIOChannel* channel, char* buf, gsize count, gsize* bytes_read, GError** err)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOStatus)wrapper->read_vfunc(buf, count, *bytes_read);
+  }
+  catch (Glib::Error& error)
+  {
+    error.propagate(err);
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return G_IO_STATUS_ERROR;
+}
+
+GIOStatus
+GlibmmIOChannel::io_write(
+  GIOChannel* channel, const char* buf, gsize count, gsize* bytes_written, GError** err)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOStatus)wrapper->write_vfunc(buf, count, *bytes_written);
+  }
+  catch (Glib::Error& error)
+  {
+    error.propagate(err);
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return G_IO_STATUS_ERROR;
+}
+
+GIOStatus
+GlibmmIOChannel::io_seek(GIOChannel* channel, gint64 offset, GSeekType type, GError** err)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOStatus)wrapper->seek_vfunc(offset, (SeekType)type);
+  }
+  catch (Glib::Error& error)
+  {
+    error.propagate(err);
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return G_IO_STATUS_ERROR;
+}
+
+GIOStatus
+GlibmmIOChannel::io_close(GIOChannel* channel, GError** err)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOStatus)wrapper->close_vfunc();
+  }
+  catch (Glib::Error& error)
+  {
+    error.propagate(err);
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return G_IO_STATUS_ERROR;
+}
+
+// static
+GSource*
+GlibmmIOChannel::io_create_watch(GIOChannel* channel, GIOCondition condition)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    const auto source = wrapper->create_watch_vfunc((IOCondition)condition);
+    return (source) ? source->gobj_copy() : nullptr;
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return nullptr;
+}
+
+// static
+void
+GlibmmIOChannel::io_free(GIOChannel* channel)
+{
+  if (IOChannel* const wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper)
+  {
+    wrapper->gobject_ = nullptr;
+    delete wrapper;
+  }
+
+  g_free(channel);
+}
+
+GIOStatus
+GlibmmIOChannel::io_set_flags(GIOChannel* channel, GIOFlags flags, GError** err)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOStatus)wrapper->set_flags_vfunc((IOFlags)flags);
+  }
+  catch (Glib::Error& error)
+  {
+    error.propagate(err);
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return G_IO_STATUS_ERROR;
+}
+
+// static
+GIOFlags
+GlibmmIOChannel::io_get_flags(GIOChannel* channel)
+{
+  const auto wrapper = reinterpret_cast<GlibmmIOChannel*>(channel)->wrapper;
+
+  try
+  {
+    return (GIOFlags)wrapper->get_flags_vfunc();
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
   }
 
-  return Glib::make_refptr_for_instance<IOChannel>(cpp_object);
+  return GIOFlags(0);
 }
 
 } // namespace Glib
index 63b0c54..5df0ebc 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -35,8 +34,8 @@ namespace Glib
 class Source;
 class IOSource;
 
-_WRAP_ENUM(SeekType, GSeekType, NO_GTYPE)
-_WRAP_ENUM(IOStatus, GIOStatus, NO_GTYPE, s#^EOF$#ENDOFFILE#)
+_WRAP_ENUM(SeekType, GSeekType, NO_GTYPE, s#^SEEK_#SEEK_TYPE_#)
+_WRAP_ENUM(IOStatus, GIOStatus, NO_GTYPE)
 _WRAP_ENUM(IOFlags, GIOFlags, NO_GTYPE)
 
 
@@ -203,8 +202,8 @@ public:
 
   /** Reads all the remaining data from the file.
    * @retval str The resulting string.
-   * @return Glib::IOStatus::NORMAL on success. This function never
-   *  returns Glib::IOStatus::ENDOFFILE.
+   * @return Glib::IO_STATUS_NORMAL on success. This function never
+   *  returns Glib::IO_STATUS_EOF.
    * @throw Glib::IOChannelError
    * @throw Glib::ConvertError
    */
@@ -214,7 +213,7 @@ public:
   /** Write a string to the I/O channel.
    * Note that this method does not return the number of characters written.
    * If the channel is blocking and the returned value is
-   * Glib::IOStatus::NORMAL, the whole string was written.
+   * Glib::IO_STATUS_NORMAL, the whole string was written.
    * @param str the string to write.
    * @return The status of the operation.
    * @throw Glib::IOChannelError
@@ -243,14 +242,14 @@ public:
 
   /** Seek the I/O channel to a specific position.
    * @param offset The offset in bytes from the position specified by @a type.
-   * @param type A SeekType. The type Glib::SeekType::CUR is only allowed in
+   * @param type A SeekType. The type Glib::SEEK_TYPE_CUR is only allowed in
    * those cases where a call to set_encoding() is allowed. See the
    * documentation for set_encoding() for details.
    * @return The status of the operation.
    * @throw Glib::IOChannelError
    * @throw Glib::ConvertError
    */
-  _WRAP_METHOD(IOStatus seek(gint64 offset, SeekType type = SeekType::SET),
+  _WRAP_METHOD(IOStatus seek(gint64 offset, SeekType type = SEEK_TYPE_SET),
                g_io_channel_seek_position, errthrow)
 
   /** Flush the buffers of the I/O channel.
@@ -306,10 +305,10 @@ public:
    *
    * A buffered channel can only be set unbuffered if the channel's internal
    * buffers have been flushed. Newly created channels or channels which have
-   * returned Glib::IOStatus::ENDOFFILE not require such a flush. For write-only
+   * returned Glib::IO_STATUS_EOF not require such a flush. For write-only
    * channels, a call to flush() is sufficient. For all other channels, the
    * buffers may be flushed by a call to seek().  This includes the possibility
-   * of seeking with seek type Glib::SeekType::CUR and an offset of zero. Note
+   * of seeking with seek type Glib::SEEK_TYPE_CUR and an offset of zero. Note
    * that this means that socket-based channels cannot be set unbuffered once
    * they have had data read from them.
    *
@@ -362,21 +361,21 @@ public:
    * -# The channel is a file, and the file pointer was just repositioned by a
    *  call to seek_position().  (This flushes all the internal buffers.)
    * -# The current encoding is <tt>""</tt> or UTF-8.
-   * -# One of the read methods has just returned Glib::IOStatus::ENDOFFILE (or, in
-   *  the case of read_to_end(), Glib::IOStatus::NORMAL).
-   * -# The read() method has returned Glib::IOStatus::AGAIN or thrown
+   * -# One of the read methods has just returned Glib::IO_STATUS_EOF (or, in
+   *  the case of read_to_end(), Glib::IO_STATUS_NORMAL).
+   * -# The read() method has returned Glib::IO_STATUS_AGAIN or thrown
    *  a Glib::Error exception.  This may be useful in the case of
    *  ConvertError::ILLEGAL_SEQUENCE.  Returning one of these statuses
    *  from read_line() or read_to_end() does <em>not</em> guarantee that
    *  the encoding can be changed.
    *
    * Channels which do not meet one of the above conditions cannot call
-   * seek_position() with a seek type of Glib::SeekType::CUR and, if they
+   * seek_position() with a seek type of Glib::SEEK_TYPE_CUR and, if they
    * are "seekable", cannot call write() after calling one of the API
    * "read" methods.
    *
    * @param encoding The encoding name, or <tt>""</tt> for binary.
-   * @return Glib::IOStatus::NORMAL if the encoding was successfully set.
+   * @return Glib::IO_STATUS_NORMAL if the encoding was successfully set.
    * @throw Glib::IOChannelError
    */
   IOStatus set_encoding(const std::string& encoding = std::string());
@@ -419,12 +418,61 @@ public:
 protected:
   GIOChannel* gobject_;
 
+  /** Constructor that should be used by derived classes.
+   * Use this constructor if you want to inherit from IOChannel.
+   * It will set up a GIOChannel that will call the vfuncs of your
+   * class even if it is being used from C code, and it will keep
+   * a reference to the C++ code while the GIOChannel exists.
+   */
+  IOChannel();
   _IGNORE(g_io_channel_init)
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
   IOChannel(GIOChannel* gobject, bool take_copy);
 #endif
 
+  //We don't put GLIBMM_DISABLE_DEPRECATED around these deprecated methods
+  //because they are virtual and that would make the ABI dependent on the ifdef.
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOStatus read_vfunc(char* buf, gsize count, gsize& bytes_read);
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOStatus write_vfunc(const char* buf, gsize count, gsize& bytes_written);
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOStatus seek_vfunc(gint64 offset, SeekType type);
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOStatus close_vfunc();
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOStatus set_flags_vfunc(IOFlags flags);
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual IOFlags  get_flags_vfunc();
+
+  /**
+   * @deprecated Custom Glib::IOChannel implementation was never really supported.
+   */
+  virtual Glib::RefPtr<Glib::Source> create_watch_vfunc(IOCondition cond);
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  friend class Glib::GlibmmIOChannel;
+#endif
+
 private:
   void release_gobject();
 };
index ce14bed..08572fd 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 namespace Glib
@@ -61,7 +60,7 @@ KeyFile::~KeyFile()
 }
 
 bool
-KeyFile::load_from_data(const Glib::ustring& data, Flags flags)
+KeyFile::load_from_data(const Glib::ustring& data, KeyFileFlags flags)
 {
   GError* gerror = nullptr;
 
@@ -75,7 +74,7 @@ KeyFile::load_from_data(const Glib::ustring& data, Flags flags)
 }
 
 bool
-KeyFile::load_from_data_dirs(const std::string& file, std::string& full_path, Flags flags)
+KeyFile::load_from_data_dirs(const std::string& file, std::string& full_path, KeyFileFlags flags)
 {
   GError* gerror = nullptr;
   char* full_path_c = nullptr;
@@ -95,14 +94,14 @@ KeyFile::load_from_data_dirs(const std::string& file, std::string& full_path, Fl
 }
 
 bool
-KeyFile::load_from_dirs(const std::string& file, const std::vector<std::string>&  search_dirs,
-  std::string& full_path, Flags flags)
+KeyFile::load_from_dirs(const std::string& file, const Glib::ArrayHandle<std::string>& search_dirs,
+  std::string& full_path, KeyFileFlags flags)
 {
   GError* gerror = nullptr;
   char* full_path_c = nullptr;
 
   const gboolean result =
-    g_key_file_load_from_dirs(gobj(), file.c_str(), const_cast<const gchar**>(Glib::ArrayHandler<std::string>::vector_to_array(search_dirs).data()),
+    g_key_file_load_from_dirs(gobj(), file.c_str(), const_cast<const gchar**>(search_dirs.data()),
       &full_path_c, static_cast<GKeyFileFlags>(unsigned(flags)), &gerror);
 
   if (gerror)
@@ -134,16 +133,16 @@ KeyFile::to_data()
   return Glib::convert_return_gchar_ptr_to_ustring(str);
 }
 
-std::vector<Glib::ustring>
+Glib::ArrayHandle<Glib::ustring>
 KeyFile::get_groups() const
 {
   gsize length = 0;
   char** const array = g_key_file_get_groups(const_cast<GKeyFile*>(gobj()), &length);
 
-  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(array, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<Glib::ustring>(array, length, Glib::OWNERSHIP_DEEP);
 }
 
-std::vector<Glib::ustring>
+Glib::ArrayHandle<Glib::ustring>
 KeyFile::get_keys(const Glib::ustring& group_name) const
 {
   gsize length = 0;
@@ -155,7 +154,7 @@ KeyFile::get_keys(const Glib::ustring& group_name) const
   if (gerror)
     Glib::Error::throw_exception(gerror);
 
-  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(array, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<Glib::ustring>(array, length, Glib::OWNERSHIP_DEEP);
 }
 
 Glib::ustring
@@ -247,7 +246,7 @@ KeyFile::set_double(const Glib::ustring& key, double value)
   if (err)                \
   Glib::Error::throw_exception(err)
 
-std::vector<Glib::ustring>
+Glib::ArrayHandle<Glib::ustring>
 KeyFile::get_string_list(
   const Glib::ustring& group_name, const Glib::ustring& key GLIBMM_ERROR_ARG) const
 {
@@ -259,10 +258,10 @@ KeyFile::get_string_list(
 
   GLIBMM_THROW(gerror);
 
-  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(array, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<Glib::ustring>(array, length, Glib::OWNERSHIP_DEEP);
 }
 
-std::vector<Glib::ustring>
+Glib::ArrayHandle<Glib::ustring>
 KeyFile::get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key,
   const Glib::ustring& locale GLIBMM_ERROR_ARG) const
 {
@@ -274,10 +273,10 @@ KeyFile::get_locale_string_list(const Glib::ustring& group_name, const Glib::ust
 
   GLIBMM_THROW(gerror);
 
-  return Glib::ArrayHandler<Glib::ustring>::array_to_vector(array, length, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<Glib::ustring>(array, length, Glib::OWNERSHIP_DEEP);
 }
 
-std::vector<bool>
+Glib::ArrayHandle<bool>
 KeyFile::get_boolean_list(
   const Glib::ustring& group_name, const Glib::ustring& key GLIBMM_ERROR_ARG) const
 {
@@ -289,10 +288,10 @@ KeyFile::get_boolean_list(
 
   GLIBMM_THROW(gerror);
 
-  return Glib::ArrayHandler<bool>::array_to_vector(array, length, Glib::OWNERSHIP_SHALLOW);
+  return Glib::ArrayHandle<bool>(array, length, Glib::OWNERSHIP_SHALLOW);
 }
 
-std::vector<int>
+Glib::ArrayHandle<int>
 KeyFile::get_integer_list(
   const Glib::ustring& group_name, const Glib::ustring& key GLIBMM_ERROR_ARG) const
 {
@@ -304,10 +303,10 @@ KeyFile::get_integer_list(
 
   GLIBMM_THROW(gerror);
 
-  return Glib::ArrayHandler<int>::array_to_vector(array, length, Glib::OWNERSHIP_SHALLOW);
+  return Glib::ArrayHandle<int>(array, length, Glib::OWNERSHIP_SHALLOW);
 }
 
-std::vector<double>
+Glib::ArrayHandle<double>
 KeyFile::get_double_list(
   const Glib::ustring& group_name, const Glib::ustring& key GLIBMM_ERROR_ARG) const
 {
@@ -318,47 +317,47 @@ KeyFile::get_double_list(
     const_cast<GKeyFile*>(gobj()), group_name.c_str(), key.c_str(), &length, &gerror);
   GLIBMM_THROW(gerror);
 
-  return Glib::ArrayHandler<double>::array_to_vector(array, length, Glib::OWNERSHIP_SHALLOW);
+  return Glib::ArrayHandle<double>(array, length, Glib::OWNERSHIP_SHALLOW);
 }
 
 void
 KeyFile::set_string_list(const Glib::ustring& group_name, const Glib::ustring& key,
-  const std::vector<Glib::ustring>& list)
+  const Glib::ArrayHandle<Glib::ustring>& list)
 {
   g_key_file_set_string_list(
-    gobj(), Glib::c_str_or_nullptr(group_name), key.c_str(), Glib::ArrayHandler<Glib::ustring>::vector_to_array(list).data(), list.size());
+    gobj(), Glib::c_str_or_nullptr(group_name), key.c_str(), list.data(), list.size());
 }
 
 void
 KeyFile::set_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key,
-  const Glib::ustring& locale, const std::vector<Glib::ustring>& list)
+  const Glib::ustring& locale, const Glib::ArrayHandle<Glib::ustring>& list)
 {
   g_key_file_set_locale_string_list(gobj(), Glib::c_str_or_nullptr(group_name), key.c_str(),
-    locale.c_str(), Glib::ArrayHandler<Glib::ustring>::vector_to_array(list).data(), list.size());
+    locale.c_str(), list.data(), list.size());
 }
 
 void
 KeyFile::set_integer_list(
-  const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<int>&  list)
+  const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<int>& list)
 {
   g_key_file_set_integer_list(gobj(), Glib::c_str_or_nullptr(group_name), key.c_str(),
-    const_cast<int*>(Glib::ArrayHandler<int>::vector_to_array(list).data()), list.size());
+    const_cast<int*>(list.data()), list.size());
 }
 
 void
 KeyFile::set_double_list(
-  const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<double>&  list)
+  const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<double>& list)
 {
   g_key_file_set_double_list(
-    gobj(), group_name.c_str(), key.c_str(), const_cast<double*>(Glib::ArrayHandler<double>::vector_to_array(list).data()), list.size());
+    gobj(), group_name.c_str(), key.c_str(), const_cast<double*>(list.data()), list.size());
 }
 
 void
 KeyFile::set_boolean_list(
-  const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<bool>&  list)
+  const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<bool>& list)
 {
   g_key_file_set_boolean_list(gobj(), Glib::c_str_or_nullptr(group_name), key.c_str(),
-    const_cast<gboolean*>(Glib::ArrayHandler<bool>::vector_to_array(list).data()), list.size());
+    const_cast<gboolean*>(list.data()), list.size());
 }
 
 Glib::ustring
index e33b1d8..23e9028 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
 
 #include <glibmmconfig.h>
 #include <glibmm/ustring.h>
+#include <glibmm/arrayhandle.h>
 #include <glibmm/error.h>
 #include <glibmm/utility.h>
 #include <glib.h>
-#include <vector>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 extern "C" { typedef struct _GKeyFile GKeyFile; }
@@ -31,6 +30,8 @@ extern "C" { typedef struct _GKeyFile GKeyFile; }
 namespace Glib
 {
 
+  _WRAP_ENUM(KeyFileFlags, GKeyFileFlags, NO_GTYPE)
+
 /** Exception class for KeyFile errors.
  */
 _WRAP_GERROR(KeyFileError, GKeyFileError, G_KEY_FILE_ERROR, NO_GTYPE)
@@ -95,8 +96,6 @@ class KeyFile
   _CLASS_GENERIC(KeyFile, GKeyFile)
 public:
 
-  _WRAP_ENUM(Flags, GKeyFileFlags, NO_GTYPE)
-
   //TODO: GKeyFile now seems to be a reference-counted type.
 
   //TODO: Maybe replace all the get_*/set_* methods with some generic get/set
@@ -128,7 +127,7 @@ public:
   KeyFile(GKeyFile* castitem, bool takes_ownership = false);
 
 public:
-  _WRAP_METHOD(bool load_from_file(const std::string& file, Flags flags = Flags::NONE), g_key_file_load_from_file, errthrow)
+  _WRAP_METHOD(bool load_from_file(const std::string& file, KeyFileFlags flags = Glib::KEY_FILE_NONE), g_key_file_load_from_file, errthrow)
 
   /** Loads a KeyFile from memory
    * @param data The data to use as a KeyFile
@@ -136,15 +135,17 @@ public:
    * @return true if the KeyFile was successfully loaded, false otherwise
    * @throw Glib::KeyFileError
    */
-  bool load_from_data(const Glib::ustring& data, Flags flags = Flags::NONE);
+  bool load_from_data(const Glib::ustring& data, KeyFileFlags flags = Glib::KEY_FILE_NONE);
   _IGNORE(g_key_file_load_from_data)
 
-#m4 _CONVERSION(`const std::vector<std::string>& ', `const gchar**', `const_cast<const gchar**>($3.data())')
+#m4 _CONVERSION(`const Glib::ArrayHandle<std::string>&', `const gchar**', `const_cast<const gchar**>($3.data())')
+#m4 _CONVERSION(`Glib::ArrayHandle<std::string>&', `gchar**', `const_cast<gchar**>($3.data())')
 
-  _IGNORE(g_key_file_load_from_dirs)
+  _WRAP_METHOD(bool load_from_dirs(const std::string& file, const Glib::ArrayHandle<std::string>& search_dirs, Glib::ArrayHandle<std::string>& full_path, KeyFileFlags flags = Glib::KEY_FILE_NONE),
+    g_key_file_load_from_dirs, errthrow, deprecated "Use the load_from_dirs() method that takes a std::string& full_path.")
 
   _WRAP_METHOD_DOCS_ONLY(g_key_file_load_from_dirs)
-  bool load_from_dirs(const std::string& file, const std::vector<std::string>&  search_dirs, std::string& full_path, Flags flags = Flags::NONE);
+  bool load_from_dirs(const std::string& file, const Glib::ArrayHandle<std::string>& search_dirs, std::string& full_path, KeyFileFlags flags = Glib::KEY_FILE_NONE);
 
   /** Looks for a KeyFile named @a file in the paths returned from
    * g_get_user_data_dir() and g_get_system_data_dirs() and loads them
@@ -157,7 +158,7 @@ public:
    * @throw Glib::KeyFileError
    * @throw Glib::FileError
    */
-  bool load_from_data_dirs(const std::string& file, std::string& full_path, Flags flags = Flags::NONE);
+  bool load_from_data_dirs(const std::string& file, std::string& full_path, KeyFileFlags flags = Glib::KEY_FILE_NONE);
   _IGNORE(g_key_file_load_from_data_dirs)
 
   /** Outputs the KeyFile as a string
@@ -174,7 +175,7 @@ public:
   /** Gets a list of all groups in the KeyFile
    * @returns A list containing the names of the groups
    */
-  std::vector<Glib::ustring> get_groups() const;
+  Glib::ArrayHandle<Glib::ustring> get_groups() const;
   _IGNORE(g_key_file_get_groups)
 
   /** Gets a list of all keys from the group @a group_name.
@@ -182,7 +183,7 @@ public:
    * @returns A list containing the names of the keys in @a group_name
    * @throw Glib::KeyFileError
    */
-  std::vector<Glib::ustring> get_keys(const Glib::ustring& group_name) const;
+  Glib::ArrayHandle<Glib::ustring> get_keys(const Glib::ustring& group_name) const;
   _IGNORE(g_key_file_get_keys)
 
   _WRAP_METHOD(bool has_group(const Glib::ustring& group_name) const, g_key_file_has_group)
@@ -279,7 +280,7 @@ public:
    * @return A list containing the values requested
    * @throw Glib::KeyFileError
    */
-  std::vector<Glib::ustring> get_string_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
+  Glib::ArrayHandle<Glib::ustring> get_string_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
   _IGNORE(g_key_file_get_string_list)
 
   /** Returns the values associated with @a key under @a group_name
@@ -289,7 +290,7 @@ public:
    * @return A list containing the values requested
    * @throw Glib::KeyFileError
    */
-  std::vector<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
+  Glib::ArrayHandle<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
 
   /** Returns the values associated with @a key under @a group_name
    * translated into @a locale, if available.
@@ -299,7 +300,7 @@ public:
    * @return A list containing the values requested
    * @throw Glib::KeyFileError
    */
-  std::vector<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale) const;
+  Glib::ArrayHandle<Glib::ustring> get_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale) const;
   _IGNORE(g_key_file_get_locale_string_list)
 
   /** Returns the values associated with @a key under @a group_name
@@ -308,7 +309,7 @@ public:
    * @return A list of booleans
    * @throw Glib::KeyFileError
    */
-  std::vector<bool> get_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
+  Glib::ArrayHandle<bool> get_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
   _IGNORE(g_key_file_get_boolean_list)
 
   /** Returns the values associated with @a key under @a group_name
@@ -317,7 +318,7 @@ public:
    * @return A list of integers
    * @throw Glib::KeyFileError
    */
-  std::vector<int> get_integer_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
+  Glib::ArrayHandle<int> get_integer_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
   _IGNORE(g_key_file_get_integer_list)
 
   /** Returns the values associated with @a key under @a group_name
@@ -326,7 +327,7 @@ public:
    * @return A list of doubles
    * @throw Glib::KeyFileError
    */
-  std::vector<double> get_double_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
+  Glib::ArrayHandle<double> get_double_list(const Glib::ustring& group_name, const Glib::ustring& key) const;
   _IGNORE(g_key_file_get_double_list)
 
   /** Get comment from top of file
@@ -360,7 +361,7 @@ public:
    * @param key The name of a key
    * @param list A list holding objects of type Glib::ustring
    */
-  void set_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<Glib::ustring>&  list);
+  void set_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<Glib::ustring>& list);
   _IGNORE(g_key_file_set_string_list)
 
   /** Sets a list of string values for the @a key under @a group_name and marks
@@ -371,7 +372,7 @@ public:
    * @param locale A locale
    * @param list A list holding objects of type Glib::ustring
    */
-  void set_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale, const std::vector<Glib::ustring>&  list);
+  void set_locale_string_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ustring& locale, const Glib::ArrayHandle<Glib::ustring>& list);
   _IGNORE(g_key_file_set_locale_string_list)
 
   /** Sets a list of booleans for the @a key under @a group_name.
@@ -380,7 +381,7 @@ public:
    * @param key The name of a key
    * @param list A list holding object of type bool
    */
-  void set_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<bool>&  list);
+  void set_boolean_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<bool>& list);
   _IGNORE(g_key_file_set_boolean_list)
 
   /** Sets a list of integers for the @a key under @a group_name.
@@ -389,7 +390,7 @@ public:
    * @param key The name of a key
    * @param list A list holding object of type int
    */
-  void set_integer_list(const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<int>&  list);
+  void set_integer_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<int>& list);
   _IGNORE(g_key_file_set_integer_list)
 
   /** Sets a list of doubles for the @a key under @a group_name.
@@ -400,7 +401,7 @@ public:
    *
    * @newin{2,14}
    */
-  void set_double_list(const Glib::ustring& group_name, const Glib::ustring& key, const std::vector<double>&  list);
+  void set_double_list(const Glib::ustring& group_name, const Glib::ustring& key, const Glib::ArrayHandle<double>& list);
   _IGNORE(g_key_file_set_double_list)
 
 
index 4e2bf54..408b168 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/markup.h>
index 6f745f5..bd1d24b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -110,7 +109,17 @@ using Error = Glib::MarkupError;
  */
 Glib::ustring escape_text(const Glib::ustring& text);
 
-_WRAP_ENUM(ParseFlags, GMarkupParseFlags, NO_GTYPE)
+
+/** There are no flags right now. Pass <tt>Glib::Markup::ParseFlags(0)</tt> for
+ * the flags argument to all functions (this should be the default argument
+ * anyway).
+ */
+_WRAP_ENUM(ParseFlags, GMarkupParseFlags, NO_GTYPE, s#^MARKUP_##)
+
+/*! @var Markup::ParseFlags DO_NOT_USE_THIS_UNSUPPORTED_FLAG
+ * Flag you should not use.
+ */
+
 
 /** Binary predicate used by Markup::Parser::AttributeMap.
  * @ingroup Markup
index 579bcca..f11326d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <cstddef>
@@ -75,7 +74,7 @@ unsetenv(const std::string& variable)
   g_unsetenv(variable.c_str());
 }
 
-std::vector<std::string>
+Glib::ArrayHandle<std::string>
 listenv()
 {
   char** value = g_listenv();
@@ -84,7 +83,7 @@ listenv()
   {
     ++end;
   }
-  return Glib::ArrayHandler<std::string>::array_to_vector(value, end - value, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<std::string>(value, end - value, Glib::OWNERSHIP_DEEP);
 }
 
 std::string
@@ -117,6 +116,14 @@ get_current_dir()
   return convert_return_gchar_ptr_to_stdstring(g_get_current_dir());
 }
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+std::string
+get_user_special_dir(GUserDirectory directory)
+{
+  return convert_const_gchar_ptr_to_stdstring(g_get_user_special_dir(directory));
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 std::string
 get_user_special_dir(UserDirectory directory)
 {
@@ -202,10 +209,10 @@ path_get_dirname(const std::string& filename)
 }
 
 std::string
-build_filename(const std::vector<std::string>& elements)
+build_filename(const Glib::ArrayHandle<std::string>& elements)
 {
   return convert_return_gchar_ptr_to_stdstring(
-    g_build_filenamev(const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(elements).data())));
+    g_build_filenamev(const_cast<char**>(elements.data())));
 }
 
 std::string
@@ -276,10 +283,10 @@ build_filename(const std::string& elem1, const std::string& elem2, const std::st
 }
 
 std::string
-build_path(const std::string& separator, const std::vector<std::string>& elements)
+build_path(const std::string& separator, const Glib::ArrayHandle<std::string>& elements)
 {
   return convert_return_gchar_ptr_to_stdstring(
-    g_build_pathv(separator.c_str(), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(elements).data())));
+    g_build_pathv(separator.c_str(), const_cast<char**>(elements.data())));
 }
 
 std::string
index 05efa84..5b0ba58 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
 
+#include <glibmm/arrayhandle.h>
 #include <glibmm/ustring.h>
-#include <vector>
 
 namespace Glib
 {
-_WRAP_ENUM(UserDirectory, GUserDirectory, NO_GTYPE, s#^DIRECTORY_##)
+_WRAP_ENUM(UserDirectory, GUserDirectory, NO_GTYPE)
 _WRAP_ENUM(FormatSizeFlags, GFormatSizeFlags, NO_GTYPE)
 
 /** @defgroup MiscUtils Miscellaneous Utility Functions
@@ -32,6 +31,7 @@ _WRAP_ENUM(FormatSizeFlags, GFormatSizeFlags, NO_GTYPE)
 
 /** Gets a human-readable name for the application,
  * as set by Glib::set_application_name().
+ *
  * This name should be localized if possible, and is intended for display to
  * the user.  Contrast with Glib::get_prgname(), which gets a non-localized
  * name. If Glib::set_application_name() has not been called, returns the
@@ -58,9 +58,14 @@ Glib::ustring get_application_name();
 void set_application_name(const Glib::ustring& application_name);
 
 /** Gets the name of the program.
+ *
+ * This name should not be localized, in contrast to get_application_name().
+ *
  * If you are using GDK or GTK+ the program name is set in <tt>gdk_init()</tt>,
- * which is called by <tt>gtk_init()</tt>.  The program name is found by taking
- * the last component of <tt>argv[0]</tt>.
+ * which is called by <tt>gtk_init()</tt> and therefore by the constructors of
+ * Gtk::Main and Gtk::Application. The program name is found by taking the last
+ * component of <tt>argv[0]</tt>.
+ *
  * @return The name of the program.
  */
 std::string get_prgname();
@@ -134,16 +139,27 @@ void unsetenv(const std::string& variable);
  * @return Array of environment names (The generic ArrayHandle will be
  * implicitly converted to any STL compatible container type).
  */
-std::vector<std::string> listenv();
+Glib::ArrayHandle<std::string> listenv();
 
 /** Gets the user name of the current user.
+ *
+ * The encoding of the returned string is system-defined. On UNIX, it might be
+ * the preferred file name encoding, or something else, and there is no
+ * guarantee that it is ever consistent on a machine. On Windows, it is always
+ * UTF-8.
+ *
  * @return The name of the current user.
  */
 std::string get_user_name();
 
-/** Gets the real name of the user.
- * This usually comes from the user's entry in the <tt>passwd</tt> file.
- * @return The user's real name.
+/** Gets the real name of the current user.
+ *
+ * This usually comes from the user's entry in the <tt>passwd</tt> file. The
+ * encoding of the returned string is subject to the same variability as noted
+ * for get_user_name(). If the real user name cannot be determined, the string
+ * "Unknown" is returned.
+ *
+ * @return The current user's real name.
  */
 std::string get_real_name();
 
@@ -165,6 +181,28 @@ std::string get_tmp_dir();
  */
 std::string get_current_dir();
 
+#ifndef GLIBMM_DISABLE_DEPRECATED
+/** Returns the full path of a special directory using its logical id.
+ *
+ * On Unix this is done using the XDG special user directories.
+ * For compatibility with existing practise, G_USER_DIRECTORY_DESKTOP
+ * falls back to `$HOME/Desktop` when XDG special user directories have
+ * not been set up.
+ *
+ * Depending on the platform, the user might be able to change the path
+ * of the special directory without requiring the session to restart; GLib
+ * will not reflect any change once the special directories are loaded.
+ *
+ * @param directory The logical id of special directory.
+ * @return The path to the specified special directory, or an empty string
+ *         if the logical id was not found.
+ *
+ * @newin{2,14}
+ * @deprecated Use get_user_special_dir(Glib::UserDirectory directory) instead.
+ */
+std::string get_user_special_dir(GUserDirectory directory);
+#endif // GLIBMM_DISABLE_DEPRECATED
+
 /** Returns the full path of a special directory using its logical id.
  *
  * On Unix this is done using the XDG special user directories.
@@ -267,7 +305,7 @@ std::string path_get_dirname(const std::string& filename);
  *   Any STL compatible container type is accepted.
  * @return The resulting path.
  */
-std::string build_filename(const std::vector<std::string>&  elements);
+std::string build_filename(const Glib::ArrayHandle<std::string>& elements);
 
 /** Creates a filename from two elements using the correct separator for filenames.
  * No attempt is made to force the resulting filename to be an absolute path.
@@ -433,7 +471,7 @@ std::string build_filename(const std::string& elem1, const std::string& elem2,
  * @return The resulting path.
  */
 std::string build_path(const std::string& separator,
-                       const std::vector<std::string>&  elements);
+                       const Glib::ArrayHandle<std::string>& elements);
 
 /** Locates the first executable named @a program in the user's path, in the
  * same way that <tt>execvp()</tt> would locate it.
@@ -464,7 +502,7 @@ std::string find_program_in_path(const std::string& program);
  * 3292528 bytes will be converted into the string "3.2 MB".
  *
  * The prefix units base is 1000 (i.e. 1 kB is 1000 bytes), unless the
- * Glib::FormatSizeFlags::IEC_UNITS flag is set.
+ * Glib::FORMAT_SIZE_IEC_UNITS flag is set.
  *
  * @param size A size in bytes.
  * @param flags Flags to modify the output.
@@ -472,7 +510,7 @@ std::string find_program_in_path(const std::string& program);
  *
  * @newin{2,46}
  */
-Glib::ustring format_size(guint64 size, FormatSizeFlags flags = FormatSizeFlags::DEFAULT);
+Glib::ustring format_size(guint64 size, FormatSizeFlags flags = FORMAT_SIZE_DEFAULT);
 
 /** @} group MiscUtils */
 
index 37ead86..139e913 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
@@ -21,7 +20,7 @@
 namespace Glib
 {
 
-Module::Module(const std::string& file_name, Flags flags)
+Module::Module(const std::string& file_name, ModuleFlags flags)
 : gobject_(g_module_open(file_name.c_str(), (GModuleFlags)flags))
 {
 }
index bb6f428..d1af3bb 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -26,6 +25,8 @@ extern "C" { typedef struct _GModule GModule; }
 namespace Glib
 {
 
+_WRAP_ENUM(ModuleFlags, GModuleFlags, NO_GTYPE)
+
 //TODO: Replace get_last_error() with exceptions?
 //Provide operator()?
 
@@ -43,8 +44,6 @@ class Module
 
 public:
 
-  _WRAP_ENUM(Flags, GModuleFlags, NO_GTYPE)
-
   /** Opens a module.
    *
    * First of all it tries to open file_name as a module. If that
@@ -69,7 +68,7 @@ public:
    * @param file_name The library filename to open
    * @param flags Flags to configure the load process
    */
-  explicit Module(const std::string& file_name, Flags flags = Flags(0));
+  explicit Module(const std::string& file_name, ModuleFlags flags = ModuleFlags(0));
 
   Module(const Module&) = delete;
   Module& operator=(const Module&) = delete;
index cf41b48..cdd526b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -21,16 +20,30 @@ _DEFS(glibmm,glib)
 #include <stack>
 #include <deque>
 
-#include <sigc++/bind.h>
-#include <sigc++/slot.h>
 #include <glibmm/refptr.h>
 #include <glibmm/ustring.h>
 #include <glibmm/error.h>
+#include <glibmm/arrayhandle.h>
 #include <glib.h>
 
 namespace Glib
 {
 
+//Hand-written, instead of using _WRAP_ENUM,
+//because the C enum values don't have a prefix.
+
+/** Specifies the type of traveral performed by methods such as NodeTree::_traverse() and NodeTree::find().
+ *
+ * @ingroup glibmmEnums
+ */
+enum TraverseType
+{
+  TRAVERSE_IN_ORDER = G_IN_ORDER, /*!< Visits a node's left child first, then the node itself, then its right child. This is the one to use if you want the output sorted according to the compare function.  */
+  TRAVERSE_PRE_ORDER = G_PRE_ORDER, /*!< Visits a node, then its children. */
+  TRAVERSE_POST_ORDER = G_POST_ORDER, /*!< Visits the node's children, then the node itself. */
+  TRAVERSE_LEVEL_ORDER = G_LEVEL_ORDER /*!< For NodeTree, it vists the root node first, then its children, then its grandchildren, and so on. Note that this is less efficient than the other orders. This is not implemented for Glib::Tree. */
+};
+
 /** N-ary Trees - trees of data with any number of branches
  * The NodeTree class and its associated functions provide an N-ary tree data structure, in which nodes in the tree can contain arbitrary data.
  *
@@ -55,23 +68,8 @@ class NodeTree
 {
   _CLASS_GENERIC(NodeTree, GNode)
 public:
-  //Hand-written, instead of using _WRAP_ENUM,
-  //because the C enum values don't have a prefix.
-
-  /** Specifies the type of traveral performed by methods such as NodeTree::_traverse() and NodeTree::find().
-   *
-   * @ingroup glibmmEnums
-   */
-  enum class TraverseType
-  {
-    IN_ORDER = G_IN_ORDER, /*!< Visits a node's left child first, then the node itself, then its right child. This is the one to use if you want the output sorted according to the compare function.  */
-    PRE_ORDER = G_PRE_ORDER, /*!< Visits a node, then its children. */
-    POST_ORDER = G_POST_ORDER, /*!< Visits the node's children, then the node itself. */
-    LEVEL_ORDER = G_LEVEL_ORDER /*!< For NodeTree, it vists the root node first, then its children, then its grandchildren, and so on. Note that this is less efficient than the other orders. This is not implemented for Glib::Tree. */
-  };
-
-  using TraverseFunc = sigc::slot<bool(NodeTree<T>&)>;
-  using ForeachFunc = sigc::slot<void(NodeTree<T>&)>;
+  using TraverseFunc = sigc::slot<bool, NodeTree<T>&>;
+  using ForeachFunc = sigc::slot<void, NodeTree<T>&>;
 
 private:
   static NodeTree<T>* wrap(GNode* node)
@@ -289,12 +287,12 @@ public:
    *
    * @ingroup glibmmEnums
    */
-  enum class TraverseFlags
+  enum TraverseFlags
   {
-    LEAVES = G_TRAVERSE_LEAVES, /*!< Only leaf nodes should be visited. */
-    NON_LEAVES = G_TRAVERSE_NON_LEAVES, /*!< Only non-leaf nodes should be visited. */
-    ALL = G_TRAVERSE_ALL, /*!< All nodes should be visited. */
-    MASK = G_TRAVERSE_MASK /*!< A mask of all traverse flags. */
+    TRAVERSE_LEAVES = G_TRAVERSE_LEAVES, /*!< Only leaf nodes should be visited. */
+    TRAVERSE_NON_LEAVES = G_TRAVERSE_NON_LEAVES, /*!< Only non-leaf nodes should be visited. */
+    TRAVERSE_ALL = G_TRAVERSE_ALL, /*!< All nodes should be visited. */
+    TRAVERSE_MASK = G_TRAVERSE_MASK /*!< A mask of all traverse flags. */
   };
 
   /** Traverses a tree starting at the current node.
@@ -310,7 +308,7 @@ public:
    * If max_depth is 2, the root and its children are visited. And so on.
    * @param func the slot to invoke for each visited child
    */
-  void traverse(const TraverseFunc& func, TraverseType order = TraverseType::IN_ORDER, TraverseFlags flags = TraverseFlags::ALL, int max_depth = -1)
+  void traverse(const TraverseFunc& func, TraverseType order = TRAVERSE_IN_ORDER, TraverseFlags flags = TRAVERSE_ALL, int max_depth = -1)
   {
     TraverseFunc func_copy = func;
     g_node_traverse(gobj(), (GTraverseType)order, (GTraverseFlags)flags, max_depth, c_callback_traverse, reinterpret_cast<gpointer>(&func_copy));
@@ -323,7 +321,7 @@ public:
    * @param flags Wwhich types of children are to be visited.
    * @param func The slot to invoke for each visited node.
    */
-  void foreach(const ForeachFunc& func, TraverseFlags flags = TraverseFlags::ALL)
+  void foreach(const ForeachFunc& func, TraverseFlags flags = TRAVERSE_ALL)
   {
     ForeachFunc func_copy = func;
     g_node_children_foreach(gobj(), (GTraverseFlags)flags, c_callback_foreach, reinterpret_cast<gpointer>(&func_copy));
@@ -332,16 +330,16 @@ public:
 
   /** Finds the first child of a NodeTree with the given data.
    *
-   * @param flags Which types of children are to be visited, one of TraverseFlags::ALL, TraverseFlags::LEAVES or TraverseFlags::NON_LEAVES.
+   * @param flags Which types of children are to be visited, one of TRAVERSE_ALL, TRAVERSE_LEAVES and TRAVERSE_NON_LEAVES.
    * @param the_data The data for which to search.
    * @return the found child, or <tt>nullptr</tt> if the data is not found
    */
-  NodeTree<T>* find_child(const T& the_data, TraverseFlags flags = TraverseFlags::ALL)
+  NodeTree<T>* find_child(const T& the_data, TraverseFlags flags = TRAVERSE_ALL)
   {
-    sigc::slot<void(GNode*, const T&, GNode**)> real_slot = sigc::ptr_fun(on_compare_child);
+    sigc::slot<void, GNode*, const T&, GNode**> real_slot = sigc::ptr_fun(on_compare_child);
 
     GNode* child = nullptr;
-    using type_foreach_gnode_slot = sigc::slot<void(GNode*)>;
+    using type_foreach_gnode_slot = sigc::slot<void, GNode*>;
     type_foreach_gnode_slot bound_slot = sigc::bind(real_slot, the_data, &child);
 
     g_node_children_foreach(gobj(), (GTraverseFlags)flags, c_callback_foreach_compare_child, reinterpret_cast<gpointer>(&bound_slot));
@@ -351,11 +349,11 @@ public:
 
   /** Finds the first child of a NodeTree with the given data.
    *
-   * @param flags Which types of children are to be visited, one of TraverseFlags::ALL, TraverseFlags::LEAVES or TraverseFlags::NON_LEAVES.
+   * @param flags Which types of children are to be visited, one of TRAVERSE_ALL, TRAVERSE_LEAVES and TRAVERSE_NON_LEAVES.
    * @param the_data The data for which to search.
    * @return the found child, or <tt>nullptr</tt> if the data is not found
    */
-  const NodeTree<T>* find_child(const T& the_data, TraverseFlags flags = TraverseFlags::ALL) const
+  const NodeTree<T>* find_child(const T& the_data, TraverseFlags flags = TRAVERSE_ALL) const
   {
     return const_cast<NodeTree<T>*>(this)->find_child(flags, the_data);
   }
@@ -364,18 +362,18 @@ public:
 
   /** Finds a node in a tree.
    *
-   * @param order The order in which nodes are visited: IN_ORDER, TraverseType::PRE_ORDER, TraverseType::POST_ORDER, or TraverseType::LEVEL_ORDER
-   * @param flags Which types of children are to be visited: one of TraverseFlags::ALL, TraverseFlags::LEAVES or TraverseFlags::NON_LEAVES.
+   * @param order The order in which nodes are visited: IN_ORDER, TRAVERSE_PRE_ORDER, TRAVERSE_POST_ORDER, or TRAVERSE_LEVEL_ORDER
+   * @param flags Which types of children are to be visited: one of TRAVERSE_ALL, TRAVERSE_LEAVES and TRAVERSE_NON_LEAVES.
    * @param the_data The data for which to search.
    * @return The found node, or <tt>nullptr</tt> if the data is not found.
    */
-  NodeTree<T>* find(const T& the_data, TraverseType order = TraverseType::IN_ORDER, TraverseFlags flags = TraverseFlags::ALL)
+  NodeTree<T>* find(const T& the_data, TraverseType order = TRAVERSE_IN_ORDER, TraverseFlags flags = TRAVERSE_ALL)
   {
     //We use a sigc::slot for the C callback, so we can bind some extra data.
-    sigc::slot<gboolean(GNode*, const T&, GNode**)> real_slot = sigc::ptr_fun(on_compare_node);
+    sigc::slot<gboolean, GNode*, const T&, GNode**> real_slot = sigc::ptr_fun(on_compare_node);
     GNode* child = nullptr;
 
-    using type_traverse_gnode_slot = sigc::slot<gboolean(GNode*)>;
+    using type_traverse_gnode_slot = sigc::slot<gboolean, GNode*>;
     type_traverse_gnode_slot bound_slot = sigc::bind(real_slot, the_data, &child);
 
     g_node_traverse(const_cast<GNode*>(gobj()), (GTraverseType)order, (GTraverseFlags)flags, -1, c_callback_traverse_compare_node, reinterpret_cast<gpointer>(&bound_slot));
@@ -390,7 +388,7 @@ public:
    * @param the_data The data for which to search.
    * @return The found node, or <tt>nullptr</tt> if the data is not found.
    */
-  const NodeTree<T>* find(const T& the_data, TraverseType order = TraverseType::IN_ORDER, TraverseFlags flags = TraverseFlags::ALL) const
+  const NodeTree<T>* find(const T& the_data, TraverseType order = TRAVERSE_IN_ORDER, TraverseFlags flags = TRAVERSE_ALL) const
   {
     return const_cast<NodeTree<T>*>(this)->find(order, flags, the_data);
   }
@@ -593,10 +591,10 @@ public:
 
   /** Gets the number of nodes in a tree.
    *
-   * @param flags Which types of children are to be counted: one of TraverseFlags::ALL, TraverseFlags::LEAVES or TraverseFlags::NON_LEAVES
+   * @param flags Which types of children are to be counted: one of TRAVERSE_ALL, TRAVERSE_LEAVES and TRAVERSE_NON_LEAVES
    * @return The number of nodes in the tree.
    */
-  guint node_count(TraverseFlags flags = TraverseFlags::ALL) const
+  guint node_count(TraverseFlags flags = TRAVERSE_ALL) const
   {
     return g_node_n_nodes(const_cast<GNode*>(gobj()), (GTraverseFlags)flags);
   }
@@ -733,7 +731,7 @@ private:
     }
   }
 
-  /// Wrapper for invoking a sigc::slot<void(GNode*)> (Internal use).
+  /// Wrapper for invoking a sigc::slot<void,GNode*> (Internal use).
   static void c_callback_foreach_compare_child(GNode* node, gpointer data)
   {
     const ForeachFunc* slot = reinterpret_cast<const ForeachFunc*>(data);
@@ -751,7 +749,7 @@ private:
     return FALSE;
   }
 
-  /// Wrapper for invoking a sigc::slot<gboolean(GNode*)> (Internal use).
+  /// Wrapper for invoking a sigc::slot<gboolean,GNode*> (Internal use).
   static gboolean c_callback_traverse_compare_node(GNode* node, gpointer data)
   {
     const TraverseFunc* slot = reinterpret_cast<const TraverseFunc*>(data);
index a6132d0..2b44a73 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
@@ -94,15 +93,15 @@ OptionContext::~OptionContext()
 void
 OptionContext::add_group(OptionGroup& group)
 {
-  // GObjectContext takes ownership of the GOptionGroup, unrefing it later.
-  g_option_context_add_group(gobj(), group.gobj_copy());
+  // Strangely, GObjectContext actually takes ownership of the GOptionGroup, deleting it later.
+  g_option_context_add_group(gobj(), (group).gobj_give_ownership());
 }
 
 void
 OptionContext::set_main_group(OptionGroup& group)
 {
-  // GObjectContext takes ownership of the GOptionGroup, unrefing it later.
-  g_option_context_set_main_group(gobj(), group.gobj_copy());
+  // Strangely, GObjectContext actually takes ownership of the GOptionGroup, deleting it later.
+  g_option_context_set_main_group(gobj(), (group).gobj_give_ownership());
 }
 
 /*
index 0f86e6e..c40c41d 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -200,7 +199,7 @@ public:
    * This function is used to translate user-visible strings, for --help output.
    * The function takes an untranslated string and returns a translated string
    */
-  using SlotTranslate = sigc::slot<Glib::ustring(const Glib::ustring&)>;
+  using SlotTranslate = sigc::slot<Glib::ustring, const Glib::ustring&>;
 
   /**
    * Sets the function which is used to translate user-visible
index 0a807a5..3d320b3 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
index 246aa96..d1f1ecc 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index 08cfe6d..95177ce 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/optionentry.h>
 #include <glibmm/optioncontext.h>
 #include <glibmm/utility.h>
 #include <glibmm/exceptionhandler.h>
+//#include <glibmm/containers.h>
 #include <glib.h> // g_malloc
 #include <cstring> // std::memset()
 
@@ -84,7 +84,7 @@ g_callback_pre_parse(
 
   try
   {
-    return option_group->on_pre_parse(cppContext);
+    return option_group->on_pre_parse(cppContext, *option_group);
   }
   catch (Glib::Error& err)
   {
@@ -99,25 +99,18 @@ g_callback_pre_parse(
 
 static void
 g_callback_error(
-  GOptionContext* context, GOptionGroup* /* group */, gpointer data, GError** error)
+  GOptionContext* context, GOptionGroup* /* group */, gpointer data, GError** /* TODO error */)
 {
-  // GError** error is input data containing information on an error that
-  // has occurred before this function is called.
+  // TODO GError** error is input data containing information on an error that
+  // has occurred before this function is called. When API can be broken,
+  // the function prototype of on_error ought to be changed to
+  // void on_error(OptionContext& context, Error& error).
 
   OptionContext cppContext(context, false /* take_ownership */);
 
   auto option_group = static_cast<OptionGroup*>(data);
-  if (option_group && error && *error)
-  {
-    try
-    {
-      Error::throw_exception(g_error_copy(*error));
-    }
-    catch (const Error& err)
-    {
-      return option_group->on_error(cppContext, err);
-    }
-  }
+  if (option_group)
+    return option_group->on_error(cppContext, *option_group);
 }
 
 const gchar*
@@ -174,7 +167,7 @@ OptionGroup::post_parse_callback(
 
   try
   {
-    return option_group->on_post_parse(cppContext);
+    return option_group->on_post_parse(cppContext, *option_group);
   }
   catch (Glib::Error& err)
   {
@@ -276,7 +269,8 @@ OptionGroup::option_arg_callback(
 OptionGroup::OptionGroup(const Glib::ustring& name, const Glib::ustring& description,
   const Glib::ustring& help_description)
 : gobject_(g_option_group_new(name.c_str(), description.c_str(), help_description.c_str(),
-    this /* user_data */, nullptr /* destroy_func */))
+    this /* user_data */, nullptr /* destroy_func */)),
+  has_ownership_(true)
 {
   // g_callback_pre_parse(), post_parse_callback(), g_callback_error(), and
   // option_arg_callback() depend on user_data being this. The first three
@@ -289,11 +283,35 @@ OptionGroup::OptionGroup(const Glib::ustring& name, const Glib::ustring& descrip
   g_option_group_set_error_hook(gobj(), &g_callback_error);
 }
 
-OptionGroup::OptionGroup(GOptionGroup* castitem) : gobject_(castitem)
+OptionGroup::OptionGroup(GOptionGroup* castitem) : gobject_(castitem), has_ownership_(true)
 {
   // Always takes ownership - never takes copy.
 }
 
+OptionGroup::OptionGroup(OptionGroup&& other) noexcept
+  : map_entries_(std::move(other.map_entries_)),
+    gobject_(std::move(other.gobject_)),
+    has_ownership_(std::move(other.has_ownership_))
+{
+  other.gobject_ = nullptr;
+  other.has_ownership_ = false;
+}
+
+OptionGroup&
+OptionGroup::operator=(OptionGroup&& other) noexcept
+{
+  release_gobject();
+
+  map_entries_ = std::move(other.map_entries_);
+  gobject_ = std::move(other.gobject_);
+  has_ownership_ = std::move(other.has_ownership_);
+
+  other.gobject_ = nullptr;
+  other.has_ownership_ = false;
+
+  return *this;
+}
+
 void
 OptionGroup::release_gobject() noexcept
 {
@@ -304,7 +322,7 @@ OptionGroup::release_gobject() noexcept
     cpp_entry.release_c_arg();
   }
 
-  if (gobject_)
+  if (has_ownership_ && gobject_)
   {
     g_option_group_unref(gobj());
     gobject_ = nullptr;
@@ -464,19 +482,19 @@ OptionGroup::add_entry_with_wrapper(const OptionEntry& entry, GOptionArg arg_typ
 }
 
 bool
-OptionGroup::on_pre_parse(OptionContext& /* context */)
+OptionGroup::on_pre_parse(OptionContext& /* context */, OptionGroup& /* group */)
 {
   return true;
 }
 
 bool
-OptionGroup::on_post_parse(OptionContext& /* context */)
+OptionGroup::on_post_parse(OptionContext& /* context */, OptionGroup& /* group */)
 {
   return true;
 }
 
 void
-OptionGroup::on_error(OptionContext& /* context */, const Error& /* error */)
+OptionGroup::on_error(OptionContext& /* context */, OptionGroup& /* group */)
 {
 }
 
@@ -759,7 +777,7 @@ OptionGroup::CppOptionEntry::convert_c_to_cpp()
       typed_cpp_arg->clear();
 
       // The C array is null-terminated.
-      // std::vector<Glib::ustring> array_handle(*typed_arg,  Glib::OWNERSHIP_NONE);
+      // Glib::StringArrayHandle array_handle(*typed_arg,  Glib::OWNERSHIP_NONE);
 
       // The SUN Forte compiler complains about this:
       // "optiongroup.cc", line 354: Error: Cannot assign Glib::ArrayHandle<Glib::ustring,
@@ -774,7 +792,7 @@ OptionGroup::CppOptionEntry::convert_c_to_cpp()
       //     of a pointer dynamic_cast must be a pointer to a complete class type
       //   return dynamic_cast<CppType>(Glib::wrap_auto(cobj, false /* take_copy */));
 
-      // for(auto iter = array_handle.begin(); iter !=
+      // for(Glib::StringArrayHandle::iterator iter = array_handle.begin(); iter !=
       // array_handle.end(); ++iter)
       //{
       //  typed_cpp_arg->emplace_back(*iter);
@@ -829,9 +847,10 @@ OptionGroup::CppOptionEntry::convert_c_to_cpp()
 }
 
 GOptionGroup*
-OptionGroup::gobj_copy() const
+OptionGroup::gobj_give_ownership()
 {
-  return g_option_group_ref(gobject_);
+  has_ownership_ = false;
+  return gobj();
 }
 
 } // namespace Glib
index 5fbdcbf..c1c8b40 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
 
-#include <glibmm/error.h>
 #include <glibmm/ustring.h>
 #include <sigc++/slot.h>
 #include <map>
@@ -38,16 +36,8 @@ class OptionEntry;
 class OptionContext;
 #endif //DOXYGEN_SHOULD_SKIP_THIS
 
-// GOptionGroup is now refcounted. See https://bugzilla.gnome.org/show_bug.cgi?id=743349
-// But Glib::OptionGroup can't be a _CLASS_OPAQUE_REFCOUNTED, because it has
-// other data members than gobject_. The memory management would be more involved
-// if Glib::OptionGroup were refcounted. It would need a separate refcount for the
-// wrapper, like in Glib::IOChannel and Glib::Source. It's easier and good enough
-// to let Glib::OptionGroup remain non-refcounted. GOptionGroup's refcount still helps.
-// E.g. when GOptionContext takes ownership of a GOptionGroup, it's given a ref.
-// A drawback with this approach is that it's possible to have more than one wrapper
-// for one GOptionGroup, each wrapper with its own ref.
-
+//TODO: GOptionGroup is now refcounted. See https://bugzilla.gnome.org/show_bug.cgi?id=743349
+//When we can break API/ABI, make Glib::OptionGroup refcounted. _CLASS_OPAQUE_REFCOUNTED?
 /** An OptionGroup defines the options in a single group.
  * Libraries which need to parse commandline options are expected to provide a function that allows their OptionGroups to
  * be added to the application's OptionContext.
@@ -58,17 +48,17 @@ class OptionGroup
 public:
   /** For example Glib::ustring on_translate(const Glib::ustring& original);.
    */
-  using SlotTranslate = sigc::slot<Glib::ustring(const Glib::ustring&)>;
+  using SlotTranslate = sigc::slot<Glib::ustring, const Glib::ustring&>;
 
   /** For example bool on_option_arg_string(const Glib::ustring& option_name,
    *  const Glib::ustring& value, bool has_value);.
    */
-  using SlotOptionArgString = sigc::slot<bool(const Glib::ustring&, const Glib::ustring&, bool)>;
+  using SlotOptionArgString = sigc::slot<bool, const Glib::ustring&, const Glib::ustring&, bool>;
 
   /** For example bool on_option_arg_filename(const Glib::ustring& option_name,
    *  const std::string& value, bool has_value);.
    */
-  using SlotOptionArgFilename = sigc::slot<bool(const Glib::ustring&, const std::string&, bool)>;
+  using SlotOptionArgFilename = sigc::slot<bool, const Glib::ustring&, const std::string&, bool>;
 
   OptionGroup(const Glib::ustring& name, const Glib::ustring& description, const Glib::ustring& help_description = Glib::ustring());
 
@@ -78,21 +68,16 @@ public:
   explicit OptionGroup(GOptionGroup* castitem);
   _IGNORE(g_option_group_new, g_option_group_ref)
 
-  // OptionGroup can't be copied or moved. The underlying GOptionGroup contains
-  // a pointer to the wrapper, set in the call to g_option_group_new().
-  // That pointer can't be changed.
-  OptionGroup(const OptionGroup& other) = delete;
-  OptionGroup& operator=(const OptionGroup& other) = delete;
-  OptionGroup(OptionGroup&& other) = delete;
-  OptionGroup& operator=(OptionGroup&& other) = delete;
+  OptionGroup(OptionGroup&& other) noexcept;
+  OptionGroup& operator=(OptionGroup&& other) noexcept;
 
   virtual ~OptionGroup();
   _IGNORE(g_option_group_free, g_option_group_unref)
 
 
-  virtual bool on_pre_parse(OptionContext& context);
-  virtual bool on_post_parse(OptionContext& context);
-  virtual void on_error(OptionContext& context, const Error& error);
+  virtual bool on_pre_parse(OptionContext& context, OptionGroup& group);
+  virtual bool on_post_parse(OptionContext& context, OptionGroup& group);
+  virtual void on_error(OptionContext& context, OptionGroup& group);
   _IGNORE(g_option_group_set_parse_hooks, g_option_group_set_error_hook)
 
   void add_entry(const OptionEntry& entry);
@@ -181,14 +166,9 @@ public:
 
   _WRAP_METHOD(void set_translation_domain(const Glib::ustring& domain), g_option_group_set_translation_domain)
 
-  /// Provides access to the underlying C instance.
   GOptionGroup*       gobj()       { return gobject_; }
-
-  /// Provides access to the underlying C instance.
   const GOptionGroup* gobj() const { return gobject_; }
-
-  /// Provides access to the underlying C instance. The caller is responsible for unrefing it.
-  GOptionGroup*       gobj_copy() const;
+  GOptionGroup* gobj_give_ownership();
 
 protected:
 
@@ -220,10 +200,11 @@ protected:
     gpointer data, GError** error);
 
   //Map of entry names to CppOptionEntry:
-  using type_map_entries = std::map<Glib::ustring, CppOptionEntry>;
+  typedef std::map<Glib::ustring, CppOptionEntry> type_map_entries;
   type_map_entries map_entries_;
 
   GOptionGroup* gobject_;
+  bool has_ownership_; //Whether the gobject_ belongs to this C++ instance.
 #endif //DOXYGEN_SHOULD_SKIP_THIS
 
 private:
index 7707efa..9ceb1a3 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
 
-using CompileFlags = Glib::Regex::CompileFlags;
-using MatchFlags = Glib::Regex::MatchFlags;
-
 namespace Glib
 {
 
 Glib::RefPtr<Glib::Regex>
 Regex::create(
-  const Glib::ustring& pattern, CompileFlags compile_options, MatchFlags match_options)
+  const Glib::ustring& pattern, RegexCompileFlags compile_options, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   auto regex = g_regex_new(
@@ -47,7 +43,7 @@ Regex::escape_string(const Glib::ustring& string)
 
 bool
 Regex::match(
-  const Glib::ustring& string, Glib::MatchInfo& match_info, MatchFlags match_options)
+  const Glib::ustring& string, Glib::MatchInfo& match_info, RegexMatchFlags match_options)
 {
   GMatchInfo* ginfo = nullptr;
   bool const result = static_cast<bool>(
@@ -57,14 +53,14 @@ Regex::match(
 }
 
 bool
-Regex::match(const Glib::ustring& string, MatchFlags match_options)
+Regex::match(const Glib::ustring& string, RegexMatchFlags match_options)
 {
   return g_regex_match(gobj(), string.c_str(), (GRegexMatchFlags)(match_options), nullptr);
 }
 
 bool
 Regex::match(const Glib::ustring& string, int start_position, Glib::MatchInfo& match_info,
-  MatchFlags match_options)
+  RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   GMatchInfo* ginfo = nullptr;
@@ -81,7 +77,7 @@ Regex::match(const Glib::ustring& string, int start_position, Glib::MatchInfo& m
 
 bool
 Regex::match(const Glib::ustring& string, gssize string_len, int start_position,
-  Glib::MatchInfo& match_info, MatchFlags match_options)
+  Glib::MatchInfo& match_info, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   GMatchInfo* ginfo = nullptr;
@@ -97,7 +93,7 @@ Regex::match(const Glib::ustring& string, gssize string_len, int start_position,
 }
 
 bool
-Regex::match(const Glib::ustring& string, int start_position, MatchFlags match_options)
+Regex::match(const Glib::ustring& string, int start_position, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   bool retvalue = g_regex_match_full(gobj(), string.c_str(), -1, start_position,
@@ -110,7 +106,7 @@ Regex::match(const Glib::ustring& string, int start_position, MatchFlags match_o
 
 bool
 Regex::match(
-  const Glib::ustring& string, gssize string_len, int start_position, MatchFlags match_options)
+  const Glib::ustring& string, gssize string_len, int start_position, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   bool retvalue = g_regex_match_full(gobj(), string.c_str(), string_len, start_position,
@@ -123,7 +119,7 @@ Regex::match(
 
 bool
 Regex::match_all(
-  const Glib::ustring& string, Glib::MatchInfo& match_info, MatchFlags match_options)
+  const Glib::ustring& string, Glib::MatchInfo& match_info, RegexMatchFlags match_options)
 {
   GMatchInfo* ginfo = nullptr;
   bool const result = static_cast<bool>(g_regex_match_all(
@@ -133,14 +129,14 @@ Regex::match_all(
 }
 
 bool
-Regex::match_all(const Glib::ustring& string, MatchFlags match_options)
+Regex::match_all(const Glib::ustring& string, RegexMatchFlags match_options)
 {
   return g_regex_match_all(gobj(), string.c_str(), ((GRegexMatchFlags)(match_options)), nullptr);
 }
 
 bool
 Regex::match_all(const Glib::ustring& string, int start_position, Glib::MatchInfo& match_info,
-  MatchFlags match_options)
+  RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   GMatchInfo* ginfo = nullptr;
@@ -157,7 +153,7 @@ Regex::match_all(const Glib::ustring& string, int start_position, Glib::MatchInf
 
 bool
 Regex::match_all(const Glib::ustring& string, gssize string_len, int start_position,
-  Glib::MatchInfo& match_info, MatchFlags match_options)
+  Glib::MatchInfo& match_info, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   GMatchInfo* ginfo = nullptr;
@@ -173,7 +169,7 @@ Regex::match_all(const Glib::ustring& string, gssize string_len, int start_posit
 }
 
 bool
-Regex::match_all(const Glib::ustring& string, int start_position, MatchFlags match_options)
+Regex::match_all(const Glib::ustring& string, int start_position, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   bool retvalue = g_regex_match_all_full(gobj(), string.c_str(), -1, start_position,
@@ -186,7 +182,7 @@ Regex::match_all(const Glib::ustring& string, int start_position, MatchFlags mat
 
 bool
 Regex::match_all(
-  const Glib::ustring& string, gssize string_len, int start_position, MatchFlags match_options)
+  const Glib::ustring& string, gssize string_len, int start_position, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   bool retvalue = g_regex_match_all_full(gobj(), string.c_str(), string_len, start_position,
@@ -199,7 +195,7 @@ Regex::match_all(
 
 Glib::ustring
 Regex::replace(const Glib::ustring& string, int start_position, const Glib::ustring& replacement,
-  MatchFlags match_options)
+  RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   auto retvalue = Glib::convert_return_gchar_ptr_to_ustring(g_regex_replace(gobj(), string.c_str(),
@@ -212,7 +208,7 @@ Regex::replace(const Glib::ustring& string, int start_position, const Glib::ustr
 
 Glib::ustring
 Regex::replace_literal(const Glib::ustring& string, int start_position,
-  const Glib::ustring& replacement, MatchFlags match_options)
+  const Glib::ustring& replacement, RegexMatchFlags match_options)
 {
   GError* gerror = nullptr;
   auto retvalue =
@@ -224,12 +220,12 @@ Regex::replace_literal(const Glib::ustring& string, int start_position,
   return retvalue;
 }
 
-std::vector<Glib::ustring>
-Regex::split(const Glib::ustring& string, int start_position, MatchFlags match_options,
+Glib::StringArrayHandle
+Regex::split(const Glib::ustring& string, int start_position, RegexMatchFlags match_options,
   int max_tokens) const
 {
   GError* gerror = nullptr;
-  auto retvalue = Glib::ArrayHandler<Glib::ustring>::array_to_vector(
+  auto retvalue = Glib::StringArrayHandle(
     g_regex_split_full(const_cast<GRegex*>(gobj()), string.c_str(), -1, start_position,
       ((GRegexMatchFlags)(match_options)), max_tokens, &(gerror)),
     Glib::OWNERSHIP_DEEP);
index 71e2200..de07fab 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -21,8 +20,8 @@ _DEFS(glibmm,glib)
 #include <glibmm/refptr.h>
 #include <glibmm/ustring.h>
 #include <glibmm/error.h>
+#include <glibmm/arrayhandle.h>
 #include <glib.h>
-#include <vector>
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 typedef struct _GRegex GRegex;
@@ -31,6 +30,8 @@ typedef struct _GRegex GRegex;
 namespace Glib
 {
 
+_WRAP_ENUM(RegexCompileFlags, GRegexCompileFlags, NO_GTYPE)
+_WRAP_ENUM(RegexMatchFlags, GRegexMatchFlags, NO_GTYPE)
 
 /** Exception class for Regex
  */
@@ -97,10 +98,7 @@ class Regex final
   _IGNORE(g_regex_ref, g_regex_unref)
 public:
 
-  _WRAP_ENUM(CompileFlags, GRegexCompileFlags, NO_GTYPE)
-  _WRAP_ENUM(MatchFlags, GRegexMatchFlags, NO_GTYPE)
-
-  static Glib::RefPtr<Glib::Regex> create(const Glib::ustring& pattern, CompileFlags compile_options = static_cast<CompileFlags>(0), MatchFlags match_options = static_cast<MatchFlags>(0));
+  static Glib::RefPtr<Glib::Regex> create(const Glib::ustring& pattern, RegexCompileFlags compile_options = static_cast<RegexCompileFlags>(0), RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0));
 
   _WRAP_METHOD(Glib::ustring get_pattern() const, g_regex_get_pattern)
   _WRAP_METHOD(int get_max_backref() const, g_regex_get_max_backref)
@@ -108,29 +106,29 @@ public:
   _WRAP_METHOD(bool get_has_cr_or_lf() const, g_regex_get_has_cr_or_lf)
   _WRAP_METHOD(int get_max_lookbehind() const, g_regex_get_max_lookbehind)
   _WRAP_METHOD(int get_string_number(const Glib::ustring& name) const, g_regex_get_string_number)
-  _WRAP_METHOD(CompileFlags get_compile_flags() const, g_regex_get_compile_flags)
-  _WRAP_METHOD(MatchFlags get_match_flags() const, g_regex_get_match_flags)
+  _WRAP_METHOD(RegexCompileFlags get_compile_flags() const, g_regex_get_compile_flags)
+  _WRAP_METHOD(RegexMatchFlags get_match_flags() const, g_regex_get_match_flags)
 
   static Glib::ustring escape_string(const Glib::ustring& string);
 
-  _WRAP_METHOD(static bool match_simple(const Glib::ustring& pattern, const Glib::ustring& string, CompileFlags compile_options = static_cast<CompileFlags>(0), MatchFlags match_options = static_cast<MatchFlags>(0)), g_regex_match_simple)
+  _WRAP_METHOD(static bool match_simple(const Glib::ustring& pattern, const Glib::ustring& string, RegexCompileFlags compile_options = static_cast<RegexCompileFlags>(0), RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)), g_regex_match_simple)
 
   _WRAP_METHOD_DOCS_ONLY(g_regex_match)
   bool match(
     const Glib::ustring& string,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   /// A match() method not requiring a Glib::MatchInfo.
-  bool match(const Glib::ustring& string, MatchFlags match_options = static_cast<MatchFlags>(0));
+  bool match(const Glib::ustring& string, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0));
 
   /// A match() method with a start position and a Glib::MatchInfo.
   bool match(
     const Glib::ustring& string,
     int start_position,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   _WRAP_METHOD_DOCS_ONLY(g_regex_match_full)
@@ -139,33 +137,33 @@ public:
     gssize string_len,
     int start_position,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   /// A match() method with a start position not requiring a Glib::MatchInfo.
-  bool match(const Glib::ustring& string, int start_position, MatchFlags match_options);
+  bool match(const Glib::ustring& string, int start_position, RegexMatchFlags match_options);
 
   /** A match() method with a string length and start position not requiring a
    * Glib::MatchInfo.
    */
-  bool match(const Glib::ustring& string, gssize string_len, int start_position, MatchFlags match_options);
+  bool match(const Glib::ustring& string, gssize string_len, int start_position, RegexMatchFlags match_options);
 
   _WRAP_METHOD_DOCS_ONLY(g_regex_match_all)
   bool match_all(
     const Glib::ustring& string,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   /// A match_all() method not requiring a Glib::MatchInfo.
-  bool match_all(const Glib::ustring& string, MatchFlags match_options = static_cast<MatchFlags>(0));
+  bool match_all(const Glib::ustring& string, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0));
 
   /// A match_all() method with a start positon and a Glib::MatchInfo.
   bool match_all(
     const Glib::ustring& string,
     int start_position,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   _WRAP_METHOD_DOCS_ONLY(g_regex_match_all_full, errthrow)
@@ -175,34 +173,35 @@ public:
     gssize string_len,
     int start_position,
     Glib::MatchInfo& match_info,
-    MatchFlags match_options = static_cast<MatchFlags>(0)
+    RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)
   );
 
   /** A match_all() method with a start position not requiring a
    * Glib::MatchInfo.
    */
-  bool match_all(const Glib::ustring& string, int start_position, MatchFlags match_options);
+  bool match_all(const Glib::ustring& string, int start_position, RegexMatchFlags match_options);
 
   /** A match_all() method with a start position and a string length not
    * requiring a Glib::MatchInfo.
    */
-  bool match_all(const Glib::ustring& string, gssize string_len, int start_position, MatchFlags match_options);
+  bool match_all(const Glib::ustring& string, gssize string_len, int start_position, RegexMatchFlags match_options);
+
+#m4 _CONVERSION(`gchar**',`Glib::StringArrayHandle',`Glib::StringArrayHandle($3, Glib::OWNERSHIP_DEEP)')
 
-#m4 _CONVERSION(`gchar**',`std::vector<Glib::ustring>',`Glib::ArrayHandler<Glib::ustring>::array_to_vector($3, Glib::OWNERSHIP_DEEP)')
-  _WRAP_METHOD(static std::vector<Glib::ustring> split_simple(const Glib::ustring& pattern, const Glib::ustring& string, CompileFlags compile_options = static_cast<CompileFlags>(0), MatchFlags match_options = static_cast<MatchFlags>(0)), g_regex_split_simple)
-  _WRAP_METHOD(std::vector<Glib::ustring> split(const Glib::ustring& string, MatchFlags match_options = static_cast<MatchFlags>(0)), g_regex_split)
+  _WRAP_METHOD(static Glib::StringArrayHandle split_simple(const Glib::ustring& pattern, const Glib::ustring& string, RegexCompileFlags compile_options = static_cast<RegexCompileFlags>(0), RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)), g_regex_split_simple)
+  _WRAP_METHOD(Glib::StringArrayHandle split(const Glib::ustring& string, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)), g_regex_split)
 
-  _WRAP_METHOD(std::vector<Glib::ustring> split(const gchar* string, gssize string_len, int start_position, MatchFlags match_options = static_cast<MatchFlags>(0), int max_tokens = 0) const, g_regex_split_full, errthrow)
+  _WRAP_METHOD(Glib::StringArrayHandle split(const gchar* string, gssize string_len, int start_position, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0), int max_tokens = 0) const, g_regex_split_full, errthrow)
 
-  std::vector<Glib::ustring> split(const Glib::ustring& string, int start_position, MatchFlags match_options, int max_tokens) const;
+  Glib::StringArrayHandle split(const Glib::ustring& string, int start_position, RegexMatchFlags match_options, int max_tokens) const;
 
-  _WRAP_METHOD(Glib::ustring replace(const gchar* string, gssize string_len, int start_position, const Glib::ustring& replacement, MatchFlags match_options = static_cast<MatchFlags>(0)), g_regex_replace, errthrow)
-  Glib::ustring replace(const Glib::ustring& string, int start_position, const Glib::ustring& replacement, MatchFlags match_options);
+  _WRAP_METHOD(Glib::ustring replace(const gchar* string, gssize string_len, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)), g_regex_replace, errthrow)
+  Glib::ustring replace(const Glib::ustring& string, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options);
 
-  _WRAP_METHOD(Glib::ustring replace_literal(const gchar *string, gssize string_len, int start_position, const Glib::ustring& replacement, MatchFlags match_options = static_cast<MatchFlags>(0)), g_regex_replace_literal, errthrow)
-  Glib::ustring replace_literal(const Glib::ustring& string, int start_position, const Glib::ustring& replacement, MatchFlags match_options);
+  _WRAP_METHOD(Glib::ustring replace_literal(const gchar *string, gssize string_len, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options = static_cast<RegexMatchFlags>(0)), g_regex_replace_literal, errthrow)
+  Glib::ustring replace_literal(const Glib::ustring& string, int start_position, const Glib::ustring& replacement, RegexMatchFlags match_options);
 
-  _WRAP_METHOD(Glib::ustring replace_eval(const Glib::ustring& string, gssize string_len, int start_position, MatchFlags match_options, GRegexEvalCallback eval,  gpointer user_data), g_regex_replace_eval, errthrow)
+  _WRAP_METHOD(Glib::ustring replace_eval(const Glib::ustring& string, gssize string_len, int start_position, RegexMatchFlags match_options, GRegexEvalCallback eval,  gpointer user_data), g_regex_replace_eval, errthrow)
   _WRAP_METHOD(static bool check_replacement(const Glib::ustring& replacement, gboolean* has_references), g_regex_check_replacement, errthrow)
 };
 
@@ -271,7 +270,7 @@ public:
 
   _WRAP_METHOD(bool fetch_named_pos(const Glib::ustring& name, int& start_pos, int& end_pos), g_match_info_fetch_named_pos)
 
-  _WRAP_METHOD(std::vector<Glib::ustring> fetch_all(), g_match_info_fetch_all)
+  _WRAP_METHOD(Glib::StringArrayHandle fetch_all(), g_match_info_fetch_all)
 
 protected:
   GMatchInfo* gobject_;      // The C object.
index 10b4b4f..901a63b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
@@ -22,7 +21,7 @@ namespace Glib
 
 /**** shell utility functions **********************************************/
 
-std::vector<std::string>
+Glib::ArrayHandle<std::string>
 shell_parse_argv(const std::string& command_line)
 {
   char** argv = nullptr;
@@ -34,7 +33,7 @@ shell_parse_argv(const std::string& command_line)
   if (error)
     Glib::Error::throw_exception(error);
 
-  return Glib::ArrayHandler<std::string>::array_to_vector(argv, argc, Glib::OWNERSHIP_DEEP);
+  return Glib::ArrayHandle<std::string>(argv, argc, Glib::OWNERSHIP_DEEP);
 }
 
 std::string
index 8b3b91e..6f0e2fc 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
 
+#include <glibmm/arrayhandle.h>
 #include <glibmm/error.h>
 #include <glib.h>
 #include <string>
-#include <vector>
 
 namespace Glib
 {
@@ -47,7 +46,7 @@ _WRAP_GERROR(ShellError, GShellError, G_SHELL_ERROR, NO_GTYPE)
  * converted to any STL compatible container type).
  * @throw Glib::ShellError
  */
-std::vector<std::string> shell_parse_argv(const std::string& command_line);
+Glib::ArrayHandle<std::string> shell_parse_argv(const std::string& command_line);
 
 /** Quotes a string so that the shell (/bin/sh) will interpret the quoted
  * string to mean @a unquoted_string.  If you pass a filename to the shell,
index 74c8016..221c4da 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
@@ -64,7 +63,7 @@ namespace Glib
 
 void
 spawn_async_with_pipes(const std::string& working_directory,
-  const std::vector<std::string>& argv, const std::vector<std::string>& envp,
+  const Glib::ArrayHandle<std::string>& argv, const Glib::ArrayHandle<std::string>& envp,
   SpawnFlags flags, const SlotSpawnChildSetup& child_setup, Pid* child_pid, int* standard_input,
   int* standard_output, int* standard_error)
 {
@@ -73,7 +72,7 @@ spawn_async_with_pipes(const std::string& working_directory,
   GError* gerror = nullptr;
 
   g_spawn_async_with_pipes(Glib::c_str_or_nullptr(working_directory),
-    const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(envp).data()),
+    const_cast<char**>(argv.data()), const_cast<char**>(envp.data()),
     static_cast<GSpawnFlags>(unsigned(flags)), (setup_slot) ? &child_setup_callback : nullptr,
     (setup_slot) ? &child_setup_ : nullptr, child_pid, standard_input, standard_output,
     standard_error, &gerror);
@@ -84,7 +83,7 @@ spawn_async_with_pipes(const std::string& working_directory,
 
 void
 spawn_async_with_pipes(const std::string& working_directory,
-  const std::vector<std::string>& argv, SpawnFlags flags,
+  const Glib::ArrayHandle<std::string>& argv, SpawnFlags flags,
   const SlotSpawnChildSetup& child_setup, Pid* child_pid, int* standard_input, int* standard_output,
   int* standard_error)
 {
@@ -93,7 +92,7 @@ spawn_async_with_pipes(const std::string& working_directory,
   GError* gerror = nullptr;
 
   g_spawn_async_with_pipes(Glib::c_str_or_nullptr(working_directory),
-    const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()), nullptr, static_cast<GSpawnFlags>(unsigned(flags)),
+    const_cast<char**>(argv.data()), nullptr, static_cast<GSpawnFlags>(unsigned(flags)),
     (setup_slot) ? &child_setup_callback : nullptr, (setup_slot) ? &child_setup_ : nullptr,
     child_pid, standard_input, standard_output, standard_error, &gerror);
 
@@ -102,16 +101,16 @@ spawn_async_with_pipes(const std::string& working_directory,
 }
 
 void
-spawn_async(const std::string& working_directory, const std::vector<std::string>& argv,
-  const std::vector<std::string>& envp, SpawnFlags flags,
+spawn_async(const std::string& working_directory, const Glib::ArrayHandle<std::string>& argv,
+  const Glib::ArrayHandle<std::string>& envp, SpawnFlags flags,
   const SlotSpawnChildSetup& child_setup, Pid* child_pid)
 {
   const bool setup_slot = !child_setup.empty();
   auto child_setup_ = child_setup;
   GError* gerror = nullptr;
 
-  g_spawn_async(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()),
-    const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(envp).data()), static_cast<GSpawnFlags>(unsigned(flags)),
+  g_spawn_async(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(argv.data()),
+    const_cast<char**>(envp.data()), static_cast<GSpawnFlags>(unsigned(flags)),
     (setup_slot) ? &child_setup_callback : nullptr, (setup_slot) ? &child_setup_ : nullptr,
     child_pid, &gerror);
 
@@ -120,14 +119,14 @@ spawn_async(const std::string& working_directory, const std::vector<std::string>
 }
 
 void
-spawn_async(const std::string& working_directory, const std::vector<std::string>& argv,
+spawn_async(const std::string& working_directory, const Glib::ArrayHandle<std::string>& argv,
   SpawnFlags flags, const SlotSpawnChildSetup& child_setup, Pid* child_pid)
 {
   const bool setup_slot = !child_setup.empty();
   auto child_setup_ = child_setup;
   GError* gerror = nullptr;
 
-  g_spawn_async(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()), nullptr,
+  g_spawn_async(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(argv.data()), nullptr,
     static_cast<GSpawnFlags>(unsigned(flags)), (setup_slot) ? &child_setup_callback : nullptr,
     (setup_slot) ? &child_setup_ : nullptr, child_pid, &gerror);
 
@@ -136,8 +135,8 @@ spawn_async(const std::string& working_directory, const std::vector<std::string>
 }
 
 void
-spawn_sync(const std::string& working_directory, const std::vector<std::string>& argv,
-  const std::vector<std::string>& envp, SpawnFlags flags,
+spawn_sync(const std::string& working_directory, const Glib::ArrayHandle<std::string>& argv,
+  const Glib::ArrayHandle<std::string>& envp, SpawnFlags flags,
   const SlotSpawnChildSetup& child_setup, std::string* standard_output, std::string* standard_error,
   int* exit_status)
 {
@@ -147,8 +146,8 @@ spawn_sync(const std::string& working_directory, const std::vector<std::string>&
   GError* gerror = nullptr;
   char* pch_buf_standard_output = nullptr;
   char* pch_buf_standard_error = nullptr;
-  g_spawn_sync(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()),
-    const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(envp).data()), static_cast<GSpawnFlags>(unsigned(flags)),
+  g_spawn_sync(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(argv.data()),
+    const_cast<char**>(envp.data()), static_cast<GSpawnFlags>(unsigned(flags)),
     (setup_slot) ? &child_setup_callback : nullptr, (setup_slot) ? &child_setup_ : nullptr,
     (standard_output) ? &pch_buf_standard_output : nullptr,
     (standard_error) ? &pch_buf_standard_error : nullptr, exit_status, &gerror);
@@ -163,7 +162,7 @@ spawn_sync(const std::string& working_directory, const std::vector<std::string>&
 }
 
 void
-spawn_sync(const std::string& working_directory, const std::vector<std::string>& argv,
+spawn_sync(const std::string& working_directory, const Glib::ArrayHandle<std::string>& argv,
   SpawnFlags flags, const SlotSpawnChildSetup& child_setup, std::string* standard_output,
   std::string* standard_error, int* exit_status)
 {
@@ -174,7 +173,7 @@ spawn_sync(const std::string& working_directory, const std::vector<std::string>&
   char* pch_buf_standard_error = nullptr;
   GError* gerror = nullptr;
 
-  g_spawn_sync(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(Glib::ArrayHandler<std::string>::vector_to_array(argv).data()), nullptr,
+  g_spawn_sync(Glib::c_str_or_nullptr(working_directory), const_cast<char**>(argv.data()), nullptr,
     static_cast<GSpawnFlags>(unsigned(flags)), (setup_slot) ? &child_setup_callback : nullptr,
     (setup_slot) ? &child_setup_ : nullptr, (standard_output) ? &pch_buf_standard_output : nullptr,
     (standard_error) ? &pch_buf_standard_error : nullptr, exit_status, &gerror);
index 85d7ed2..f0a8506 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
 
 #include <glibmmconfig.h>
+#include <glibmm/arrayhandle.h>
 #include <glibmm/error.h>
 #include <sigc++/sigc++.h>
 #include <string>
-#include <vector>
 
 namespace Glib
 {
@@ -42,7 +41,7 @@ _WRAP_GERROR(SpawnError, GSpawnError, G_SPAWN_ERROR, NO_GTYPE, s#^2BIG$#TOOBIG#)
 /** For instance,<br>
  *   void on_child_setup();
  */
-using SlotSpawnChildSetup = sigc::slot<void()>;
+using SlotSpawnChildSetup = sigc::slot<void>;
 
 /** Executes a child program asynchronously (your program will not
  * block waiting for the child to exit). The child program is
@@ -50,7 +49,7 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * The first string in @a argv is of
  * course the name of the program to execute. By default, the name of
  * the program must be a full path; the PATH shell variable
- * will only be searched if you pass the SpawnFlags::SEARCH_PATH flag.
+ * will only be searched if you pass the SPAWN_SEARCH_PATH flag.
  *
  * On Windows, note that all the string or string vector arguments to
  * this function and the other spawn*() functions are in UTF-8, the
@@ -92,7 +91,7 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * the child's environment.
  *
  * @a flags should be the bitwise OR of any flags you want to affect the
- * function's behaviour. The SpawnFlags::DO_NOT_REAP_CHILD flags means that
+ * function's behaviour. The SPAWN_DO_NOT_REAP_CHILD flags means that
  * the child will not automatically be reaped; you must use a
  * ChildWatch source to be notified about the death of the child
  * process. Eventually you must call spawn_close_pid() on the
@@ -106,19 +105,19 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * PAWN_LEAVE_DESCRIPTORS_OPEN means that the parent's open file
  * descriptors will be inherited by the child; otherwise all
  * descriptors except stdin/stdout/stderr will be closed before
- * calling exec() in the child. SpawnFlags::SEARCH_PATH
+ * calling exec() in the child. SPAWN_SEARCH_PATH
  * means that argv[0] need not be an absolute path, it
  * will be looked for in the user's PATH.
- * SpawnFlags::STDOUT_TO_DEV_NULL means that the child's standard output will
+ * SPAWN_STDOUT_TO_DEV_NULL means that the child's standard output will
  * be discarded, instead of going to the same location as the parent's
  * standard output. If you use this flag, @a standard_output must be nullptr.
- * SpawnFlags::STDERR_TO_DEV_NULL means that the child's standard error
+ * SPAWN_STDERR_TO_DEV_NULL means that the child's standard error
  * will be discarded, instead of going to the same location as the parent's
  * standard error. If you use this flag, @a standard_error must be nullptr.
- * SpawnFlags::CHILD_INHERITS_STDIN means that the child will inherit the parent's
+ * SPAWN_CHILD_INHERITS_STDIN means that the child will inherit the parent's
  * standard input (by default, the child's standard input is attached to
  * /dev/null). If you use this flag, @a standard_input must be nullptr.
- * SpawnFlags::FILE_AND_ARGV_ZERO means that the first element of @a argv is
+ * G_SPAWN_FILE_AND_ARGV_ZERO means that the first element of @a argv is
  * the file to execute, while the remaining elements are the
  * actual argument vector to pass to the file. Normally
  * spawn_async_with_pipes() uses argv[0] as the file to execute, and
@@ -141,9 +140,9 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * If non-nullptr, @a child_pid will on Unix be filled with the child's
  * process ID. You can use the process ID to send signals to the
  * child, or to use child_watch_add() (or waitpid()) if you specified the
- * SpawnFlags::DO_NOT_REAP_CHILD flag. On Windows, @a child_pid will be
+ * SPAWN_DO_NOT_REAP_CHILD flag. On Windows, @a child_pid will be
  * filled with a handle to the child process only if you specified the
- * SpawnFlags::DO_NOT_REAP_CHILD flag. You can then access the child
+ * SPAWN_DO_NOT_REAP_CHILD flag. You can then access the child
  * process using the Win32 API, for example wait for its termination
  * with the WaitFor*() functions, or examine its
  * exit code with GetExitCodeProcess(). You should close the handle
@@ -157,14 +156,14 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * pipe won't be created.
  *
  * If @a standard_input is nullptr, the child's standard input is attached to
- * /dev/null unless SpawnFlags::CHILD_INHERITS_STDIN is set.
+ * /dev/null unless SPAWN_CHILD_INHERITS_STDIN is set.
  *
  * If @a standard_error is nullptr, the child's standard error goes to the same
- * location as the parent's standard error unless SpawnFlags::STDERR_TO_DEV_NULL
+ * location as the parent's standard error unless SPAWN_STDERR_TO_DEV_NULL
  * is set.
  *
  * If @a standard_output is nullptr, the child's standard output goes to the same
- * location as the parent's standard output unless SpawnFlags::STDOUT_TO_DEV_NULL
+ * location as the parent's standard output unless SPAWN_STDOUT_TO_DEV_NULL
  * is set.
  *
  * If @a child_pid is not nullptr and an error does not occur then the returned
@@ -193,9 +192,9 @@ using SlotSpawnChildSetup = sigc::slot<void()>;
  * and @a standard_error will not be filled with valid values.
  */
 void spawn_async_with_pipes(const std::string& working_directory,
-                            const std::vector<std::string>& argv,
-                            const std::vector<std::string>& envp,
-                            SpawnFlags flags = SpawnFlags::DEFAULT,
+                            const Glib::ArrayHandle<std::string>& argv,
+                            const Glib::ArrayHandle<std::string>& envp,
+                            SpawnFlags flags = SPAWN_DEFAULT,
                             const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                             Pid* child_pid = nullptr,
                             int* standard_input = nullptr,
@@ -220,8 +219,8 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * and @a standard_error will not be filled with valid values.
  */
 void spawn_async_with_pipes(const std::string& working_directory,
-                            const std::vector<std::string>& argv,
-                            SpawnFlags flags = SpawnFlags::DEFAULT,
+                            const Glib::ArrayHandle<std::string>& argv,
+                            SpawnFlags flags = SPAWN_DEFAULT,
                             const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                             Pid* child_pid = nullptr,
                             int* standard_input = nullptr,
@@ -250,9 +249,9 @@ void spawn_async_with_pipes(const std::string& working_directory,
  * to users.
  */
 void spawn_async(const std::string& working_directory,
-                 const std::vector<std::string>& argv,
-                 const std::vector<std::string>& envp,
-                 SpawnFlags flags = SpawnFlags::DEFAULT,
+                 const Glib::ArrayHandle<std::string>& argv,
+                 const Glib::ArrayHandle<std::string>& envp,
+                 SpawnFlags flags = SPAWN_DEFAULT,
                  const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                  Pid* child_pid = nullptr);
 
@@ -270,21 +269,21 @@ void spawn_async(const std::string& working_directory,
  * to users.
  */
 void spawn_async(const std::string& working_directory,
-                 const std::vector<std::string>& argv,
-                 SpawnFlags flags = SpawnFlags::DEFAULT,
+                 const Glib::ArrayHandle<std::string>& argv,
+                 SpawnFlags flags = SPAWN_DEFAULT,
                  const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                  Pid* child_pid = nullptr);
 
 /** Executes a child synchronously (waits for the child to exit before returning).
  * All output from the child is stored in @a standard_output and @a standard_error,
  * if those parameters are non-nullptr. Note that you must set the
- * SpawnFlags::STDOUT_TO_DEV_NULL and SpawnFlags::STDERR_TO_DEV_NULL flags when
+ * SPAWN_STDOUT_TO_DEV_NULL and SPAWN_STDERR_TO_DEV_NULL flags when
  * passing nullptr for @a standard_output and @a standard_error.
  * If @a exit_status is non-nullptr, the exit status of the child is stored
  * there as it would be returned by waitpid(); standard UNIX macros such
  * as WIFEXITED() and WEXITSTATUS() must be used to evaluate the exit status.
  * Note that this function calls waitpid() even if @a exit_status is nullptr, and
- * does not accept the SpawnFlags::DO_NOT_REAP_CHILD flag.
+ * does not accept the SPAWN_DO_NOT_REAP_CHILD flag.
  * If an error occurs, no data is returned in @a standard_output,
  * @a standard_error, or @a exit_status.
  *
@@ -308,9 +307,9 @@ void spawn_async(const std::string& working_directory,
  * and @a standard_error will not be filled with valid values.
  */
 void spawn_sync(const std::string& working_directory,
-                const std::vector<std::string>& argv,
-                const std::vector<std::string>& envp,
-                SpawnFlags flags = SpawnFlags::DEFAULT,
+                const Glib::ArrayHandle<std::string>& argv,
+                const Glib::ArrayHandle<std::string>& envp,
+                SpawnFlags flags = SPAWN_DEFAULT,
                 const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                 std::string* standard_output = nullptr,
                 std::string* standard_error = nullptr,
@@ -333,8 +332,8 @@ void spawn_sync(const std::string& working_directory,
  * and @a standard_error will not be filled with valid values.
  */
 void spawn_sync(const std::string& working_directory,
-                const std::vector<std::string>& argv,
-                SpawnFlags flags = SpawnFlags::DEFAULT,
+                const Glib::ArrayHandle<std::string>& argv,
+                SpawnFlags flags = SPAWN_DEFAULT,
                 const SlotSpawnChildSetup& child_setup = SlotSpawnChildSetup(),
                 std::string* standard_output = nullptr,
                 std::string* standard_error = nullptr,
@@ -343,8 +342,8 @@ void spawn_sync(const std::string& working_directory,
 /** A simple version of spawn_async() that parses a command line with
  * shell_parse_argv() and passes it to spawn_async(). It runs a
  * command line in the background. Unlike spawn_async(), the
- * SpawnFlags::SEARCH_PATH flag is enabled, other flags are not. Note
- * that SpawnFlags::SEARCH_PATH can have security implications, so
+ * SPAWN_SEARCH_PATH flag is enabled, other flags are not. Note
+ * that SPAWN_SEARCH_PATH can have security implications, so
  * consider using spawn_async() directly if appropriate.
  *
  * The same concerns on Windows apply as for spawn_command_line_sync().
@@ -362,8 +361,8 @@ void spawn_command_line_async(const std::string& command_line);
 /** A simple version of spawn_sync() with little-used parameters
  * removed, taking a command line instead of an argument vector.  See
  * spawn_sync() for full details. @a command_line will be parsed by
- * shell_parse_argv(). Unlike spawn_sync(), the SpawnFlags::SEARCH_PATH flag
- * is enabled. Note that SpawnFlags::SEARCH_PATH can have security
+ * shell_parse_argv(). Unlike spawn_sync(), the SPAWN_SEARCH_PATH flag
+ * is enabled. Note that SPAWN_SEARCH_PATH can have security
  * implications, so consider using spawn_sync() directly if
  * appropriate.
  *
index 1a24059..5679546 100644 (file)
@@ -17,8 +17,7 @@ dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 dnl  Lesser General Public License for more details.
 dnl
 dnl  You should have received a copy of the GNU Lesser General Public
-dnl  License along with this library; if not, write to the Free
-dnl  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+dnl  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 dnl
 dnl-----------------------------------------------------------------------
 dnl  Recursion prevention.  (Don't attempt to understand why this works!)
diff --git a/glib/src/thread.ccg b/glib/src/thread.ccg
new file mode 100644 (file)
index 0000000..d6e81cf
--- /dev/null
@@ -0,0 +1,426 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/exceptionhandler.h>
+#include <glib.h>
+
+namespace
+{
+
+extern "C" {
+
+static void*
+call_thread_entry_slot(void* data)
+{
+  const auto slot = reinterpret_cast<sigc::slot_base*>(data);
+
+  try
+  {
+    // Recreate the specific slot, and drop the reference obtained by create().
+    (*static_cast<sigc::slot<void>*>(slot))();
+  }
+  catch (Glib::Thread::Exit&)
+  {
+    // Just exit from the thread.  The Thread::Exit exception
+    // is our sane C++ replacement of g_thread_exit().
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  delete slot;
+  return nullptr;
+}
+
+} // extern "C"
+
+} // anonymous namespace
+
+namespace Glib
+{
+
+// This was always meant as an internal method. It is no longer called,
+// and no longer needs to be called. We are keeping it just to avoid
+// breaking ABI, though hopefully nobody is using it anyway.
+// TODO: Remove this when we can break ABI.
+void
+thread_init_impl()
+{
+  // Make sure the exception map is initialized before creating any thread.
+  Glib::Error::register_init();
+}
+
+/**** Glib::Thread *********************************************************/
+
+// static
+Thread*
+Thread::create(const sigc::slot<void>& slot, bool /* joinable */)
+{
+  // Make a copy of slot on the heap
+  const auto slot_copy = new sigc::slot<void>(slot);
+
+  GError* error = nullptr;
+
+  const auto thread = g_thread_try_new(nullptr, &call_thread_entry_slot, slot_copy, &error);
+
+  if (error)
+  {
+    delete slot_copy;
+    // Glib::Error::throw_exception() will probably wrap G_THREAD_ERROR in a
+    // Glib::Threads::ThreadError instance, but we want a Glib::ThreadError.
+    if (error->domain == G_THREAD_ERROR)
+      throw Glib::ThreadError(error);
+    else
+      Glib::Error::throw_exception(error);
+  }
+
+  return reinterpret_cast<Thread*>(thread);
+}
+
+// static
+Thread*
+Thread::create(const sigc::slot<void>& slot, unsigned long stack_size, bool joinable, bool bound,
+  ThreadPriority priority)
+{
+  // Make a copy of slot on the heap
+  const auto slot_copy = new sigc::slot<void>(slot);
+
+  GError* error = nullptr;
+
+  const auto thread = g_thread_create_full(&call_thread_entry_slot, slot_copy, stack_size, joinable,
+    bound, (GThreadPriority)priority, &error);
+
+  if (error)
+  {
+    delete slot_copy;
+    // Glib::Error::throw_exception() will probably wrap G_THREAD_ERROR in a
+    // Glib::Threads::ThreadError instance, but we want a Glib::ThreadError.
+    if (error->domain == G_THREAD_ERROR)
+      throw Glib::ThreadError(error);
+    else
+      Glib::Error::throw_exception(error);
+  }
+
+  return reinterpret_cast<Thread*>(thread);
+}
+
+// static
+Thread*
+Thread::self()
+{
+  return reinterpret_cast<Thread*>(g_thread_self());
+}
+
+void
+Thread::join()
+{
+  g_thread_join(&gobject_);
+}
+
+bool
+Thread::joinable() const
+{
+  return true; // An appropriate result now that this is deprecated because all threads are now
+               // joinable.
+}
+
+void
+Thread::set_priority(ThreadPriority priority)
+{
+  g_thread_set_priority(&gobject_, (GThreadPriority)priority);
+}
+
+ThreadPriority
+Thread::get_priority() const
+{
+  return THREAD_PRIORITY_NORMAL; // An appropriate result now that this is deprecated because the
+                                 // priority concept has been removed.
+}
+
+void
+thread_init(GThreadFunctions* /* vtable */)
+{
+  // g_thread_init() is deprecated and now does nothing,
+  // so we do not even call it. That avoids a need to link to gthread-2.0,
+  // which contains the empty g_thread_init() implementation.
+  // g_thread_init(vtable);
+
+  Glib::thread_init_impl();
+}
+
+bool
+thread_supported()
+{
+  // MSVC++ needs the != 0 to avoid an int -> bool cast warning.
+  return (g_thread_supported() != 0);
+}
+
+// static
+void
+Thread::yield()
+{
+  g_thread_yield();
+}
+
+Thread*
+wrap(GThread* gobject)
+{
+  return reinterpret_cast<Thread*>(gobject);
+}
+
+/**** Glib::StaticMutex ****************************************************/
+
+void
+StaticMutex::lock()
+{
+  g_static_mutex_lock(&gobject_);
+}
+
+bool
+StaticMutex::trylock()
+{
+  return g_static_mutex_trylock(&gobject_);
+}
+
+void
+StaticMutex::unlock()
+{
+  g_static_mutex_unlock(&gobject_);
+}
+
+StaticMutex::operator Mutex&()
+{
+  // If GStaticMutex is implemented as struct (e.g. on Linux), its first struct
+  // member (runtime_mutex) is a GMutex pointer.  If the gthread implementation
+  // is native (i.e. the vtable pointer passed to g_thread_init() was 0), then
+  // the runtime_mutex pointer is unused, and the rest of the GStaticMutex
+  // struct resembles the mutex data.
+  //
+  // On Win32, GStaticMutex is just a typedef to struct _GMutex*.  Either way,
+  // the first sizeof(GMutex*) bytes of GStaticMutex always resemble a GMutex
+  // pointer.  The gthread implementation relies on that, and we'll also do so.
+
+  GMutex*& runtime_mutex = reinterpret_cast<GMutex*&>(gobject_);
+
+  // Fortunately, it cannot hurt if we set this to the GMutex pointer returned
+  // by g_static_mutex_get_mutex().  Either we just overwrite it with the same
+  // value, or it was unused anyway.  Doing that allows casting the pointer
+  // location to a Glib::Mutex reference (its only data member is a GMutex*).
+
+  runtime_mutex = g_static_mutex_get_mutex(&gobject_);
+
+  return reinterpret_cast<Mutex&>(runtime_mutex);
+}
+
+/**** Glib::Mutex **********************************************************/
+
+Mutex::Mutex()
+: gobject_(g_mutex_new()) // TODO: Use a statically-allocated GMutext instead, with g_mutex_init().
+{
+}
+
+Mutex::~Mutex()
+{
+  g_mutex_free(gobject_);
+}
+
+void
+Mutex::lock()
+{
+  g_mutex_lock(gobject_);
+}
+
+bool
+Mutex::trylock()
+{
+  return g_mutex_trylock(gobject_);
+}
+
+void
+Mutex::unlock()
+{
+  g_mutex_unlock(gobject_);
+}
+
+/**** Glib::StaticRecMutex *************************************************/
+
+void
+StaticRecMutex::lock()
+{
+  g_static_rec_mutex_lock(&gobject_);
+}
+
+bool
+StaticRecMutex::trylock()
+{
+  return g_static_rec_mutex_trylock(&gobject_);
+}
+
+void
+StaticRecMutex::unlock()
+{
+  g_static_rec_mutex_unlock(&gobject_);
+}
+
+void
+StaticRecMutex::lock_full(unsigned int depth)
+{
+  g_static_rec_mutex_lock_full(&gobject_, depth);
+}
+
+unsigned int
+StaticRecMutex::unlock_full()
+{
+  return g_static_rec_mutex_unlock_full(&gobject_);
+}
+
+StaticRecMutex::operator RecMutex&()
+{
+  return static_cast<RecMutex&>(*this);
+}
+
+/**** Glib::RecMutex *******************************************************/
+
+RecMutex::RecMutex()
+{
+  g_static_rec_mutex_init(&gobject_);
+}
+
+RecMutex::~RecMutex()
+{
+  g_static_rec_mutex_free(&gobject_);
+}
+
+/**** Glib::StaticRWLock ***************************************************/
+
+void
+StaticRWLock::reader_lock()
+{
+  g_static_rw_lock_reader_lock(&gobject_);
+}
+
+bool
+StaticRWLock::reader_trylock()
+{
+  return g_static_rw_lock_reader_trylock(&gobject_);
+}
+
+void
+StaticRWLock::reader_unlock()
+{
+  g_static_rw_lock_reader_unlock(&gobject_);
+}
+
+void
+StaticRWLock::writer_lock()
+{
+  g_static_rw_lock_writer_lock(&gobject_);
+}
+
+bool
+StaticRWLock::writer_trylock()
+{
+  return g_static_rw_lock_writer_trylock(&gobject_);
+}
+
+void
+StaticRWLock::writer_unlock()
+{
+  g_static_rw_lock_writer_unlock(&gobject_);
+}
+
+StaticRWLock::operator RWLock&()
+{
+  return static_cast<RWLock&>(*this);
+}
+
+/**** Glib::RWLock *********************************************************/
+
+RWLock::RWLock()
+{
+  g_static_rw_lock_init(&gobject_);
+
+  // GLib doesn't have GRWLock, only GStaticRWLock.  Force initialization
+  // of the mutex and the condition variables now, to mimic the behaviour
+  // of a (hypothetical) GRWLock.
+
+  if (g_static_mutex_get_mutex(&gobject_.mutex))
+  {
+    gobject_.read_cond = g_cond_new();
+    gobject_.write_cond = g_cond_new();
+  }
+}
+
+RWLock::~RWLock()
+{
+  g_static_rw_lock_free(&gobject_);
+}
+
+/**** Glib::Cond ***********************************************************/
+
+Cond::Cond() : gobject_(g_cond_new())
+{
+}
+
+Cond::~Cond()
+{
+  g_cond_free(gobject_);
+}
+
+void
+Cond::signal()
+{
+  g_cond_signal(gobject_);
+}
+
+void
+Cond::broadcast()
+{
+  g_cond_broadcast(gobject_);
+}
+
+void
+Cond::wait(Mutex& mutex)
+{
+  g_cond_wait(gobject_, mutex.gobj());
+}
+
+bool
+Cond::timed_wait(Mutex& mutex, const Glib::TimeVal& abs_time)
+{
+  return g_cond_timed_wait(gobject_, mutex.gobj(), const_cast<Glib::TimeVal*>(&abs_time));
+}
+
+void*
+StaticPrivate_get_helper(GStaticPrivate* private_key)
+{
+  return g_static_private_get(private_key);
+}
+
+void
+StaticPrivate_set_helper(GStaticPrivate* private_key, gpointer data, GDestroyNotify notify)
+{
+  return g_static_private_set(private_key, data, notify);
+}
+
+GPrivate*
+GPrivate_new_helper(GDestroyNotify notify)
+{
+  return g_private_new(notify);
+}
+
+} // namespace Glib
diff --git a/glib/src/thread.hg b/glib/src/thread.hg
new file mode 100644 (file)
index 0000000..8763f87
--- /dev/null
@@ -0,0 +1,1084 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+_DEFS(glibmm,glib)
+_CONFIGINCLUDE(glibmmconfig.h)
+
+_IS_DEPRECATED // This whole file is deprecated.
+
+#m4 _PUSH(SECTION_CC_PRE_INCLUDES)
+//Stop the compiler warnings about using the deprecated API;
+#define GLIB_DISABLE_DEPRECATION_WARNINGS 1
+#m4 _POP()
+
+// We use GThreadFunctions in the (deprecated) API, so we must temporarily undef G_DISABLE_DEPRECATED.
+// Temporarily undef G_DISABLE_DEPRECATED, redefining it later if appropriate.
+#if defined(G_DISABLE_DEPRECATED) && !defined(GLIBMM_G_DISABLE_DEPRECATED_UNDEFED)
+//Stop the deprecation ifdef guards around the API declarations:
+#undef G_DISABLE_DEPRECATED
+#define GLIBMM_G_DISABLE_DEPRECATED_UNDEFED 1
+#endif
+
+#include <glib.h>
+
+// Redefine G_DISABLE_DEPRECATED if it was defined before we temporarily undefed it:
+#if defined(GLIBMM_G_DISABLE_DEPRECATED_UNDEFED)
+#define G_DISABLE_DEPRECATED 1
+#undef GLIBMM_G_DISABLE_DEPRECATED_UNDEFED
+#endif
+
+
+#include <glibmm/error.h>
+#include <glibmm/timeval.h>
+#include <sigc++/sigc++.h>
+
+#include <cstddef>
+
+/* Shadow THREAD_PRIORITY_NORMAL macro (from winbase.h).
+ */
+#if defined(THREAD_PRIORITY_NORMAL) && !defined(GLIBMM_MACRO_SHADOW_THREAD_PRIORITY_NORMAL)
+enum { GLIBMM_MACRO_DEFINITION_THREAD_PRIORITY_NORMAL = THREAD_PRIORITY_NORMAL };
+#undef THREAD_PRIORITY_NORMAL
+enum { THREAD_PRIORITY_NORMAL = GLIBMM_MACRO_DEFINITION_THREAD_PRIORITY_NORMAL };
+#define THREAD_PRIORITY_NORMAL THREAD_PRIORITY_NORMAL
+#define GLIBMM_MACRO_SHADOW_THREAD_PRIORITY_NORMAL 1
+#endif
+
+
+/** Initializer macro for Glib::StaticRecMutex.
+ * @relates Glib::StaticRecMutex
+ * @hideinitializer
+ *
+ * @deprecated Glib::StaticRecMutex is deprecated in favour of Glib::Threads::RecMutex, which can be used statically.
+ */
+#define GLIBMM_STATIC_REC_MUTEX_INIT { G_STATIC_REC_MUTEX_INIT }
+
+/** Initializer macro for Glib::StaticRWLock.
+ * @relates Glib::StaticRWLock
+ * @hideinitializer
+ *
+ * @deprecated Glib::StaticRWLock is deprecated in favour of Glib::Threads::RWLock, which can be used statically.
+ */
+#define GLIBMM_STATIC_RW_LOCK_INIT { G_STATIC_RW_LOCK_INIT }
+
+/** Initializer macro for Glib::StaticPrivate.
+ * @relates Glib::StaticPrivate
+ * @hideinitializer
+ *
+ * @deprecated Glib::StaticPrivate is deprecated in favour of Glib::Threads::Private, which can be used statically.
+ */
+#define GLIBMM_STATIC_PRIVATE_INIT { G_STATIC_PRIVATE_INIT }
+
+namespace Glib
+{
+
+/** @deprecated Thread priorities no longer have any effect.
+ */
+_WRAP_ENUM(ThreadPriority, GThreadPriority, NO_GTYPE)
+
+/*! @var ThreadPriority THREAD_PRIORITY_LOW
+ * A priority lower than normal.
+ */
+/*! @var ThreadPriority THREAD_PRIORITY_NORMAL
+ * The default priority.
+ */
+/*! @var ThreadPriority THREAD_PRIORITY_HIGH
+ * A priority higher than normal.
+ */
+/*! @var ThreadPriority THREAD_PRIORITY_URGENT
+ * The highest priority.
+ */
+
+/** Initializes the GLib thread system.
+ * @deprecated Calling thread_init() is no longer necessary and no longer has any effect.
+ */
+void thread_init(GThreadFunctions* vtable = nullptr);
+
+/** Returns whether the thread system is initialized.
+ * @return @c true, if the thread system is initialized.
+ * @deprecated This is no longer useful, because the thread system is always initialized.
+ */
+bool thread_supported();
+
+/**
+ * @deprecated Use Glib::Threads::NotLock instead.
+ */
+enum NotLock { NOT_LOCK };
+
+/**
+ * @deprecated Use Glib::Threads::TryLock instead.
+ */
+enum TryLock { TRY_LOCK };
+
+class Mutex;
+class RecMutex;
+class RWLock;
+
+struct StaticRecMutex;
+struct StaticRWLock;
+
+
+/** Exception class for thread-related errors.
+ * @deprecated Use Glib::Threads::ThreadError instead.
+ */
+_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
+
+
+/** Represents a running thread.
+ * An instance of this class can only be obtained with create(), self(),
+ * or wrap(GThread*).  It's not possible to delete a Thread object.  If the
+ * thread is @em not joinable, its resources will be freed automatically
+ * when it exits.  Otherwise, if the thread @em is joinable, you must call
+ * join() to avoid a memory leak.
+ *
+ * @note g_thread_exit() is not wrapped, because that function exits a thread
+ * without any cleanup.  That's especially dangerous in C++ code, since the
+ * destructors of automatic objects won't be invoked.  Instead, you can throw
+ * a Thread::Exit exception, which will be caught by the internal thread
+ * entry function.
+ *
+ * @note You might have noticed that the thread entry slot doesn't have the
+ * usual void* return value.  If you want to return any data from your thread
+ * you can pass an additional output argument to the thread's entry slot.
+ *
+ * @deprecated Use Glib::Threads::Thread instead.
+ */
+class Thread
+{
+public:
+
+  Thread(const Thread&) = delete;
+  Thread& operator=(const Thread&) = delete;
+
+  class Exit;
+
+  //See http://bugzilla.gnome.org/show_bug.cgi?id=512348 about the sigc::trackable issue.
+  /** Creates a new thread with the priority <tt>THREAD_PRIORITY_NORMAL</tt>.
+   * If @a joinable is @c true, you can wait for this thread's termination by
+   * calling join().  Otherwise the thread will just disappear, when ready.
+   *
+   * The new thread executes the function or method @a slot points to.  You can
+   * pass additional arguments using sigc::bind().  If the thread was created
+   * successfully, it is returned, otherwise a ThreadError exception is thrown.
+   *
+   * Because sigc::trackable is not thread safe, if the slot represents a
+   * non-static class method (that is, it is created by sigc::mem_fun()), the
+   * class concerned should not derive from sigc::trackable.
+   *
+   * @param slot A slot to execute in the new thread.
+   * @param joinable This parameter is now ignored because Threads are now always joinable.
+   * @return The new Thread* on success.
+   * @throw Glib::ThreadError
+   */
+  static Thread* create(const sigc::slot<void>& slot, bool joinable = true);
+
+  /** Returns the Thread* corresponding to the calling thread.
+   * @return The current thread.
+   */
+  static Thread* self();
+
+  /** Waits until the thread finishes.
+   * Waits until the thread finishes, i.e. the slot, as given to create(),
+   * returns or g_thread_exit() is called by the thread.  (Calling
+   * g_thread_exit() in a C++ program should be avoided.)  All resources of
+   * the thread including the Glib::Thread object are released.  The thread
+   * must have been created with <tt>joinable&nbsp;=&nbsp;true</tt>.
+   */
+  void join();
+
+  //See http://bugzilla.gnome.org/show_bug.cgi?id=512348 about the sigc::trackable issue.
+  /** Creates a new thread with the priority @a priority. The stack gets the
+   * size @a stack_size or the default value for the current platform, if
+   * @a stack_size is <tt>0</tt>.
+   *
+   * If @a joinable is @c true, you can wait for this thread's termination by
+   * calling join().  Otherwise the thread will just disappear, when ready.
+   * If @a bound is @c true, this thread will be scheduled in the system scope,
+   * otherwise the implementation is free to do scheduling in the process
+   * scope.  The first variant is more expensive resource-wise, but generally
+   * faster.  On some systems (e.g. Linux) all threads are bound.
+   *
+   * The new thread executes the function or method @a slot points to.  You can
+   * pass additional arguments using sigc::bind().  If the thread was created
+   * successfully, it is returned.
+   *
+   * Because sigc::trackable is not thread safe, if the slot represents a
+   * non-static class method (that is, it is created by sigc::mem_fun()), the
+   * class concerned should not derive from sigc::trackable.
+   *
+   * @note It is not guaranteed, that threads with different priorities really
+   * behave accordingly.  On some systems (e.g. Linux) only root can increase
+   * priorities.  On other systems (e.g. Solaris) there doesn't seem to be
+   * different scheduling for different priorities.  All in all try to avoid
+   * being dependent on priorities.  Use <tt>Glib::THREAD_PRIORITY_NORMAL</tt>
+   * here as a default.
+   *
+   * @note Only use the extended
+   * create(const sigc::slot<void>&, unsigned long, bool, bool, ThreadPriority)
+   * function, when you really can't use the simple
+   * create(const sigc::slot<void>&, bool)
+   * instead.  The latter overload does not take @a stack_size, @a bound and
+   * @a priority as arguments, as they should only be used for cases, where
+   * it is inevitable.
+   *
+   * @param slot A slot to execute in the new thread.
+   * @param stack_size A stack size for the new thread, or <tt>0</tt>.
+   * @param joinable Should this thread be joinable?
+   * @param bound Should this thread be bound to a system thread?
+   * @param priority A priority for the thread.
+   * @return The new Thread* on success.
+   * @throw Glib::ThreadError
+   *
+   * @deprecated Use the simpler create() method instead, because all Threads
+   * are now joinable, and bounds and priority parameters now have no effect.
+   */
+  static Thread* create(const sigc::slot<void>& slot, unsigned long stack_size,
+                        bool joinable, bool bound, ThreadPriority priority);
+
+  /** Returns whether the thread is joinable.
+   * @return Whether the thread is joinable.
+   *
+   * @deprecated All threads are now joinable.
+   */
+  bool joinable() const;
+
+  /** Changes the priority of the thread to @a priority.
+   * @note It is not guaranteed, that threads with different priorities really
+   * behave accordingly.  On some systems (e.g. Linux) only @c root can
+   * increase priorities.  On other systems (e.g. Solaris) there doesn't seem
+   * to be different scheduling for different priorities.  All in all try to
+   * avoid being dependent on priorities.
+   * @param priority A new priority for the thread.
+   *
+   * @deprecated Thread priorities no longer have any effect.
+   */
+  void set_priority(ThreadPriority priority);
+
+  /** Returns the priority of the thread.
+   * @return The thread's priority.
+   *
+   * @deprecated Thread priorities no longer have any effect.
+   */
+  ThreadPriority get_priority() const;
+
+  /** Gives way to other threads waiting to be scheduled.
+   * This function is often used as a method to make busy wait less evil.  But
+   * in most cases, you will encounter, there are better methods to do that.
+   * So in general you shouldn't use this function.
+   */
+  static void yield();
+
+  GThread*       gobj()       { return &gobject_; }
+  const GThread* gobj() const { return &gobject_; }
+
+private:
+  GThread gobject_;
+
+  // Glib::Thread can neither be constructed nor deleted.
+  Thread();
+  void operator delete(void*, std::size_t);
+};
+
+/** %Exception class used to exit from a thread.
+ * @code
+ * throw Glib::Thread::Exit();
+ * @endcode
+ * Write this if you want to exit from a thread created by Thread::create().
+ * Of course you must make sure not to catch Thread::Exit by accident, i.e.
+ * when using <tt>catch(...)</tt> somewhere in your code.
+ *
+ * @deprecated Use Glib::Threads::Thread::Exit instead.
+ */
+class Thread::Exit
+{};
+
+
+//TODO: Make sure that Glib::wrap() uses Glib::Threads::wrap() instead.
+
+/** @relates Glib::Thread
+ *
+ * @deprecated Use Glib::Threads::wrap(GThread*) instead.
+ */
+Thread* wrap(GThread* gobject);
+
+struct StaticMutex;
+
+/** Like Glib::Mutex, but can be defined at compile time.
+ * Use @c GLIBMM_STATIC_MUTEX_INIT to initialize a StaticMutex:
+ * @code
+ * Glib::StaticMutex mutex = GLIBMM_STATIC_MUTEX_INIT;
+ * @endcode
+ *
+ * A StaticMutex can be used without calling Glib::thread_init(), it will
+ * silently do nothing then.  That will also work when using the implicit
+ * conversion to Mutex&, thus you can safely use Mutex::Lock with a
+ * StaticMutex.
+ *
+ * @deprecated Use Glib::Threads::Mutex instead, which can be used statically.
+ */
+struct StaticMutex
+{
+  void lock();
+  bool trylock();
+  void unlock();
+
+  operator Mutex&();
+
+  GStaticMutex* gobj() { return &gobject_; }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  // Must be public to allow initialization at compile time.
+  GStaticMutex gobject_;
+#endif
+};
+
+/** Initializer macro for Glib::StaticMutex.
+ * @relates Glib::StaticMutex
+ * @hideinitializer
+ *
+ * @deprecated  Glib::StaticMutex is deprecated in favour of Glib::Threads::Mutex, which can be used statically.
+ */
+#define GLIBMM_STATIC_MUTEX_INIT { G_STATIC_MUTEX_INIT }
+
+/** Represents a mutex (mutual exclusion).
+ * It can be used to protect data against shared access.  Try to use
+ * Mutex::Lock instead of calling lock() and unlock() directly&nbsp;--
+ * it will make your life much easier.
+ *
+ * @note Glib::Mutex is not recursive, i.e. a thread will deadlock, if it
+ * already has locked the mutex while calling lock().  Use Glib::RecMutex
+ * instead, if you need recursive mutexes.
+ *
+ * @deprecated Use Glib::Threads::Mutex instead.
+ */
+class Mutex
+{
+public:
+  class Lock;
+
+  Mutex();
+
+  Mutex(const Mutex&) = delete;
+  Mutex& operator=(const Mutex&) = delete;
+
+  ~Mutex();
+
+  /** Locks the mutex.
+   * If mutex is already locked by another thread, the current thread will
+   * block until mutex is unlocked by the other thread.
+   * @see Mutex::Lock
+   */
+  void lock();
+
+  /** Tries to lock the mutex.
+   * If the mutex is already locked by another thread, it immediately returns
+   * @c false.  Otherwise it locks the mutex and returns @c true.
+   * @return Whether the mutex could be locked.
+   * @see Mutex::Lock
+   */
+  bool trylock();
+
+  /** Unlocks the mutex.
+   * If another thread is blocked in a lock() call for this mutex, it will be
+   * woken and can lock the mutex itself.
+   * @see Mutex::Lock
+   */
+  void unlock();
+
+  GMutex* gobj() { return gobject_; }
+
+private:
+  GMutex* gobject_;
+};
+
+/** Utility class for exception-safe mutex locking.
+ * @par Usage example:
+ * @code
+ * {
+ *   Glib::Mutex::Lock lock (mutex); // calls mutex.lock()
+ *   do_something();
+ * } // the destructor calls mutex.unlock()
+ * @endcode
+ * As you can see, the compiler takes care of the unlocking.  This is not
+ * only exception safe but also much less error-prone.  You could even
+ * <tt>return</tt> while still holding the lock and it will be released
+ * properly.
+ *
+ * @deprecated Use Glib::Threads::Mutex::Lock instead.
+ */
+class Mutex::Lock
+{
+public:
+  explicit inline Lock(Mutex& mutex);
+  inline Lock(Mutex& mutex, NotLock);
+  inline Lock(Mutex& mutex, TryLock);
+  inline ~Lock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  Mutex&  mutex_;
+  bool    locked_;
+
+
+};
+
+
+/** Like Glib::RecMutex, but can be defined at compile time.
+ * Use @c GLIBMM_STATIC_REC_MUTEX_INIT to initialize a StaticRecMutex:
+ * @code
+ * Glib::StaticRecMutex mutex = GLIBMM_STATIC_REC_MUTEX_INIT;
+ * @endcode
+ * A StaticRecMutex can be used without calling Glib::thread_init(), it will
+ * silently do nothing then.  That will also work when using the implicit
+ * conversion to RecMutex&, thus you can safely use RecMutex::Lock with a
+ * StaticRecMutex.
+ *
+ * @deprecated Use Glib::Threads::RecMutex instead, which can be used statically.
+ */
+struct StaticRecMutex
+{
+  void lock();
+  bool trylock();
+  void unlock();
+
+  void lock_full(unsigned int depth);
+  unsigned int unlock_full();
+
+  operator RecMutex&();
+
+  GStaticRecMutex* gobj() { return &gobject_; }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  // Must be public to allow initialization at compile time.
+  GStaticRecMutex gobject_;
+#endif
+};
+
+/**
+ *
+ * @deprecated Use Glib::Threads::RecMutex instead.
+ */
+class RecMutex : public StaticRecMutex
+{
+public:
+  class Lock;
+
+  RecMutex();
+  ~RecMutex();
+
+private:
+  // noncopyable
+  RecMutex(const RecMutex&);
+  RecMutex& operator=(const RecMutex&);
+};
+
+/** Utility class for exception-safe locking of recursive mutexes.
+ *
+ * @deprecated Use Glib::Threads::RecMutex instead.
+ */
+class RecMutex::Lock
+{
+public:
+  explicit inline Lock(RecMutex& mutex);
+  inline Lock(RecMutex& mutex, NotLock);
+  inline Lock(RecMutex& mutex, TryLock);
+
+  Lock(const RecMutex::Lock&) = delete;
+  RecMutex::Lock& operator=(const RecMutex::Lock&) = delete;
+
+  inline ~Lock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RecMutex& mutex_;
+  bool      locked_;
+};
+
+
+/** Like Glib::RWLock, but can be defined at compile time.
+ * Use @c GLIBMM_STATIC_RW_LOCK_INIT to initialize a StaticRWLock:
+ * @code
+ * Glib::StaticRWLock rw_lock = GLIBMM_STATIC_RW_LOCK_INIT;
+ * @endcode
+ * A StaticRWLock can be used without calling Glib::thread_init(), it will
+ * silently do nothing then.  That will also work when using the implicit
+ * conversion to RWLock&, thus you can safely use RWLock::ReaderLock and
+ * RWLock::WriterLock with a StaticRWLock.
+ *
+ * @deprecated Use Glib::Threads::RWLock instead, which can be used statically.
+ */
+struct StaticRWLock
+{
+  void reader_lock();
+  bool reader_trylock();
+  void reader_unlock();
+
+  void writer_lock();
+  bool writer_trylock();
+  void writer_unlock();
+
+  operator RWLock&();
+
+  GStaticRWLock* gobj() { return &gobject_; }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  // Must be public to allow initialization at compile time.
+  GStaticRWLock gobject_;
+#endif
+};
+
+/**
+ *
+ * @deprecated Use Glib::Threads::RWLock instead.
+ */
+class RWLock : public StaticRWLock
+{
+public:
+  class ReaderLock;
+  class WriterLock;
+
+  RWLock();
+
+  RWLock(const RWLock&) = delete;
+  RWLock& operator=(const RWLock&) = delete;
+
+  ~RWLock();
+};
+
+/** Utility class for exception-safe locking of read/write locks.
+ *
+ * @deprecated Use Glib::Threads::RWLock::ReaderLock instead.
+ */
+class RWLock::ReaderLock
+{
+public:
+  explicit inline ReaderLock(RWLock& rwlock);
+  inline ReaderLock(RWLock& rwlock, NotLock);
+  inline ReaderLock(RWLock& rwlock, TryLock);
+
+  ReaderLock(const RWLock::ReaderLock&) = delete;
+  RWLock::ReaderLock& operator=(const RWLock::ReaderLock&) = delete;
+
+  inline ~ReaderLock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RWLock& rwlock_;
+  bool    locked_;
+};
+
+/** Utility class for exception-safe locking of read/write locks.
+ *
+ * @deprecated Use Glib::Threads::RWLock::WriterLock instead.
+ */
+class RWLock::WriterLock
+{
+public:
+  explicit inline WriterLock(RWLock& rwlock);
+  inline WriterLock(RWLock& rwlock, NotLock);
+  inline WriterLock(RWLock& rwlock, TryLock);
+
+  WriterLock(const RWLock::WriterLock&) = delete;
+  RWLock::WriterLock& operator=(const RWLock::WriterLock&) = delete;
+
+  inline ~WriterLock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RWLock& rwlock_;
+  bool    locked_;
+};
+
+/** An opaque data structure to represent a condition.
+ * A @a Cond is an object that threads can block on, if they find a certain
+ * condition to be false. If other threads change the state of this condition
+ * they can signal the @a Cond, such that the waiting thread is woken up.
+ * @par Usage example:
+ * @code
+ * Glib::Cond  data_cond;
+ * Glib::Mutex data_mutex;
+ * void* current_data = nullptr;
+ *
+ * void push_data(void* data)
+ * {
+ *   Glib::Mutex::Lock lock (data_mutex);
+ *
+ *   current_data = data;
+ *   data_cond.signal();
+ * }
+ *
+ * void* pop_data()
+ * {
+ *   Glib::Mutex::Lock lock (data_mutex);
+ *
+ *   while (!current_data)
+ *     data_cond.wait(data_mutex);
+ *
+ *   void *const data = current_data;
+ *   current_data = nullptr;
+ *
+ *   return data;
+ * }
+ * @endcode
+ *
+ * @deprecated Use Glib::Threads::Cond instead.
+ */
+class Cond
+{
+public:
+  Cond();
+
+  Cond(const Cond&) = delete;
+  Cond& operator=(const Cond&) = delete;
+
+  ~Cond();
+
+  /** If threads are waiting for this @a Cond, exactly one of them is woken up.
+   * It is good practice to hold the same lock as the waiting thread, while calling
+   * this method, though not required.
+   *
+   */
+  void signal();
+
+  /** If threads are waiting for this @a Cond, all of them are woken up.
+   * It is good practice to hold the same lock as the waiting thread, while calling
+   * this method, though not required.
+   */
+  void broadcast();
+
+  /** Waits until this thread is woken up on this @a Cond.
+   * The mutex is unlocked before falling asleep and locked again before resuming.
+   *
+   * @param mutex a @a Mutex that is currently locked.
+   *
+   * @note It is important to use the @a wait() and @a timed_wait() methods
+   * only inside a loop, which checks for the condition to be true as it is not
+   * guaranteed that the waiting thread will find it fulfilled, even if the signaling
+   * thread left the condition in that state. This is because another thread can have
+   * altered the condition, before the waiting thread got the chance to be woken up,
+   * even if the condition itself is protected by a @a Mutex.
+   */
+  void wait(Mutex& mutex);
+
+  /** Waits until this thread is woken up on this @a Cond, but not longer than until the time, that is specified by @a abs_time.
+   * The mutex is unlocked before falling asleep and locked again before resuming.
+   *
+   * @param mutex a @a Mutex that is currently locked.
+   * @param abs_time a max time to wait.
+   *
+   * @note It is important to use the @a wait() and @a timed_wait() methods
+   * only inside a loop, which checks for the condition to be true as it is not
+   * guaranteed that the waiting thread will find it fulfilled, even if the signaling
+   * thread left the condition in that state. This is because another thread can have
+   * altered the condition, before the waiting thread got the chance to be woken up,
+   * even if the condition itself is protected by a @a Mutex.
+   */
+  bool timed_wait(Mutex& mutex, const Glib::TimeVal& abs_time);
+
+  GCond* gobj() { return gobject_; }
+
+private:
+  GCond* gobject_;
+};
+
+
+/** Thread-local data pointer.
+ *
+ * @deprecated Use Glib::Threads::Private instead, which can be used statically.
+ */
+template <class T>
+struct StaticPrivate
+{
+  using DestroyNotifyFunc =  void (*) (void*);
+
+  static void delete_ptr(void* data);
+
+  inline T* get();
+  inline void set(T* data, DestroyNotifyFunc notify_func = &StaticPrivate<T>::delete_ptr);
+
+  GStaticPrivate* gobj() { return &gobject_; }
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+  // Must be public to allow initialization at compile time.
+  GStaticPrivate gobject_;
+#endif
+};
+
+/** Thread-local data pointer.
+ *
+ * @deprecated Use Glib::Threads::Private instead.
+ */
+template <class T>
+class Private
+{
+public:
+
+  Private(const Private<T>&) = delete;
+  Private<T>& operator=(const Private<T>&) = delete;
+
+  using DestructorFunc = void (*) (void*);
+
+  static void delete_ptr(void* data);
+
+  explicit inline Private(DestructorFunc destructor_func = &Private<T>::delete_ptr);
+  inline T* get();
+  inline void set(T* data);
+
+  GPrivate* gobj() { return gobject_; }
+
+private:
+  GPrivate* gobject_;
+};
+
+/** @} group Threads */
+
+/*! A glibmm thread example.
+ * @example thread/thread.cc
+ */
+
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/***************************************************************************/
+/*  inline implementation                                                  */
+/***************************************************************************/
+
+// internal
+/** @deprecated This was always for internal glibmm use and is now unecessary even inside glibmm.
+ */
+void thread_init_impl();
+
+/**** Glib::Mutex::Lock ****************************************************/
+
+inline
+Mutex::Lock::Lock(Mutex& mutex)
+:
+  mutex_  (mutex),
+  locked_ (true)
+{
+  mutex_.lock();
+}
+
+inline
+Mutex::Lock::Lock(Mutex& mutex, NotLock)
+:
+  mutex_  (mutex),
+  locked_ (false)
+{}
+
+inline
+Mutex::Lock::Lock(Mutex& mutex, TryLock)
+:
+  mutex_  (mutex),
+  locked_ (mutex.trylock())
+{}
+
+inline
+Mutex::Lock::~Lock()
+{
+  if(locked_)
+    mutex_.unlock();
+}
+
+inline
+void Mutex::Lock::acquire()
+{
+  mutex_.lock();
+  locked_ = true;
+}
+
+inline
+bool Mutex::Lock::try_acquire()
+{
+  locked_ = mutex_.trylock();
+  return locked_;
+}
+
+inline
+void Mutex::Lock::release()
+{
+  mutex_.unlock();
+  locked_ = false;
+}
+
+inline
+bool Mutex::Lock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::RecMutex::Lock *************************************************/
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex)
+:
+  mutex_  (mutex),
+  locked_ (true)
+{
+  mutex_.lock();
+}
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex, NotLock)
+:
+  mutex_  (mutex),
+  locked_ (false)
+{}
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex, TryLock)
+:
+  mutex_  (mutex),
+  locked_ (mutex.trylock())
+{}
+
+inline
+RecMutex::Lock::~Lock()
+{
+  if(locked_)
+    mutex_.unlock();
+}
+
+inline
+void RecMutex::Lock::acquire()
+{
+  mutex_.lock();
+  locked_ = true;
+}
+
+inline
+bool RecMutex::Lock::try_acquire()
+{
+  locked_ = mutex_.trylock();
+  return locked_;
+}
+
+inline
+void RecMutex::Lock::release()
+{
+  mutex_.unlock();
+  locked_ = false;
+}
+
+inline
+bool RecMutex::Lock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::RWLock::ReaderLock *********************************************/
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock)
+:
+  rwlock_ (rwlock),
+  locked_ (true)
+{
+  rwlock_.reader_lock();
+}
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock, NotLock)
+:
+  rwlock_ (rwlock),
+  locked_ (false)
+{}
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock, TryLock)
+:
+  rwlock_ (rwlock),
+  locked_ (rwlock.reader_trylock())
+{}
+
+inline
+RWLock::ReaderLock::~ReaderLock()
+{
+  if(locked_)
+    rwlock_.reader_unlock();
+}
+
+inline
+void RWLock::ReaderLock::acquire()
+{
+  rwlock_.reader_lock();
+  locked_ = true;
+}
+
+inline
+bool RWLock::ReaderLock::try_acquire()
+{
+  locked_ = rwlock_.reader_trylock();
+  return locked_;
+}
+
+inline
+void RWLock::ReaderLock::release()
+{
+  rwlock_.reader_unlock();
+  locked_ = false;
+}
+
+inline
+bool RWLock::ReaderLock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::RWLock::WriterLock *********************************************/
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock)
+:
+  rwlock_ (rwlock),
+  locked_ (true)
+{
+  rwlock_.writer_lock();
+}
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock, NotLock)
+:
+  rwlock_ (rwlock),
+  locked_ (false)
+{}
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock, TryLock)
+:
+  rwlock_ (rwlock),
+  locked_ (rwlock.writer_trylock())
+{}
+
+inline
+RWLock::WriterLock::~WriterLock()
+{
+  if(locked_)
+    rwlock_.writer_unlock();
+}
+
+inline
+void RWLock::WriterLock::acquire()
+{
+  rwlock_.writer_lock();
+  locked_ = true;
+}
+
+inline
+bool RWLock::WriterLock::try_acquire()
+{
+  locked_ = rwlock_.writer_trylock();
+  return locked_;
+}
+
+inline
+void RWLock::WriterLock::release()
+{
+  rwlock_.writer_unlock();
+  locked_ = false;
+}
+
+inline
+bool RWLock::WriterLock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::StaticPrivate **************************************************/
+
+// static
+template <class T>
+void StaticPrivate<T>::delete_ptr(void* data)
+{
+  delete static_cast<T*>(data);
+}
+
+/** This is only for use by glibmm itself.
+ */
+void* StaticPrivate_get_helper(GStaticPrivate *private_key);
+
+template <class T> inline
+T* StaticPrivate<T>::get()
+{
+  return static_cast<T*>(StaticPrivate_get_helper(&gobject_));
+}
+
+/** This is only for use by glibmm itself.
+ */
+void StaticPrivate_set_helper(GStaticPrivate *private_key, gpointer data, GDestroyNotify notify);
+
+template <class T> inline
+void StaticPrivate<T>::set(T* data, typename StaticPrivate<T>::DestroyNotifyFunc notify_func)
+{
+  StaticPrivate_set_helper(&gobject_, data, notify_func);
+}
+
+
+/**** Glib::Private ********************************************************/
+
+// static
+template <class T>
+void Private<T>::delete_ptr(void* data)
+{
+  delete static_cast<T*>(data);
+}
+
+/** This is only for use by glibmm itself.
+ */
+GPrivate* GPrivate_new_helper(GDestroyNotify notify);
+
+template <class T> inline
+Private<T>::Private(typename Private<T>::DestructorFunc destructor_func)
+:
+  gobject_ (GPrivate_new_helper(destructor_func))
+{}
+
+template <class T> inline
+T* Private<T>::get()
+{
+  return static_cast<T*>(g_private_get(gobject_));
+}
+
+template <class T> inline
+void Private<T>::set(T* data)
+{
+  g_private_set(gobject_, data);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} // namespace Glib
+
diff --git a/glib/src/threads.ccg b/glib/src/threads.ccg
new file mode 100644 (file)
index 0000000..a478433
--- /dev/null
@@ -0,0 +1,301 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/exceptionhandler.h>
+#include <glib.h>
+
+/* Why reinterpret_cast<Thread*>(gobject) is needed:
+ *
+ * A Thread instance is in fact always a GThread instance.
+ * Unfortunately, GThread cannot be a member of Thread,
+ * because it is an opaque struct. Also, the C interface does not provide
+ * any hooks to install a destroy notification handler, thus we cannot
+ * wrap it dynamically either.
+ *
+ * The cast works because Thread does not have any member data, and
+ * it is impossible to derive from it. This is ensured by not implementing
+ * the (private) default constructor.
+ * This trick is used also in classes declared as _CLASS_OPAQUE_REFCOUNTED.
+ */
+
+namespace
+{
+
+extern "C" {
+
+static void*
+call_thread_entry_slot(void* data)
+{
+  const auto slot = reinterpret_cast<sigc::slot_base*>(data);
+
+  try
+  {
+    // Recreate the specific slot.
+    (*static_cast<sigc::slot<void>*>(slot))();
+  }
+  catch (Glib::Threads::Thread::Exit&)
+  {
+    // Just exit from the thread.  The Threads::Thread::Exit exception
+    // is our sane C++ replacement of g_thread_exit().
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  delete slot;
+  return nullptr;
+}
+
+} // extern "C"
+
+} // anonymous namespace
+
+namespace Glib
+{
+
+namespace Threads
+{
+
+/**** Glib::Threads::Thread ************************************************/
+
+// static
+Thread*
+Thread::create(const sigc::slot<void>& slot, const std::string& name)
+{
+  // Make a copy of slot on the heap.
+  const auto slot_copy = new sigc::slot<void>(slot);
+
+  GError* error = nullptr;
+  auto thread = g_thread_try_new(
+    name.empty() ? nullptr : name.c_str(), &call_thread_entry_slot, slot_copy, &error);
+
+  if (error)
+  {
+    delete slot_copy;
+    Glib::Error::throw_exception(error);
+  }
+  if (!thread)
+  {
+    delete slot_copy;
+  }
+  return reinterpret_cast<Thread*>(thread);
+}
+
+// static
+Thread*
+Thread::create(const sigc::slot<void>& slot)
+{
+  return create(slot, std::string());
+}
+
+// static
+Thread*
+Thread::self()
+{
+  return reinterpret_cast<Thread*>(g_thread_self());
+}
+
+void
+Thread::join()
+{
+  g_thread_join(reinterpret_cast<GThread*>(this));
+}
+
+// static
+void
+Thread::yield()
+{
+  g_thread_yield();
+}
+
+GThread*
+Thread::gobj()
+{
+  return reinterpret_cast<GThread*>(this);
+}
+
+const GThread*
+Thread::gobj() const
+{
+  return reinterpret_cast<const GThread*>(this);
+}
+
+Thread*
+wrap(GThread* gobject)
+{
+  return reinterpret_cast<Thread*>(gobject);
+}
+
+/**** Glib::Threads::Mutex *************************************************/
+
+Mutex::Mutex()
+{
+  g_mutex_init(&gobject_);
+}
+
+Mutex::~Mutex()
+{
+  g_mutex_clear(&gobject_);
+}
+
+void
+Mutex::lock()
+{
+  g_mutex_lock(&gobject_);
+}
+
+bool
+Mutex::trylock()
+{
+  return g_mutex_trylock(&gobject_);
+}
+
+void
+Mutex::unlock()
+{
+  g_mutex_unlock(&gobject_);
+}
+
+Mutex*
+wrap(GMutex* gobject)
+{
+  return reinterpret_cast<Mutex*>(gobject);
+}
+
+/**** Glib::Threads::RecMutex **********************************************/
+
+RecMutex::RecMutex()
+{
+  g_rec_mutex_init(&gobject_);
+}
+
+RecMutex::~RecMutex()
+{
+  g_rec_mutex_clear(&gobject_);
+}
+
+void
+RecMutex::lock()
+{
+  g_rec_mutex_lock(&gobject_);
+}
+
+bool
+RecMutex::trylock()
+{
+  return g_rec_mutex_trylock(&gobject_);
+}
+
+void
+RecMutex::unlock()
+{
+  g_rec_mutex_unlock(&gobject_);
+}
+
+RecMutex*
+wrap(GRecMutex* gobject)
+{
+  return reinterpret_cast<RecMutex*>(gobject);
+}
+
+/**** Glib::Threads::RWLock ************************************************/
+
+void
+RWLock::reader_lock()
+{
+  g_rw_lock_reader_lock(&gobject_);
+}
+
+bool
+RWLock::reader_trylock()
+{
+  return g_rw_lock_reader_trylock(&gobject_);
+}
+
+void
+RWLock::reader_unlock()
+{
+  g_rw_lock_reader_unlock(&gobject_);
+}
+
+void
+RWLock::writer_lock()
+{
+  g_rw_lock_writer_lock(&gobject_);
+}
+
+bool
+RWLock::writer_trylock()
+{
+  return g_rw_lock_writer_trylock(&gobject_);
+}
+
+void
+RWLock::writer_unlock()
+{
+  g_rw_lock_writer_unlock(&gobject_);
+}
+
+RWLock::RWLock()
+{
+  g_rw_lock_init(&gobject_);
+}
+
+RWLock::~RWLock()
+{
+  g_rw_lock_clear(&gobject_);
+}
+
+/**** Glib::Threads::Cond **************************************************/
+
+Cond::Cond()
+{
+  g_cond_init(&gobject_);
+}
+
+Cond::~Cond()
+{
+  g_cond_clear(&gobject_);
+}
+
+void
+Cond::signal()
+{
+  g_cond_signal(&gobject_);
+}
+
+void
+Cond::broadcast()
+{
+  g_cond_broadcast(&gobject_);
+}
+
+void
+Cond::wait(Mutex& mutex)
+{
+  g_cond_wait(&gobject_, mutex.gobj());
+}
+
+bool
+Cond::wait_until(Mutex& mutex, gint64 end_time)
+{
+  return g_cond_wait_until(&gobject_, mutex.gobj(), end_time);
+}
+
+} // namespace Threads
+
+} // namespace Glib
diff --git a/glib/src/threads.hg b/glib/src/threads.hg
new file mode 100644 (file)
index 0000000..86d7a17
--- /dev/null
@@ -0,0 +1,931 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+_DEFS(glibmm,glib)
+_CONFIGINCLUDE(glibmmconfig.h)
+
+_IS_DEPRECATED // This whole file is deprecated.
+
+#m4 _PUSH(SECTION_CC_PRE_INCLUDES)
+// Don't let glibmm.h include thread.h. Pretend that it's already included.
+// glib.h can then be included with G_DISABLE_DEPRECATED defined, and
+// the compiler can react if deprecated glib functions are used.
+#define _GLIBMM_THREAD_H
+#m4 _POP()
+
+#include <glib.h>
+#include <glibmm/error.h>
+#include <sigc++/sigc++.h>
+#include <string>
+#include <cstddef>
+
+namespace Glib
+{
+
+/**
+ * @deprecated The entire Glib::Threads API is deprecated in favor of the
+ * standard C++ concurrency API in C++11 and C++14.
+ */
+namespace Threads
+{
+//The GMMPROC_EXTRA_NAMESPACE() macro is a hint to generate_wrap_init.pl to put it in the Threads sub-namespace
+_GMMPROC_EXTRA_NAMESPACE(Threads)
+
+/** @defgroup Threads Threads
+ * %Thread abstraction; including threads, different mutexes,
+ * conditions and thread private data.
+ *
+ * @deprecated The entire Glib::Threads API is deprecated in favor of the
+ * standard C++ concurrency API in C++11 and C++14.
+ * @{
+ */
+
+/// @deprecated Please use std::lock_guard or std::unique_lock instead.
+enum NotLock { NOT_LOCK };
+
+/// @deprecated Please use std::lock_guard or std::unique_lock instead.
+enum TryLock { TRY_LOCK };
+
+class Mutex;
+class RecMutex;
+class RWLock;
+
+/** %Exception class for thread-related errors.
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead.
+ */
+_WRAP_GERROR(ThreadError, GThreadError, G_THREAD_ERROR, NO_GTYPE)
+
+
+/** Represents a running thread.
+ * An instance of this class can only be obtained with create(), self(),
+ * or wrap(GThread*).  It's not possible to delete a Thread object.
+ * You must call join() to avoid a memory leak.
+ *
+ * @note g_thread_exit() is not wrapped, because that function exits a thread
+ * without any cleanup.  That's especially dangerous in C++ code, since the
+ * destructors of automatic objects won't be invoked.  Instead, you can throw
+ * a Threads::Thread::Exit exception, which will be caught by the internal thread
+ * entry function.
+ *
+ * @note The thread entry slot doesn't have the void* return value that a
+ * GThreadFunc has.  If you want to return any data from your thread,
+ * you can pass an additional output argument to the thread's entry slot.
+ *
+ * @deprecated Please use std::thread instead.
+ */
+class Thread
+{
+public:
+
+  Thread(const Thread&) = delete;
+  Thread& operator=(const Thread&) = delete;
+
+  class Exit;
+
+  //See http://bugzilla.gnome.org/show_bug.cgi?id=512348 about the sigc::trackable issue.
+  // TODO: At the next ABI break, consider changing const sigc::slot<void>& slot
+  // to const std::function<void()>& func, if it can be assumed that all supported
+  // compilers understand the C++11 template class std::function<>.
+  /** Creates a new thread.
+   * You can wait for this thread's termination by calling join().
+   *
+   * The new thread executes the function or method @a slot points to.  You can
+   * pass additional arguments using sigc::bind().  If the thread was created
+   * successfully, it is returned, otherwise a Threads::ThreadError exception is thrown.
+   *
+   * Because sigc::trackable is not thread-safe, if the slot represents a
+   * non-static class method and is created by sigc::mem_fun(), the class concerned
+   * should not derive from sigc::trackable. You can use, say, boost::bind() or,
+   * in C++11, std::bind() or a C++11 lambda expression instead of sigc::mem_fun().
+   *
+   * @param slot A slot to execute in the new thread.
+   * @return The new Thread* on success.
+   * @throw Glib::Threads::ThreadError
+   */
+  static Thread* create(const sigc::slot<void>& slot);
+
+  // TODO: At next ABI break, remove the single parameter create
+  //       method and default name to std::string()
+
+  /** Creates a new named thread.
+   * You can wait for this thread's termination by calling join().
+   *
+   * The new thread executes the function or method @a slot points to.  You can
+   * pass additional arguments using sigc::bind().  If the thread was created
+   * successfully, it is returned, otherwise a Threads::ThreadError exception is thrown.
+   *
+   * Because sigc::trackable is not thread-safe, if the slot represents a
+   * non-static class method and is created by sigc::mem_fun(), the class concerned
+   * should not derive from sigc::trackable. You can use, say, boost::bind() or,
+   * in C++11, std::bind() or a C++11 lambda expression instead of sigc::mem_fun().
+   *
+   * The @a name can be useful for discriminating threads in a debugger.
+   * It is not used for other purposes and does not have to be unique.
+   * Some systems restrict the length of @a name to 16 bytes.
+   *
+   * @param slot A slot to execute in the new thread.
+   * @param name A name for the new thread.
+   * @return The new Thread* on success.
+   * @throw Glib::Threads::ThreadError
+   *
+   * @newin{2,36}
+   */
+  static Thread* create(const sigc::slot<void>& slot, const std::string& name);
+
+  /** Returns the Thread* corresponding to the calling thread.
+   * @return The current thread.
+   */
+  static Thread* self();
+
+  /** Waits until the thread finishes.
+   * Waits until the thread finishes, i.e. the slot, as given to create(),
+   * returns or g_thread_exit() is called by the thread.  (Calling
+   * g_thread_exit() in a C++ program should be avoided.)  All resources of
+   * the thread including the Glib::Threads::Thread object are released.
+   */
+  void join();
+
+  /** Gives way to other threads waiting to be scheduled.
+   * This function is often used as a method to make busy wait less evil.  But
+   * in most cases, you will encounter, there are better methods to do that.
+   * So in general you shouldn't use this function.
+   */
+  static void yield();
+
+  GThread*       gobj();
+  const GThread* gobj() const;
+
+private:
+  // Glib::Thread can neither be constructed nor deleted.
+  Thread();
+  void operator delete(void*, std::size_t);
+};
+
+/** %Exception class used to exit from a thread.
+ * @code
+ * throw Glib::Threads::Thread::Exit();
+ * @endcode
+ * Write this if you want to exit from a thread created by Threads::Thread::create().
+ * Of course you must make sure not to catch Threads::Thread::Exit by accident, i.e.
+ * when using <tt>catch(...)</tt> somewhere in your code.
+ *
+ * @deprecated Please use std::thread instead.
+ */
+class Thread::Exit
+{};
+
+/** A C++ wrapper for the C object.
+ *
+ * @param gobject The C instance.
+ * @return The C++ wrapper.
+ *
+ * @relates Glib::Threads::Thread
+ *
+ * @deprecated Please use std::thread instead.
+ */
+Thread* wrap(GThread* gobject);
+
+/** Represents a mutex (mutual exclusion).
+ * It can be used to protect data against shared access.  Try to use
+ * Mutex::Lock instead of calling lock() and unlock() directly&nbsp;--
+ * it will make your life much easier.
+ *
+ * @note Glib::Threads::Mutex is not recursive, i.e. a thread will deadlock, if it
+ * already has locked the mutex while calling lock().  Use Glib::Threads::RecMutex
+ * instead, if you need recursive mutexes.
+ *
+ * @deprecated Please use std::mutex instead.
+ */
+class Mutex
+{
+public:
+  class Lock;
+
+  Mutex();
+
+  Mutex(const Mutex&) = delete;
+  Mutex& operator=(const Mutex&) = delete;
+
+  ~Mutex();
+
+  /** Locks the mutex.
+   * If mutex is already locked by another thread, the current thread will
+   * block until mutex is unlocked by the other thread.
+   * @see Mutex::Lock
+   */
+  void lock();
+
+  /** Tries to lock the mutex.
+   * If the mutex is already locked by another thread, it immediately returns
+   * @c false.  Otherwise it locks the mutex and returns @c true.
+   * @return Whether the mutex could be locked.
+   * @see Mutex::Lock
+   */
+  bool trylock();
+
+  /** Unlocks the mutex.
+   * If another thread is blocked in a lock() call for this mutex, it will be
+   * woken and can lock the mutex itself.
+   * @see Mutex::Lock
+   */
+  void unlock();
+
+  GMutex* gobj() { return &gobject_; }
+
+private:
+  GMutex gobject_;
+};
+
+/** Utility class for exception-safe mutex locking.
+ * @par Usage example:
+ * @code
+ * {
+ *   Glib::Threads::Mutex::Lock lock(mutex); // calls mutex.lock()
+ *   do_something();
+ * } // the destructor calls mutex.unlock()
+ * @endcode
+ * As you can see, the compiler takes care of the unlocking.  This is not
+ * only exception-safe but also much less error-prone.  You could even
+ * <tt>return</tt> while still holding the lock and it will be released
+ * properly.
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead.
+ */
+class Mutex::Lock
+{
+public:
+  explicit inline Lock(Mutex& mutex);
+  inline Lock(Mutex& mutex, NotLock);
+  inline Lock(Mutex& mutex, TryLock);
+
+  Lock(const Mutex::Lock&) = delete;
+  Mutex::Lock& operator=(const Mutex::Lock&) = delete;
+
+  inline ~Lock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  Mutex&  mutex_;
+  bool    locked_;
+};
+
+/** A C++ wrapper for the C object.
+ * Do not use operator delete on the returned pointer. If the caller owns the
+ * GMutex object, the caller must destroy it in the same way as if this function
+ * had not been called.
+ *
+ * @param gobject The C instance.
+ * @result The GMutex* cast to a Glib::Threads::Mutex*.
+ *
+ * @relates Glib::Threads::Mutex
+ */
+Mutex* wrap(GMutex* gobject);
+
+/** This represents a recursive mutex.
+ * It is similar to a Mutex with the difference
+ * that it is possible to lock a RecMutex multiple times in the same
+ * thread without deadlock. When doing so, care has to be taken to
+ * unlock the recursive mutex as often as it has been locked.
+ *
+ * @deprecated Please use std::recursive_mutex instead.
+ */
+class RecMutex
+{
+public:
+  class Lock;
+
+  RecMutex();
+
+  RecMutex(const RecMutex&) = delete;
+  RecMutex& operator=(const RecMutex&) = delete;
+
+  ~RecMutex();
+
+  void lock();
+  bool trylock();
+  void unlock();
+
+  GRecMutex* gobj() { return &gobject_; }
+
+private:
+  GRecMutex gobject_;
+};
+
+/** Utility class for exception-safe locking of recursive mutexes.
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead.
+ */
+class RecMutex::Lock
+{
+public:
+  explicit inline Lock(RecMutex& mutex);
+  inline Lock(RecMutex& mutex, NotLock);
+  inline Lock(RecMutex& mutex, TryLock);
+
+  Lock(const RecMutex::Lock&) = delete;
+  RecMutex::Lock& operator=(const RecMutex::Lock&) = delete;
+
+  inline ~Lock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RecMutex& mutex_;
+  bool      locked_;
+};
+
+/** A C++ wrapper for the C object.
+ * Do not use operator delete on the returned pointer. If the caller owns the
+ * GRecMutex object, the caller must destroy it in the same way as if this function
+ * had not been called.
+ *
+ * @param gobject The C instance.
+ * @result The GRecMutex* cast to a Glib::Threads::RecMutex*.
+ *
+ * @relates Glib::Threads::RecMutex
+ */
+RecMutex* wrap(GRecMutex* gobject);
+
+/** This represents a reader-writer lock.
+ * It is similar to a Mutex in that it allows
+ * multiple threads to coordinate access to a shared resource.
+ *
+ * The difference to a mutex is that a reader-writer lock discriminates
+ * between read-only ('reader') and full ('writer') access. While only
+ * one thread at a time is allowed write access (by holding the 'writer'
+ * lock via writer_lock()), multiple threads can gain
+ * simultaneous read-only access (by holding the 'reader' lock via
+ * reader_lock()).
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
+ */
+class RWLock
+{
+public:
+  class ReaderLock;
+  class WriterLock;
+
+  RWLock();
+
+  RWLock(const RWLock&) = delete;
+  RWLock& operator=(const RWLock&) = delete;
+
+  ~RWLock();
+
+  void reader_lock();
+  bool reader_trylock();
+  void reader_unlock();
+
+  void writer_lock();
+  bool writer_trylock();
+  void writer_unlock();
+
+  GRWLock* gobj() { return &gobject_; }
+
+private:
+  GRWLock gobject_;
+};
+
+/** Utility class for exception-safe locking of read/write locks.
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
+ */
+class RWLock::ReaderLock
+{
+public:
+  explicit inline ReaderLock(RWLock& rwlock);
+  inline ReaderLock(RWLock& rwlock, NotLock);
+  inline ReaderLock(RWLock& rwlock, TryLock);
+
+  ReaderLock(const RWLock::ReaderLock&) = delete;
+  RWLock::ReaderLock& operator=(const RWLock::ReaderLock&) = delete;
+
+  inline ~ReaderLock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RWLock& rwlock_;
+  bool    locked_;
+};
+
+/** Utility class for exception-safe locking of read/write locks.
+ *
+ * @deprecated Please use std::lock_guard or std::unique_lock instead, with std::shared_timed_mutex.
+ */
+class RWLock::WriterLock
+{
+public:
+  explicit inline WriterLock(RWLock& rwlock);
+  inline WriterLock(RWLock& rwlock, NotLock);
+  inline WriterLock(RWLock& rwlock, TryLock);
+
+  WriterLock(const RWLock::WriterLock&) = delete;
+  RWLock::WriterLock& operator=(const RWLock::WriterLock&) = delete;
+
+  inline ~WriterLock();
+
+  inline void acquire();
+  inline bool try_acquire();
+  inline void release();
+  inline bool locked() const;
+
+private:
+  RWLock& rwlock_;
+  bool    locked_;
+};
+
+/** An opaque data structure to represent a condition.
+ * A @a Cond is an object that threads can block on, if they find a certain
+ * condition to be false. If other threads change the state of this condition
+ * they can signal the @a Cond, such that the waiting thread is woken up.
+ *
+ * @deprecated Please use std::condition_variable instead.
+ *
+ * @par Usage example:
+ * @code
+ * Glib::Threads::Cond  data_cond;
+ * Glib::Threads::Mutex data_mutex;
+ * void* current_data = nullptr;
+ *
+ * void push_data(void* data)
+ * {
+ *   Glib::Threads::Mutex::Lock lock(data_mutex);
+ *
+ *   current_data = data;
+ *   data_cond.signal();
+ * }
+ *
+ * void* pop_data()
+ * {
+ *   Glib::Threads::Mutex::Lock lock(data_mutex);
+ *
+ *   while (!current_data)
+ *     data_cond.wait(data_mutex);
+ *
+ *   void* const data = current_data;
+ *   current_data = nullptr;
+ *
+ *   return data;
+ * }
+ * @endcode
+ */
+class Cond
+{
+public:
+  Cond();
+
+  Cond(const Cond&) = delete;
+  Cond& operator=(const Cond&) = delete;
+
+  ~Cond();
+
+  /** If threads are waiting for this @a Cond, exactly one of them is woken up.
+   * It is good practice to hold the same lock as the waiting thread, while calling
+   * this method, though not required.
+   */
+  void signal();
+
+  /** If threads are waiting for this @a Cond, all of them are woken up.
+   * It is good practice to hold the same lock as the waiting threads, while calling
+   * this method, though not required.
+   */
+  void broadcast();
+
+  /** Waits until this thread is woken up on this @a Cond.
+   * The mutex is unlocked before falling asleep and locked again before resuming.
+   *
+   * @param mutex A @a Mutex that is currently locked.
+   *
+   * @note It is important to use the @a wait() and @a wait_until() methods
+   * only inside a loop, which checks for the condition to be true as it is not
+   * guaranteed that the waiting thread will find it fulfilled, even if the signaling
+   * thread left the condition in that state. This is because another thread can have
+   * altered the condition, before the waiting thread got the chance to be woken up,
+   * even if the condition itself is protected by a @a Mutex.
+   */
+  void wait(Mutex& mutex);
+
+  /** Waits until this thread is woken up on this @a Cond, but not longer
+   * than until the time specified by @a end_time.
+   * The mutex is unlocked before falling asleep and locked again before resuming.
+   *
+   * @par Usage example:
+   * Extending the example presented in the documentation of class Cond.
+   * @code
+   * void* pop_data_timed()
+   * {
+   *   Glib::Threads::Mutex::Lock lock(data_mutex);
+   *
+   *   // Wait at most 5 seconds.
+   *   const gint64 end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
+   *   while (!current_data)
+   *     if (!data_cond.wait_until(data_mutex, end_time)
+   *       return nullptr; // timeout
+   *
+   *   void* const data = current_data;
+   *   current_data = nullptr;
+   *
+   *   return data;
+   * }
+   * @endcode
+   * The end time is calculated once, before entering the loop, and reused.
+   * This is the motivation behind the use of absolute time. If a relative time
+   * of 5 seconds were passed directly to the call and a spurious wakeup
+   * occurred, the program would have to start over waiting again, which would
+   * lead to a total wait time of more than 5 seconds.
+   *
+   * @param mutex A @a Mutex that is currently locked.
+   * @param end_time The monotonic time to wait until, in microseconds.
+   *                 See g_get_monotonic_time().
+   * @return <tt>true</tt> if the condition variable was signalled (or in the case
+   *         of a spurious wakeup), <tt>false</tt> if @a end_time has passed.
+   *
+   * @note It is important to use the @a wait() and @a wait_until() methods
+   * only inside a loop, which checks for the condition to be true as it is not
+   * guaranteed that the waiting thread will find it fulfilled, even if the signaling
+   * thread left the condition in that state. This is because another thread can have
+   * altered the condition, before the waiting thread got the chance to be woken up,
+   * even if the condition itself is protected by a @a Mutex.
+   */
+  bool wait_until(Mutex& mutex, gint64 end_time);
+
+  GCond* gobj() { return &gobject_; }
+
+private:
+  GCond gobject_;
+};
+
+/** Thread-local data pointer.
+ *
+ * It is recommended that all instances of this class are statically allocated.
+ * The first time an instance is used (get(), set() or replace() is called)
+ * glib allocates a scarce OS resource that cannot be deallocated.
+ *
+ * @deprecated Please use the thread_local keyword instead.
+ */
+template <class T>
+class Private
+{
+public:
+  Private(const Private<T>&) = delete;
+  Private<T>& operator=(const Private<T>&) = delete;
+
+  using DestructorFunc = void (*) (void*);
+
+  /** Deletes static_cast<T*>(data)
+   */
+  static void delete_ptr(void* data);
+
+  /** Constructor.
+   *
+   * @param destructor_func Function pointer, or <tt>nullptr</tt>. If @a destructor_func is not <tt>nullptr</tt>
+   * and the stored data pointer is not <tt>nullptr</tt>, this function is called when replace()
+   * is called and when the thread exits.
+   */
+  explicit inline Private(DestructorFunc destructor_func = &Private<T>::delete_ptr);
+
+  /** Gets the pointer stored in the calling thread.
+   *
+   * @return If no value has yet been set in this thread, <tt>nullptr</tt> is returned.
+   */
+  inline T* get();
+
+  /** Sets the pointer in the calling thread without calling <tt>destructor_func()</tt>.
+   */
+  inline void set(T* data);
+
+  /** Sets the pointer in the calling thread and calls <tt>destructor_func()</tt>.
+   * If a function pointer (and not <tt>nullptr</tt>) was specified in the constructor, and
+   * the stored data pointer before the call to replace() is not <tt>nullptr</tt>, then
+   * <tt>destructor_func()</tt> is called with this old pointer value.
+   *
+   * @newin{2,32}
+   */
+  inline void replace(T* data);
+
+  GPrivate* gobj() { return gobject_; }
+
+private:
+  GPrivate gobject_;
+};
+
+/** @} group Threads */
+
+/*! A glibmm thread example.
+ * @example thread/thread.cc
+ */
+
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+/***************************************************************************/
+/*  inline implementation                                                  */
+/***************************************************************************/
+
+/**** Glib::Threads::Mutex::Lock *******************************************/
+
+inline
+Mutex::Lock::Lock(Mutex& mutex)
+:
+  mutex_  (mutex),
+  locked_ (true)
+{
+  mutex_.lock();
+}
+
+inline
+Mutex::Lock::Lock(Mutex& mutex, NotLock)
+:
+  mutex_  (mutex),
+  locked_ (false)
+{}
+
+inline
+Mutex::Lock::Lock(Mutex& mutex, TryLock)
+:
+  mutex_  (mutex),
+  locked_ (mutex.trylock())
+{}
+
+inline
+Mutex::Lock::~Lock()
+{
+  if(locked_)
+    mutex_.unlock();
+}
+
+inline
+void Mutex::Lock::acquire()
+{
+  mutex_.lock();
+  locked_ = true;
+}
+
+inline
+bool Mutex::Lock::try_acquire()
+{
+  locked_ = mutex_.trylock();
+  return locked_;
+}
+
+inline
+void Mutex::Lock::release()
+{
+  mutex_.unlock();
+  locked_ = false;
+}
+
+inline
+bool Mutex::Lock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::Threads::RecMutex::Lock ****************************************/
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex)
+:
+  mutex_  (mutex),
+  locked_ (true)
+{
+  mutex_.lock();
+}
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex, NotLock)
+:
+  mutex_  (mutex),
+  locked_ (false)
+{}
+
+inline
+RecMutex::Lock::Lock(RecMutex& mutex, TryLock)
+:
+  mutex_  (mutex),
+  locked_ (mutex.trylock())
+{}
+
+inline
+RecMutex::Lock::~Lock()
+{
+  if(locked_)
+    mutex_.unlock();
+}
+
+inline
+void RecMutex::Lock::acquire()
+{
+  mutex_.lock();
+  locked_ = true;
+}
+
+inline
+bool RecMutex::Lock::try_acquire()
+{
+  locked_ = mutex_.trylock();
+  return locked_;
+}
+
+inline
+void RecMutex::Lock::release()
+{
+  mutex_.unlock();
+  locked_ = false;
+}
+
+inline
+bool RecMutex::Lock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::Threads::RWLock::ReaderLock ************************************/
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock)
+:
+  rwlock_ (rwlock),
+  locked_ (true)
+{
+  rwlock_.reader_lock();
+}
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock, NotLock)
+:
+  rwlock_ (rwlock),
+  locked_ (false)
+{}
+
+inline
+RWLock::ReaderLock::ReaderLock(RWLock& rwlock, TryLock)
+:
+  rwlock_ (rwlock),
+  locked_ (rwlock.reader_trylock())
+{}
+
+inline
+RWLock::ReaderLock::~ReaderLock()
+{
+  if(locked_)
+    rwlock_.reader_unlock();
+}
+
+inline
+void RWLock::ReaderLock::acquire()
+{
+  rwlock_.reader_lock();
+  locked_ = true;
+}
+
+inline
+bool RWLock::ReaderLock::try_acquire()
+{
+  locked_ = rwlock_.reader_trylock();
+  return locked_;
+}
+
+inline
+void RWLock::ReaderLock::release()
+{
+  rwlock_.reader_unlock();
+  locked_ = false;
+}
+
+inline
+bool RWLock::ReaderLock::locked() const
+{
+  return locked_;
+}
+
+
+/**** Glib::Threads::RWLock::WriterLock ************************************/
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock)
+:
+  rwlock_ (rwlock),
+  locked_ (true)
+{
+  rwlock_.writer_lock();
+}
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock, NotLock)
+:
+  rwlock_ (rwlock),
+  locked_ (false)
+{}
+
+inline
+RWLock::WriterLock::WriterLock(RWLock& rwlock, TryLock)
+:
+  rwlock_ (rwlock),
+  locked_ (rwlock.writer_trylock())
+{}
+
+inline
+RWLock::WriterLock::~WriterLock()
+{
+  if(locked_)
+    rwlock_.writer_unlock();
+}
+
+inline
+void RWLock::WriterLock::acquire()
+{
+  rwlock_.writer_lock();
+  locked_ = true;
+}
+
+inline
+bool RWLock::WriterLock::try_acquire()
+{
+  locked_ = rwlock_.writer_trylock();
+  return locked_;
+}
+
+inline
+void RWLock::WriterLock::release()
+{
+  rwlock_.writer_unlock();
+  locked_ = false;
+}
+
+inline
+bool RWLock::WriterLock::locked() const
+{
+  return locked_;
+}
+
+/**** Glib::Threads::Private<T> ********************************************/
+
+// static
+template <class T>
+void Private<T>::delete_ptr(void* data)
+{
+  delete static_cast<T*>(data);
+}
+
+template <class T> inline
+Private<T>::Private(typename Private<T>::DestructorFunc destructor_func)
+{
+  // gobject_ = G_PRIVATE_INIT(destructor_func);
+  // does not compile with --enable-warnings=fatal.
+  // GPrivate is a struct, and G_PRIVATE_INIT is an initializer of type { ... }.
+  // G_PRIVATE_INIT can be used only in initializations.
+  const GPrivate temp = G_PRIVATE_INIT(destructor_func);
+  gobject_ = temp;
+}
+
+template <class T> inline
+T* Private<T>::get()
+{
+  return static_cast<T*>(g_private_get(&gobject_));
+}
+
+template <class T> inline
+void Private<T>::set(T* data)
+{
+  g_private_set(&gobject_, data);
+}
+
+template <class T> inline
+void Private<T>::replace(T* data)
+{
+  g_private_replace(&gobject_, data);
+}
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+} //namespace Threads
+
+} // namespace Glib
index ad11205..7faf86e 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/utility.h>
index 80e95d5..1a03376 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index be4c2b5..aac6cd6 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/unicode.h>
index b3c50bb..b3d65f5 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index c34848b..4650c0c 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index a1a6f89..05358a4 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
index 82b2233..6dd549f 100644 (file)
@@ -15,8 +15,7 @@ dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 dnl  Lesser General Public License for more details.
 dnl
 dnl  You should have received a copy of the GNU Lesser General Public
-dnl  License along with this library; if not, write to the Free
-dnl  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+dnl  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 include(template.macros.m4)
 
@@ -48,7 +47,7 @@ $1 Value<$1>::get() const
 GParamSpec* Value<$1>::create_param_spec(const Glib::ustring& name) const
 {
   return create_param_spec(name, Glib::ustring(), Glib::ustring(),
-      Glib::ParamFlags::READWRITE);
+      Glib::PARAM_READWRITE);
 }
 
 GParamSpec* Value<$1>::create_param_spec(const Glib::ustring& name, const Glib::ustring& nick,
@@ -78,6 +77,9 @@ G_GNUC_EXTENSION typedef long long long_long;
 G_GNUC_EXTENSION typedef unsigned long long unsigned_long_long;
 
 GLIB_VALUE_BASIC(bool, boolean)
+#ifndef GLIBMM_DISABLE_DEPRECATED
+GLIB_VALUE_BASIC(char, char, -128, 127)
+#endif // GLIBMM_DISABLE_DEPRECATED
 GLIB_VALUE_BASIC(signed char, schar, -128, 127)
 GLIB_VALUE_BASIC(unsigned char, uchar, 0, 255)
 GLIB_VALUE_BASIC(int, int, G_MININT, G_MAXINT)
index 56097ac..5381b8b 100644 (file)
@@ -15,8 +15,7 @@ dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 dnl  Lesser General Public License for more details.
 dnl
 dnl  You should have received a copy of the GNU Lesser General Public
-dnl  License along with this library; if not, write to the Free
-dnl  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+dnl  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 include(template.macros.m4)
 
@@ -34,6 +33,7 @@ class Value<$1> : public ValueBase
 {
 public:
   using CppType = $1;
+  using CType = g$2;
 
   static GType value_type() G_GNUC_CONST;
 
@@ -66,6 +66,10 @@ divert[]dnl
 namespace Glib
 {
 GLIB_VALUE_BASIC(bool, boolean)
+#ifndef GLIBMM_DISABLE_DEPRECATED
+/// @deprecated Use Value<signed char> instead.
+GLIB_VALUE_BASIC(char, char)
+#endif // GLIBMM_DISABLE_DEPRECATED
 /// @newin{2,44}
 GLIB_VALUE_BASIC(signed char, int8)
 GLIB_VALUE_BASIC(unsigned char, uchar)
diff --git a/glib/src/valuearray.ccg b/glib/src/valuearray.ccg
new file mode 100644 (file)
index 0000000..7776acb
--- /dev/null
@@ -0,0 +1,98 @@
+/* Copyright (C) 2002-2009 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/exceptionhandler.h>
+
+static int
+ValueArray_Compare_glibmm_callback(gconstpointer a, gconstpointer b, gpointer user_data)
+{
+  Glib::ValueArray::SlotCompare* the_slot = static_cast<Glib::ValueArray::SlotCompare*>(user_data);
+
+  try
+  {
+    return (*the_slot)(
+      *reinterpret_cast<const Glib::ValueBase*>(a), *reinterpret_cast<const Glib::ValueBase*>(b));
+  }
+  catch (...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return 0;
+}
+
+namespace Glib
+{
+
+ValueArray::ValueArray() : gobject_(g_value_array_new(0))
+{
+}
+
+ValueArray::ValueArray(guint n_preallocated) : gobject_(g_value_array_new(n_preallocated))
+{
+}
+
+bool
+ValueArray::get_nth(guint index, Glib::ValueBase& value)
+{
+  const auto g_value = g_value_array_get_nth(gobj(), index);
+
+  if (g_value)
+  {
+    value.init(g_value);
+    return true;
+  }
+  else
+    return false;
+}
+
+Glib::ValueArray&
+ValueArray::append(const Glib::ValueBase& value)
+{
+  g_value_array_append(gobj(), value.gobj());
+  return *this;
+}
+
+Glib::ValueArray&
+ValueArray::prepend(const Glib::ValueBase& value)
+{
+  g_value_array_prepend(gobj(), value.gobj());
+  return *this;
+}
+
+Glib::ValueArray&
+ValueArray::insert(guint index, const Glib::ValueBase& value)
+{
+  g_value_array_insert(gobj(), index, value.gobj());
+  return *this;
+}
+
+Glib::ValueArray&
+ValueArray::remove(guint index)
+{
+  g_value_array_remove(gobj(), index);
+  return *this;
+}
+
+Glib::ValueArray&
+ValueArray::sort(const SlotCompare& compare_func)
+{
+  SlotCompare slot_copy(compare_func);
+  g_value_array_sort_with_data(gobj(), &ValueArray_Compare_glibmm_callback, &slot_copy);
+  return *this;
+}
+
+} // Glib namespace
diff --git a/glib/src/valuearray.hg b/glib/src/valuearray.hg
new file mode 100644 (file)
index 0000000..1e9bed0
--- /dev/null
@@ -0,0 +1,94 @@
+/* Copyright (C) 2002-2009 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+_CONFIGINCLUDE(glibmmconfig.h)
+
+_DEFS(glibmm,glib)
+
+#include <glib-object.h>
+#include <glibmm/value.h>
+#include <sigc++/functors/slot.h>
+
+#m4 _PUSH(SECTION_CC_PRE_INCLUDES)
+#undef G_DISABLE_DEPRECATED
+#define GLIB_DISABLE_DEPRECATION_WARNINGS 1
+#m4 _POP()
+
+_IS_DEPRECATED // This whole file is deprecated.
+
+namespace Glib
+{
+
+/** A container structure to maintain an array of generic values.
+ * The prime purpose of a ValueArray is for it to be used as an object property
+ * that holds an array of values. A ValueArray wraps an array of ValueBase
+ * elements.
+ *
+ * @newin{2,22}
+ *
+ * @deprecated Use std::vector<Glib::ValueBase*> or std::vector< Glib::Value<> >
+ *             instead of Glib::ValueArray.
+ */
+class ValueArray
+{
+  _CLASS_BOXEDTYPE(ValueArray, GValueArray, NONE, g_value_array_copy, g_value_array_free)
+  _IGNORE(g_value_array_copy, g_value_array_free)
+  _CUSTOM_DEFAULT_CTOR
+
+public:
+  /** For example,
+   *  int on_compare(const Glib::ValueBase& v1, const Glib::ValueBase& v2);.
+   *  The compare function should return -1 if v1 < v2, 0 if v1 == v2, and 1 if
+   *  v1 > v2.
+   */
+  using SlotCompare = sigc::slot<int, const Glib::ValueBase&, const Glib::ValueBase&>;
+
+  /** Default constructor.  Constructs a new array with no pre-allocation.
+   */
+  ValueArray();
+
+  /** Constructs a new array with pre-allocation.
+   */
+  ValueArray(guint n_preallocated);
+
+  /** Return the value at @a index contained in the value array.
+   * @param index Index of the value of interest.
+   * @param value An uninitialized ValueBase in which to store the result.  If
+   * the get is successful, @a value will be valid, otherwise it will remain
+   * uninitialized.
+   * @return whether the get was successful or not.
+   */
+  bool get_nth(guint index, Glib::ValueBase& value);
+  _IGNORE(g_value_array_get_nth)
+
+  _WRAP_METHOD_DOCS_ONLY(g_value_array_append)
+  Glib::ValueArray& append(const Glib::ValueBase& value);
+
+  _WRAP_METHOD_DOCS_ONLY(g_value_array_prepend)
+  Glib::ValueArray& prepend(const Glib::ValueBase& value);
+
+  _WRAP_METHOD_DOCS_ONLY(g_value_array_insert)
+  Glib::ValueArray& insert(guint index, const Glib::ValueBase& value);
+
+  _WRAP_METHOD_DOCS_ONLY(g_value_array_remove)
+  Glib::ValueArray& remove(guint index);
+
+  _WRAP_METHOD_DOCS_ONLY(g_value_array_sort)
+  Glib::ValueArray& sort(const SlotCompare& compare_func);
+  _IGNORE(g_value_array_sort_with_data)
+};
+
+} //namespace Glib
index da0587c..a645143 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/variant.h>
@@ -184,7 +183,7 @@ VariantContainerBase::create_maybe(const VariantType& child_type, const VariantB
 void
 VariantContainerBase::get_child(VariantBase& child, gsize index) const
 {
-  if (index >= g_variant_n_children(gobject_))
+  if (index >= get_n_children())
     throw std::out_of_range("VariantContainerBase::get_child(): Index out of bounds.");
 
   GVariant* const gvariant = g_variant_get_child_value(gobject_, index);
@@ -245,9 +244,16 @@ VariantContainerBase::get_iter(const VariantType& container_variant_type) const
 
 /****************** Specializations ***********************************/
 
+_DEPRECATE_IFDEF_START
+VariantBase::operator const void*() const
+{
+  return gobj() ? GINT_TO_POINTER(1) : nullptr;
+}
+_DEPRECATE_IFDEF_END
+
 VariantBase::operator bool() const
 {
-  return gobj();
+  return gobj() ? GINT_TO_POINTER(1) : nullptr;
 }
 
 void
@@ -324,6 +330,94 @@ Variant<Glib::ustring>::get() const
   return convert_const_gchar_ptr_to_ustring(g_variant_get_string(gobject_, nullptr));
 }
 
+// Variant<Glib::ustring> makes sense for multiple types.
+// See http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-get-string
+template <>
+Variant<Glib::ustring>
+VariantBase::cast_dynamic<Variant<Glib::ustring>>(const VariantBase& v) noexcept(false)
+{
+  if (!v.gobj())
+  {
+    return Variant<Glib::ustring>();
+  }
+
+  const VariantType vtype = v.get_type();
+  if (vtype.equal(VARIANT_TYPE_STRING) || vtype.equal(VARIANT_TYPE_OBJECT_PATH) ||
+      vtype.equal(VARIANT_TYPE_SIGNATURE))
+  {
+    return Variant<Glib::ustring>(const_cast<GVariant*>(v.gobj()), true);
+  }
+  else
+  {
+    // std::cerr << "vtype=" << v.get_type_string() << std::endl;
+    throw std::bad_cast();
+  }
+}
+
+/*--------------------Variant<Glib::DBusObjectPathString>---------------------*/
+
+Variant<Glib::DBusObjectPathString>::Variant() : VariantStringBase()
+{
+}
+
+Variant<Glib::DBusObjectPathString>::Variant(GVariant* castitem, bool take_a_reference)
+: VariantStringBase(castitem, take_a_reference)
+{
+}
+
+// static
+const VariantType&
+Variant<Glib::DBusObjectPathString>::variant_type()
+{
+  return VARIANT_TYPE_OBJECT_PATH;
+}
+
+Variant<Glib::DBusObjectPathString>
+Variant<Glib::DBusObjectPathString>::create(const Glib::DBusObjectPathString& data)
+{
+  auto result = Variant<CppType>(g_variant_new_object_path(data.c_str()));
+  return result;
+}
+
+Glib::DBusObjectPathString
+Variant<Glib::DBusObjectPathString>::get() const
+{
+  const char* s = g_variant_get_string(gobject_, nullptr);
+  return s ? CppType(s) : CppType();
+}
+
+/*--------------------Variant<Glib::DBusSignatureString>---------------------*/
+
+Variant<Glib::DBusSignatureString>::Variant() : VariantStringBase()
+{
+}
+
+Variant<Glib::DBusSignatureString>::Variant(GVariant* castitem, bool take_a_reference)
+: VariantStringBase(castitem, take_a_reference)
+{
+}
+
+// static
+const VariantType&
+Variant<Glib::DBusSignatureString>::variant_type()
+{
+  return VARIANT_TYPE_SIGNATURE;
+}
+
+Variant<Glib::DBusSignatureString>
+Variant<Glib::DBusSignatureString>::create(const Glib::DBusSignatureString& data)
+{
+  auto result = Variant<CppType>(g_variant_new_signature(data.c_str()));
+  return result;
+}
+
+Glib::DBusSignatureString
+Variant<Glib::DBusSignatureString>::get() const
+{
+  const char* s = g_variant_get_string(gobject_, nullptr);
+  return s ? CppType(s) : CppType();
+}
+
 /*--------------------Variant<std::string>---------------------*/
 
 Variant<std::string>::Variant() : VariantStringBase()
@@ -349,6 +443,30 @@ Variant<std::string>::create(const std::string& data)
   return result;
 }
 
+// Variant<std::string> makes sense for multiple types.
+// See http://library.gnome.org/devel/glib/unstable/glib-GVariant.html#g-variant-get-string
+template <>
+Variant<std::string>
+VariantBase::cast_dynamic<Variant<std::string>>(const VariantBase& v) noexcept(false)
+{
+  if (!v.gobj())
+  {
+    return Variant<std::string>();
+  }
+
+  const VariantType vtype = v.get_type();
+  if (vtype.equal(VARIANT_TYPE_STRING) || vtype.equal(VARIANT_TYPE_BYTESTRING) ||
+      vtype.equal(VARIANT_TYPE_OBJECT_PATH) || vtype.equal(VARIANT_TYPE_SIGNATURE))
+  {
+    return Variant<std::string>(const_cast<GVariant*>(v.gobj()), true);
+  }
+  else
+  {
+    // std::cerr << "vtype=" << v.get_type_string() << std::endl;
+    throw std::bad_cast();
+  }
+}
+
 std::string
 Variant<std::string>::get() const
 {
@@ -411,7 +529,7 @@ Variant<type_vec_ustring>::create(const type_vec_ustring& data)
 Glib::ustring
 Variant<type_vec_ustring>::get_child(gsize index) const
 {
-  if (index >= g_variant_n_children(const_cast<GVariant*>(gobj())))
+  if (index >= get_n_children())
     throw std::out_of_range(
       "Variant< std::vector<Glib::ustring> >::get_child(): Index out of bounds.");
 
@@ -427,9 +545,7 @@ Variant<type_vec_ustring>::get() const
   // but the Variant can alternatively hold an array of object paths or DBus type signatures.
   type_vec_ustring result;
 
-  gsize n_children = g_variant_n_children(const_cast<GVariant*>(gobj()));
-
-  for (gsize i = 0; i < n_children; i++)
+  for (gsize i = 0, n_children = get_n_children(); i < n_children; ++i)
   {
     GVariant* gvariant = g_variant_get_child_value(const_cast<GVariant*>(gobj()), i);
     result.emplace_back(Glib::Variant<Glib::ustring>(gvariant).get());
@@ -444,6 +560,80 @@ Variant<type_vec_ustring>::get_iter() const
   return VariantContainerBase::get_iter(variant_type());
 }
 
+/*--------------------Variant<std::vector<Glib::DBusObjectPathString>>---------------------*/
+
+using type_vec_opstring = std::vector<Glib::DBusObjectPathString>;
+
+Variant<type_vec_opstring>::Variant() : VariantContainerBase()
+{
+}
+
+Variant<type_vec_opstring>::Variant(GVariant* castitem, bool take_a_reference)
+: VariantContainerBase(castitem, take_a_reference)
+{
+}
+
+// static
+const VariantType&
+Variant<type_vec_opstring>::variant_type()
+{
+  return VARIANT_TYPE_OBJECT_PATH_ARRAY;
+}
+
+// static
+Variant<type_vec_opstring>
+Variant<type_vec_opstring>::create(const type_vec_opstring& data)
+{
+  // Get the variant type of the elements.
+  VariantType element_variant_type = Variant<CppType>::variant_type();
+
+  // Get the variant type of the array.
+  VariantType array_variant_type = Variant<type_vec_opstring>::variant_type();
+
+  // Create a GVariantBuilder to build the array.
+  GVariantBuilder* builder = g_variant_builder_new(array_variant_type.gobj());
+
+  // Add the elements of the vector into the builder.
+  for (const auto& str : data)
+    g_variant_builder_add(builder, element_variant_type.get_string().c_str(), str.c_str());
+
+  // Create the variant using the builder.
+  auto result =
+    Variant<type_vec_opstring>(g_variant_new(array_variant_type.get_string().c_str(), builder));
+
+  g_variant_builder_unref(builder);
+
+  return result;
+}
+
+Glib::DBusObjectPathString
+Variant<type_vec_opstring>::get_child(gsize index) const
+{
+  if (index >= get_n_children())
+    throw std::out_of_range(
+      "Variant< std::vector<Glib::DBusObjectPathString> >::get_child(): Index out of bounds.");
+
+  GVariant* gvariant = g_variant_get_child_value(const_cast<GVariant*>(gobj()), index);
+
+  return Glib::Variant<CppType>(gvariant).get();
+}
+
+type_vec_opstring
+Variant<type_vec_opstring>::get() const
+{
+  gsize n_children = 0;
+  const gchar** children = g_variant_get_objv(const_cast<GVariant*>(gobj()), &n_children);
+  type_vec_opstring result = type_vec_opstring(children, children+n_children);
+  g_free(children);
+  return result;
+}
+
+VariantIter
+Variant<type_vec_opstring>::get_iter() const
+{
+  return VariantContainerBase::get_iter(variant_type());
+}
+
 /*--------------------Variant< std::vector<std::string> >---------------------*/
 
 using type_vec_string = std::vector<std::string>;
@@ -509,7 +699,7 @@ Variant<type_vec_string>::create_from_object_paths(const type_vec_string& data)
 std::string
 Variant<type_vec_string>::get_child(gsize index) const
 {
-  if (index >= g_variant_n_children(const_cast<GVariant*>(gobj())))
+  if (index >= get_n_children())
     throw std::out_of_range(
       "Variant< std::vector<std::string> >::get_child(): Index out of bounds.");
 
@@ -526,9 +716,7 @@ Variant<type_vec_string>::get() const
   // signatures.
   type_vec_string result;
 
-  gsize n_children = g_variant_n_children(const_cast<GVariant*>(gobj()));
-
-  for (gsize i = 0; i < n_children; i++)
+  for (gsize i = 0, n_children = get_n_children(); i < n_children; ++i)
   {
     GVariant* gvariant = g_variant_get_child_value(const_cast<GVariant*>(gobj()), i);
     result.emplace_back(Glib::Variant<std::string>(gvariant).get());
index be7452b..5ec352b 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -20,6 +19,7 @@ _DEFS(glibmm,glib)
 #include <glibmmconfig.h>
 #include <glibmm/varianttype.h>
 #include <glibmm/variantiter.h>
+#include <glibmm/variantdbusstring.h>
 #include <glibmm/refptr.h>
 #include <glibmm/ustring.h>
 #include <glibmm/error.h>
@@ -96,6 +96,29 @@ class VariantBase
     g_variant_get, g_variant_get_va)
 public:
 
+_DEPRECATE_IFDEF_START
+  /** This typedef is just to make it more obvious that
+   * our operator const void* should be used like operator bool().
+   *
+   * @deprecated Use the explicit operator bool() instead.
+   */
+  using BoolExpr = const void*;
+
+  /** Test whether the Variant has an underlying instance.
+   *
+   * Mimics usage of pointers:
+   * @code
+   *   if (variant)
+   *     do_something();
+   * @endcode
+   *
+   * @deprecated Use the explicit operator bool() instead.
+   *
+   * @newin{2,36}
+   */
+   operator BoolExpr() const;
+_DEPRECATE_IFDEF_END
+
    /** Test whether the Variant has an underlying instance.
     *
     * @newin{2,50}
@@ -124,6 +147,7 @@ public:
   _WRAP_METHOD(GVariantClass classify() const, g_variant_classify)
 
   _WRAP_METHOD(gsize get_size() const, g_variant_get_size)
+  _WRAP_METHOD(gconstpointer get_data(), g_variant_get_data, deprecated "Use the const version instead.")
   _WRAP_METHOD(gconstpointer get_data() const, g_variant_get_data, newin "2,46")
   _WRAP_METHOD(Glib::RefPtr<const Glib::Bytes> get_data_as_bytes() const, g_variant_get_data_as_bytes, newin "2,46")
   _WRAP_METHOD(void store(gpointer data) const, g_variant_store)
@@ -288,12 +312,12 @@ public:
    */
   explicit VariantStringBase(GVariant* castitem,  bool take_a_reference = false);
 
-  /** Creates a D-Bus object path variant with the contents of @a string. @a
-   * string must be a valid D-Bus object path. Use is_object_path() if unsure.
+  /** Creates a D-Bus object path variant with the contents of @a object_path.
+   * @a object_path must be a valid D-Bus object path. Use is_object_path() if unsure.
    *
-   * @param output A location in which to store the new object path variant
+   * @param[out] output A location in which to store the new object path variant
    * instance.
-   * @param object_path A normal nul-terminated string.
+   * @param object_path An object path string.
    * @newin{2,28}
    */
   static void create_object_path(VariantStringBase& output,
@@ -302,12 +326,12 @@ public:
 
   _WRAP_METHOD(static bool is_object_path(const std::string& string), g_variant_is_object_path)
 
-  /** Creates a D-Bus type signature variant with the contents of @a string. @a
-   * string must be a valid D-Bus type signature. Use is_signature() if unsure.
+  /** Creates a D-Bus type signature variant with the contents of @a signature.
+   * @a signature must be a valid D-Bus type signature. Use is_signature() if unsure.
    *
-   * @param output A location in which to store the new signature variant
+   * @param[out] output A location in which to store the new signature variant
    * instance.
-   * @param signature A normal nul-terminated string.
+   * @param signature A signature string.
    * @newin{2,28}
    */
   static void create_signature(VariantStringBase& output,
@@ -568,6 +592,103 @@ public:
   _IGNORE(g_variant_get_string, g_variant_dup_string)
 };
 
+//TODO: When we can break ABI, remove this template specialization.
+template<>
+Variant<Glib::ustring> VariantBase::cast_dynamic< Variant<Glib::ustring> >(const VariantBase& v)
+noexcept(false);
+
+/** Specialization of Variant containing a Glib::DBusObjectPathString,
+ * for variants of type object path.
+ * @newin{2,54}
+ * @ingroup Variant
+ */
+template<>
+class Variant<Glib::DBusObjectPathString> : public VariantStringBase
+{
+  // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
+  _CLASS_GENERIC(Variant<Glib::DBusObjectPathString>, GVariant)
+public:
+  using CType = char*;
+  using CppType = Glib::DBusObjectPathString;
+
+  /// Default constructor.
+  Variant();
+
+  /** GVariant constructor.
+   * @param castitem The GVariant to wrap.
+   * @param take_a_reference Whether to take an extra reference of the
+   * GVariant or not (not taking one could destroy the GVariant with the
+   * wrapper).
+   */
+  explicit Variant(GVariant* castitem,  bool take_a_reference = false);
+
+  /** Gets the VariantType.
+   * @return The VariantType.
+   * @newin{2,54}
+   */
+  static const VariantType& variant_type() G_GNUC_CONST;
+
+  /** Creates a new Variant<Glib::DBusObjectPathString>.
+   * @param data The value of the new Variant.
+   * @return The new Variant.
+   * @newin{2,54}
+   */
+  static Variant<CppType> create(const CppType& data);
+
+  //We can't use WRAP_METHOD() here because g_variant_get_string() takes an extra length parameter.
+  /** Gets the contents of the Variant.
+   * @return The contents of the Variant.
+   * @newin{2,54}
+   */
+  CppType get() const;
+};
+
+/** Specialization of Variant containing a Glib::DBusSignatureString,
+ * for variants of type signature.
+ * @newin{2,54}
+ * @ingroup Variant
+ */
+template<>
+class Variant<Glib::DBusSignatureString> : public VariantStringBase
+{
+  // Trick gmmproc into thinking this is derived from GVariant to wrap some methods.
+  _CLASS_GENERIC(Variant<Glib::DBusSignatureString>, GVariant)
+public:
+  using CType = char*;
+  using CppType = Glib::DBusSignatureString;
+
+  /// Default constructor.
+  Variant();
+
+  /** GVariant constructor.
+   * @param castitem The GVariant to wrap.
+   * @param take_a_reference Whether to take an extra reference of the
+   * GVariant or not (not taking one could destroy the GVariant with the
+   * wrapper).
+   */
+  explicit Variant(GVariant* castitem,  bool take_a_reference = false);
+
+  /** Gets the VariantType.
+   * @return The VariantType.
+   * @newin{2,54}
+   */
+  static const VariantType& variant_type() G_GNUC_CONST;
+
+  /** Creates a new Variant<Glib::DBusSignatureString>.
+   * @param data The value of the new Variant.
+   * @return The new Variant.
+   * @newin{2,54}
+   */
+  static Variant<CppType> create(const CppType& data);
+
+  //We can't use WRAP_METHOD() here because g_variant_get_string() takes an extra length parameter.
+  /** Gets the contents of the Variant.
+   * @return The contents of the Variant.
+   * @newin{2,54}
+   */
+  CppType get() const;
+};
+
 /** Specialization of Variant containing a std::string, for variants of type
  * bytestring, string, object path, or signature.
  * See also Variant<Glib::ustring> for UTF-8 strings.
@@ -612,6 +733,11 @@ public:
   _IGNORE(g_variant_get_bytestring, g_variant_dup_bytestring)
 };
 
+//TODO: When we can break ABI, remove this template specialization.
+template<>
+Variant<std::string> VariantBase::cast_dynamic< Variant<std::string> >(const VariantBase& v)
+noexcept(false);
+
 /** Specialization of Variant containing a dictionary entry.  See also
  * Variant< std::map<K, V> >.
  * @newin{2,28}
@@ -794,6 +920,68 @@ public:
   VariantIter get_iter() const;
 };
 
+/** Specialization of Variant containing an array of D-Bus object paths.
+ *
+ * @newin{2,54}
+ * @ingroup Variant
+ */
+template<>
+class Variant<std::vector<Glib::DBusObjectPathString>> : public VariantContainerBase
+{
+public:
+  using CppType = Glib::DBusObjectPathString;
+  using CppContainerType = std::vector<Glib::DBusObjectPathString>;
+
+  /// Default constructor.
+  Variant();
+
+  /** GVariant constructor.
+   * @param castitem The GVariant to wrap.
+   * @param take_a_reference Whether to take an extra reference of the
+   * GVariant or not (not taking one could destroy the GVariant with the
+   * wrapper).
+   */
+  explicit Variant(GVariant* castitem, bool take_a_reference = false);
+
+  /** Gets the VariantType.
+   * @return The VariantType.
+   * @newin{2,54}
+   */
+  static const VariantType& variant_type() G_GNUC_CONST;
+
+  /** Creates a new Variant from an array of strings.
+   * @param data The array to use for creation.
+   * @return The new Variant.
+   * @newin{2,54}
+   */
+  static Variant<CppContainerType> create(const CppContainerType& data);
+
+  /** Gets a specific element of the string array.  It is an error if @a index
+   * is greater than the number of child items in the container.  See
+   * VariantContainerBase::get_n_children().
+   *
+   * This function is O(1).
+   *
+   * @param index The index of the element.
+   * @return The element at index @a index.
+   * @throw std::out_of_range
+   * @newin{2,54}
+   */
+  CppType get_child(gsize index) const;
+
+  /** Gets the string vector of the Variant.
+   * @return The vector.
+   * @newin{2,54}
+   */
+  CppContainerType get() const;
+
+  /** Gets a VariantIter of the Variant.
+   * @return the VariantIter.
+   * @newin{2,54}
+   */
+  VariantIter get_iter() const;
+};
+
 /** Specialization of Variant containing an array of non-UTF-8 strings
  * (byte string arrays).
  * @newin{2,28}
@@ -946,7 +1134,7 @@ public:
 };
 
 /** Specialization of Variant containing a tuple.
- * @newin{2,52}
+ * @newin{2,54}
  * @ingroup Variant
  */
 template <class... Types>
@@ -972,13 +1160,13 @@ public:
   /** Creates a new Variant containing a tuple.
    * @param data The tuple to use for creation.
    * @return The new Variant holding a tuple.
-   * @newin{2,52}
+   * @newin{2,54}
    */
   static Variant<std::tuple<Types...>> create(const std::tuple<Types...>& data);
 
   /** Gets the VariantType.
    * @return The VariantType.
-   * @newin{2,52}
+   * @newin{2,54}
    */
   static const VariantType& variant_type() G_GNUC_CONST;
 
@@ -989,7 +1177,7 @@ public:
    * @param index The index of the element.
    * @return The tuple element at index @a index.
    * @throw std::out_of_range
-   * @newin{2,52}
+   * @newin{2,54}
    */
   template<class T>
   T get_child(gsize index) const;
@@ -999,13 +1187,13 @@ public:
 
   /** Gets the tuple of the Variant.
    * @return The tuple.
-   * @newin{2,52}
+   * @newin{2,54}
    */
   std::tuple<Types...> get() const;
 
   /** Gets a VariantIter of the Variant.
    * @return The VariantIter.
-   * @newin{2,52}
+   * @newin{2,54}
    */
   VariantIter get_iter() const;
 };
@@ -1157,7 +1345,7 @@ Variant< std::vector<T> >::create(const std::vector<T>& data)
 template<class T>
 T Variant< std::vector<T> >::get_child(gsize index) const
 {
-  if(index >= g_variant_n_children(const_cast<GVariant*>(gobj())))
+  if (index >= get_n_children())
     throw std::out_of_range(
       "Variant< std::vector<T> >::get_child(): Index out of bounds.");
 
@@ -1175,9 +1363,7 @@ std::vector<T> Variant< std::vector<T> >::get() const
 {
   std::vector<T> result;
 
-  gsize n_children = g_variant_n_children(const_cast<GVariant*>(gobj()));
-
-  for(gsize i = 0; i < n_children; i++)
+  for (gsize i = 0, n_children = get_n_children(); i < n_children; ++i)
   {
     Glib::Variant<T> variant;
 
index 4247da8..ecdfc73 100644 (file)
@@ -17,8 +17,7 @@ dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 dnl  Lesser General Public License for more details.
 dnl
 dnl  You should have received a copy of the GNU Lesser General Public
-dnl  License along with this library; if not, write to the Free
-dnl  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+dnl  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 include(template.macros.m4)
 
index 959a8e5..5415177 100644 (file)
@@ -17,8 +17,7 @@ dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 dnl  Lesser General Public License for more details.
 dnl
 dnl  You should have received a copy of the GNU Lesser General Public
-dnl  License along with this library; if not, write to the Free
-dnl  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+dnl  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 include(template.macros.m4)
 
index 6e069a3..18224f6 100644 (file)
@@ -12,8 +12,7 @@
  * 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
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index 5974953..1f9a5a1 100644 (file)
@@ -1,19 +1,18 @@
 /*
  * Copyright (C) 2014 The glibmm Development Team
  *
- * This library is free software, ) you can redistribute it and/or
+ * 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.1 of the License, or(at your option) any later version.
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * 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
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/variant.h>
index ca83053..f921b6c 100644 (file)
@@ -1,18 +1,17 @@
 /* Copyright(C) 2010 The glibmm Development Team
  *
- * This library is free software, ) you can redistribute it and/or
+ * 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.1 of the License, or(at your option) any later version.
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/variant.h>
index e72b75c..401bc4a 100644 (file)
@@ -1,18 +1,17 @@
 /* Copyright(C) 2010 The glibmm Development Team
  *
- * This library is free software, ) you can redistribute it and/or
+ * 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.1 of the License, or(at your option) any later version.
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib.h>
index d4032c1..ff1784f 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/varianttype.h>
@@ -113,6 +112,8 @@ const VariantType VARIANT_TYPE_DICTIONARY(G_VARIANT_TYPE_DICTIONARY);
 
 const VariantType VARIANT_TYPE_STRING_ARRAY(G_VARIANT_TYPE_STRING_ARRAY);
 
+const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY(G_VARIANT_TYPE_OBJECT_PATH_ARRAY);
+
 const VariantType VARIANT_TYPE_BYTESTRING(G_VARIANT_TYPE_BYTESTRING);
 
 const VariantType VARIANT_TYPE_BYTESTRING_ARRAY(G_VARIANT_TYPE_BYTESTRING_ARRAY);
index 509eaa6..4a8a355 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 _DEFS(glibmm,glib)
@@ -166,6 +165,8 @@ public:
 // g_variant_type_value() because they don't do that already.
 #m4 _CONVERSION(`const GVariantType*',`VariantType',`Glib::wrap(const_cast<GVariantType*>($3), true)')
   _WRAP_METHOD(VariantType element() const, g_variant_type_element)
+  _WRAP_METHOD(VariantType first() const, g_variant_type_first, deprecated "Use get_item_types() instead.")
+  _WRAP_METHOD(VariantType next () const, g_variant_type_next, deprecated "Use get_item_types() instead.")
   _WRAP_METHOD(gsize n_items() const, g_variant_type_n_items)
   _WRAP_METHOD(VariantType key() const, g_variant_type_key)
   _WRAP_METHOD(VariantType value() const, g_variant_type_value)
@@ -185,7 +186,6 @@ public:
    * @return The item types of this %VariantType, or an empty vector.
    */
   std::vector<VariantType> get_item_types() const;
-  _IGNORE(g_variant_type_first, g_variant_type_next)
 
   // This function is part of unexposed API in gvarianttypeinfo.{h,c} for an
   // also unexposed GVariantTypeInfo structure of glib.
@@ -238,6 +238,8 @@ extern const VariantType VARIANT_TYPE_DICTIONARY;
 
 extern const VariantType VARIANT_TYPE_STRING_ARRAY;
 
+extern const VariantType VARIANT_TYPE_OBJECT_PATH_ARRAY;
+
 extern const VariantType VARIANT_TYPE_BYTESTRING;
 
 extern const VariantType VARIANT_TYPE_BYTESTRING_ARRAY;
index b8c5606..2cb35ab 100644 (file)
@@ -22,7 +22,6 @@ check_PROGRAMS =                              \
        giomm_ioerror_and_iodbuserror/test      \
        giomm_memoryinputstream/test                    \
        giomm_simple/test                       \
-  giomm_stream_vfuncs/test \
        giomm_asyncresult_sourceobject/test     \
        giomm_tls_client/test                   \
        giomm_listmodel/test \
@@ -35,19 +34,21 @@ check_PROGRAMS =                            \
        glibmm_mainloop/test                    \
        glibmm_nodetree/test                    \
        glibmm_object_move/test                 \
-       glibmm_objectbase/test                  \
        glibmm_objectbase_move/test                     \
        glibmm_ustring_compose/test             \
        glibmm_ustring_format/test              \
        glibmm_value/test                       \
+       glibmm_valuearray/test                  \
        glibmm_variant/test                     \
        glibmm_vector/test                      \
        glibmm_bool_vector/test                 \
+       glibmm_bool_arrayhandle/test            \
        glibmm_null_vectorutils/test            \
+       glibmm_null_containerhandle/test        \
        glibmm_refptr/test              \
        glibmm_refptr_sigc_bind/test            \
-       glibmm_bytearray/test                   \
-       glibmm_ustring_make_valid/test
+       glibmm_weakref/test             \
+       glibmm_bytearray/test
 
 TESTS =        $(check_PROGRAMS)
 
@@ -55,9 +56,8 @@ glibmm_includes = -I$(top_builddir)/glib $(if $(srcdir:.=),-I$(top_srcdir)/glib)
 giomm_includes  = -I$(top_builddir)/gio $(if $(srcdir:.=),-I$(top_srcdir)/gio)
 local_cppflags  = -I$(top_builddir) $(glibmm_includes) $(giomm_includes)
 
-cxxflags_disable_deprecated = $(GLIBMM_WXXFLAGS) -DGLIBMM_DISABLE_DEPRECATED -DGIOMM_DISABLE_DEPRECATED
 AM_CPPFLAGS = $(local_cppflags) $(GIOMM_CFLAGS)
-AM_CXXFLAGS = $(GLIBMM_WXXFLAGS) $(cxxflags_disable_deprecated)
+AM_CXXFLAGS = $(GLIBMM_WXXFLAGS) -DGLIBMM_DISABLE_DEPRECATED -DGIOMM_DISABLE_DEPRECATED
 
 
 local_libglibmm = $(top_builddir)/glib/glibmm/libglibmm-$(GLIBMM_API_VERSION).la
@@ -78,9 +78,6 @@ giomm_memoryinputstream_test_LDADD   = $(giomm_ldadd)
 giomm_simple_test_SOURCES  = giomm_simple/main.cc
 giomm_simple_test_LDADD    = $(giomm_ldadd)
 
-giomm_stream_vfuncs_test_SOURCES = giomm_stream_vfuncs/main.cc
-giomm_stream_vfuncs_test_LDADD   = $(giomm_ldadd)
-
 giomm_asyncresult_sourceobject_test_SOURCES  = giomm_asyncresult_sourceobject/main.cc
 giomm_asyncresult_sourceobject_test_LDADD    = $(giomm_ldadd)
 
@@ -99,29 +96,25 @@ glibmm_interface_implementation_test_SOURCES = glibmm_interface_implementation/m
 glibmm_interface_implementation_test_LDADD = $(giomm_ldadd)
 
 glibmm_interface_move_test_SOURCES       = glibmm_interface_move/main.cc
-glibmm_interface_move_test_CXXFLAGS = $(GLIBMM_INTERFACE_TEST_WXXFLAGS) $(cxxflags_disable_deprecated)
-
 glibmm_mainloop_test_SOURCES             = glibmm_mainloop/main.cc
 glibmm_nodetree_test_SOURCES             = glibmm_nodetree/main.cc
-glibmm_object_test_SOURCES               = glibmm_object/main.cc \
-                                          glibmm_object/test_derived_object.h
-glibmm_object_move_test_SOURCES          = glibmm_object_move/main.cc \
-                                          glibmm_object/test_derived_object.h
-glibmm_objectbase_test_SOURCES           = glibmm_objectbase/main.cc \
-                                          glibmm_objectbase/test_derived_objectbase.h
+glibmm_object_move_test_SOURCES          = glibmm_object_move/main.cc
 glibmm_objectbase_move_test_SOURCES      = glibmm_objectbase_move/main.cc
 glibmm_ustring_compose_test_SOURCES      = glibmm_ustring_compose/main.cc
 glibmm_ustring_format_test_SOURCES       = glibmm_ustring_format/main.cc
-glibmm_value_test_SOURCES                = glibmm_value/main.cc
+glibmm_value_test_SOURCES                = glibmm_value/glibmm_value.cc glibmm_value/main.cc
+glibmm_valuearray_test_SOURCES           = glibmm_valuearray/main.cc
 glibmm_variant_test_SOURCES              = glibmm_variant/main.cc
 glibmm_vector_test_SOURCES               = glibmm_vector/main.cc
 glibmm_vector_test_LDADD                 = $(giomm_ldadd)
 glibmm_bool_vector_test_SOURCES          = glibmm_bool_vector/main.cc
+glibmm_bool_arrayhandle_test_SOURCES     = glibmm_bool_arrayhandle/main.cc
 glibmm_null_vectorutils_test_SOURCES     = glibmm_null_vectorutils/main.cc
 glibmm_null_vectorutils_test_LDADD       = $(giomm_ldadd)
+glibmm_null_containerhandle_test_SOURCES = glibmm_null_containerhandle/main.cc
+glibmm_null_containerhandle_test_LDADD   = $(giomm_ldadd)
 glibmm_refptr_test_SOURCES               = glibmm_refptr/main.cc
 glibmm_refptr_sigc_bind_test_SOURCES     = glibmm_refptr_sigc_bind/main.cc
 glibmm_weakref_test_SOURCES              = glibmm_weakref/main.cc
 glibmm_weakref_test_LDADD                = $(giomm_ldadd)
 glibmm_bytearray_test_SOURCES            = glibmm_bytearray/main.cc
-glibmm_ustring_make_valid_test_SOURCES   = glibmm_ustring_make_valid/main.cc
index 1024a05..f40a943 100644 (file)
@@ -39,7 +39,7 @@ void test_store_boundaries()
 {
   auto store = Gio::ListStore<Gio::MenuItem>::create();
   auto item = Gio::MenuItem::create("", "");
-  std::weak_ptr<Gio::MenuItem> weakref_item = item;
+  auto weakref_item = Glib::WeakRef<Gio::MenuItem>(item);
 
   // Remove an item from an empty list.
   store->remove(0);
@@ -84,7 +84,7 @@ void test_store_boundaries()
 
   store.reset();
   item.reset();
-  if (weakref_item.lock())
+  if (weakref_item)
   {
     result = EXIT_FAILURE;
     std::cerr << "test_store_boundaries(), 10: weakref_item is not null" << std::endl;
@@ -116,16 +116,16 @@ void test_store_refcounts()
 
   const std::size_t n_items = 10;
   std::vector<Glib::RefPtr<Gio::MenuItem>> items;
-  std::vector<std::weak_ptr<Gio::MenuItem>> weakref_items;
+  std::vector<Glib::WeakRef<Gio::MenuItem>> weakref_items;
   for (std::size_t i = 0; i < n_items; ++i)
   {
     items.push_back(Gio::MenuItem::create("", ""));
-    weakref_items.emplace_back(items[i]);
+    weakref_items.push_back(Glib::WeakRef<Gio::MenuItem>(items[i]));
     store->append(items[i]);
   }
   check_store_refcounts_n_items(2, store, n_items);
 
-  if (store->get_item(3).get() != items[3].get())
+  if (store->get_item(3).operator->() != items[3].operator->())
   {
     result = EXIT_FAILURE;
     std::cerr << "test_store_refcounts(), 3: get_item(3) != items[3]" << std::endl;
@@ -134,15 +134,25 @@ void test_store_refcounts()
   for (std::size_t i = 0; i < n_items; ++i)
   {
     items[i].reset();
+    if (!weakref_items[i])
+    {
+      result = EXIT_FAILURE;
+      std::cerr << "test_store_refcounts(), 4: weakref_items[" << i << "] is null" << std::endl;
+    }
   }
 
   store->remove(4);
+  if (weakref_items[4])
+  {
+    result = EXIT_FAILURE;
+    std::cerr << "test_store_refcounts(), 5: weakref_items[4] is not null" << std::endl;
+  }
   check_store_refcounts_n_items(6, store, n_items-1);
 
   store.reset();
   for (std::size_t i = 0; i < n_items; ++i)
   {
-    if (weakref_items[i].lock())
+    if (weakref_items[i])
     {
       result = EXIT_FAILURE;
       std::cerr << "test_store_refcounts(), 7: weakref_items[" << i << "] is not null" << std::endl;
@@ -168,8 +178,8 @@ gint32 get_next_number()
 int compare_items1(const Glib::RefPtr<const Glib::Object>& a,
   const Glib::RefPtr<const Glib::Object>& b)
 {
-  const auto action_a = std::dynamic_pointer_cast<const Gio::SimpleAction>(a);
-  const auto action_b = std::dynamic_pointer_cast<const Gio::SimpleAction>(b);
+  const auto action_a = Glib::RefPtr<const Gio::SimpleAction>::cast_dynamic(a);
+  const auto action_b = Glib::RefPtr<const Gio::SimpleAction>::cast_dynamic(b);
   if (!action_a || !action_b)
   {
     result = EXIT_FAILURE;
@@ -218,7 +228,7 @@ void test_store_sorted1()
       result = EXIT_FAILURE;
       std::cerr << "test_store_sorted1(), 2: i=" << i << ", items are not equal" << std::endl;
     }
-    if (a.get() == b.get())
+    if (a.operator->() == b.operator->())
     {
       result = EXIT_FAILURE;
       std::cerr << "test_store_sorted1(), 3: i=" << i << ", items are the same" << std::endl;
@@ -227,7 +237,7 @@ void test_store_sorted1()
     if (i > 0)
     {
       auto c = store->get_item(i * 2 - 1);
-      if (c.get() == a.get() || c.get() == b.get())
+      if (c.operator->() == a.operator->() || c.operator->() == b.operator->())
       {
         result = EXIT_FAILURE;
         std::cerr << "test_store_sorted1(), 4: i=" << i << ", items are the same" << std::endl;
@@ -245,12 +255,12 @@ void test_store_sorted1()
 class MyObject : public Glib::Object
 {
 protected:
-  explicit MyObject(int id) : m_id(id) {}
+  MyObject(int id) : m_id(id) {}
 
 public:
   static Glib::RefPtr<MyObject> create(int id)
   {
-    return Glib::make_refptr_for_instance<MyObject>(new MyObject(id));
+    return Glib::RefPtr<MyObject>(new MyObject(id));
   }
 
   int get_id() const { return m_id; }
@@ -301,7 +311,7 @@ void test_store_sorted2()
       result = EXIT_FAILURE;
       std::cerr << "test_store_sorted2(), 2: i=" << i << ", items are not equal" << std::endl;
     }
-    if (a.get() == b.get())
+    if (a.operator->() == b.operator->())
     {
       result = EXIT_FAILURE;
       std::cerr << "test_store_sorted2(), 3: i=" << i << ", items are the same" << std::endl;
@@ -310,7 +320,7 @@ void test_store_sorted2()
     if (i > 0)
     {
       auto c = store->get_item(i * 2 - 1);
-      if (c.get() == a.get() || c.get() == b.get())
+      if (c.operator->() == a.operator->() || c.operator->() == b.operator->())
       {
         result = EXIT_FAILURE;
         std::cerr << "test_store_sorted2(), 4: i=" << i << ", items are the same" << std::endl;
diff --git a/tests/giomm_stream_vfuncs/main.cc b/tests/giomm_stream_vfuncs/main.cc
deleted file mode 100644 (file)
index df1cde2..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright (C) 2016 The giomm Development Team
- *
- * 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.1 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <giomm.h>
-#include <iostream>
-#include <string>
-#include <cstdlib>
-
-// A simple custom stream that base64 encodes data.
-// Do not copy it to your code, because it's very slow.
-class Base64OutputStream : public Gio::FilterOutputStream
-{
-public:
-  unsigned get_column_width() const { return column_width; }
-  void set_column_width(unsigned cw) { column_width = cw; }
-  static Glib::RefPtr<Base64OutputStream> create(const Glib::RefPtr<OutputStream>& base_stream)
-  {
-    return Glib::make_refptr_for_instance<Base64OutputStream>(new Base64OutputStream(base_stream));
-  }
-
-protected:
-  explicit Base64OutputStream(const Glib::RefPtr<Gio::OutputStream>& base_stream)
-    : Gio::FilterOutputStream(base_stream), column(0), bit_count(0), bit_buffer(0), column_width(72) {}
-
-  gssize write_vfunc(const void* buffer, gsize count, const Glib::RefPtr<Gio::Cancellable>& cancellable) override
-  {
-    char const *byte = (char const *) buffer;
-    for (unsigned i = 0; i < count; ++i, ++byte)
-    {
-      // kindergarten implementation, because the object is not performance :)
-      bit_buffer <<= 8;
-      bit_buffer |= (*byte & 0xff);
-      bit_count += 8;
-
-      if (bit_count == 24)
-      {
-        clear_pending(); // TODO why is this necessary to avoid an outstanding op. exception?
-        flush(cancellable);
-        set_pending();
-        bit_count = 0;
-      }
-
-      if (cancellable && cancellable->is_cancelled())
-        throw Gio::Error(Gio::Error::CANCELLED, "Operation cancelled");
-    }
-    return count;
-  }
-
-  bool flush_vfunc(const Glib::RefPtr<Gio::Cancellable>& cancellable) override
-  {
-    if (bit_count != 24)
-      return true;
-    char to_write[5];
-    gsize len = 4;
-
-    for (unsigned i=0; i<4; ++i)
-    {
-      unsigned index = (bit_buffer & (0x3f<<(i*6))) >> (i*6);
-      to_write[3-i] = base64_encode_str[index];
-    }
-    column += 4;
-    // Yes, I know this is completely wrong.
-    if (column >= column_width)
-    {
-      column = 0;
-      to_write[4] = '\n';
-      ++len;
-    }
-
-    get_base_stream()->write(&to_write, len, cancellable);
-
-    bit_count = 0;
-    bit_buffer = 0;
-
-    return true;
-  }
-
-  bool close_vfunc(const Glib::RefPtr<Gio::Cancellable>& cancellable) override
-  {
-    char to_write[5] = "====";
-    //get any last bytes (1 or 2) out of the buffer
-    switch (bit_count)
-    {
-    case 16:
-      bit_buffer <<= 2;  //pad to make 18 bits
-      to_write[0] = base64_encode_str[(bit_buffer & (0x3f << 12)) >> 12];
-      to_write[1] = base64_encode_str[(bit_buffer & (0x3f << 6)) >> 6];
-      to_write[2] = base64_encode_str[bit_buffer & 0x3f];
-      break;
-
-    case 8:
-      bit_buffer <<= 4; //pad to make 12 bits
-      to_write[0] = base64_encode_str[(bit_buffer & (0x3f << 6)) >> 6];
-      to_write[1] = base64_encode_str[bit_buffer & 0x3f];
-      break;
-    }
-
-    if (bit_count > 0)
-    {
-      get_base_stream()->write(&to_write, 5, cancellable);
-    }
-    else
-    {
-      // null terminate output
-      get_base_stream()->write("", 1, cancellable);
-    }
-    if (get_close_base_stream())
-      get_base_stream()->close(cancellable);
-
-    return true;
-  }
-
-private:
-  static char const *const base64_encode_str;
-  unsigned column;
-  unsigned bit_count;
-  unsigned bit_buffer;
-  unsigned column_width;
-};
-
-char const *const Base64OutputStream::base64_encode_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-int main(int, char**)
-{
-  Glib::init();
-  Gio::init();
-
-  try
-  {
-    char result[256];
-    Glib::RefPtr<Gio::MemoryOutputStream> memory_chunk = Gio::MemoryOutputStream::create(result, 256, nullptr, nullptr);
-    Glib::RefPtr<Base64OutputStream> base64 = Base64OutputStream::create(memory_chunk);
-
-    std::string data = "Custom GIO streams are cool!";
-
-    base64->set_close_base_stream(true);
-    base64->write(data);
-    base64->close();
-
-    const std::string base64_should_be("Q3VzdG9tIEdJTyBzdHJlYW1zIGFyZSBjb29sIQ==");
-    std::cout << "Original data:       " << data << std::endl;
-    std::cout << "base64-encoded data: " << result << std::endl;
-    std::cout << "base64 should be:    " << base64_should_be << std::endl;
-    if (base64_should_be != result)
-    {
-      std::cout << "Not correct!" << std::endl;
-      return EXIT_FAILURE;
-    }
-  }
-  catch (Gio::Error e)
-  {
-    std::cout << "Gio error: " << e.what() << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  return EXIT_SUCCESS;
-}
index 703de75..5f13325 100644 (file)
@@ -77,7 +77,7 @@ main(int, char**)
             << std::endl;
 
   auto socket = Gio::Socket::create(
-    first_inet_address->get_family(), Gio::Socket::Type::STREAM, Gio::Socket::Protocol::TCP);
+    first_inet_address->get_family(), Gio::SOCKET_TYPE_STREAM, Gio::SOCKET_PROTOCOL_TCP);
 
   auto address = Gio::InetSocketAddress::create(first_inet_address, 443);
 
@@ -98,7 +98,7 @@ main(int, char**)
               << address->get_port() << "." << std::endl;
   }
 
-  auto conn = std::dynamic_pointer_cast<Gio::TcpConnection>(Gio::SocketConnection::create(socket));
+  auto conn = Glib::RefPtr<Gio::TcpConnection>::cast_dynamic(Gio::SocketConnection::create(socket));
 
   if (!conn || !conn->is_connected())
   {
@@ -115,7 +115,7 @@ main(int, char**)
   {
     auto tls_connection = Gio::TlsClientConnection::create(conn, address);
 
-    tls_connection->signal_accept_certificate().connect(sigc::ptr_fun(&on_accept_certificate), false);
+    tls_connection->signal_accept_certificate().connect(sigc::ptr_fun(&on_accept_certificate));
 
     tls_connection->handshake();
 
diff --git a/tests/glibmm_bool_arrayhandle/main.cc b/tests/glibmm_bool_arrayhandle/main.cc
new file mode 100644 (file)
index 0000000..5144d26
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright (C) 2011 The glibmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+#include <cstdlib>
+#include <ctime>
+
+#include <iostream>
+
+#include <glibmm.h>
+
+// Use this line if you want debug output:
+// std::ostream& ostr = std::cout;
+
+// This seems nicer and more useful than putting an ifdef around the use of std::cout:
+std::stringstream debug;
+std::ostream& ostr = debug;
+
+const unsigned int magic_limit(5);
+
+void
+setup_rand()
+{
+  static bool setup(false);
+
+  if (!setup)
+  {
+    std::srand(std::time(nullptr));
+    setup = true;
+  }
+}
+
+gboolean*
+c_get_bool_array()
+{
+  gboolean* array(static_cast<gboolean*>(g_malloc((magic_limit + 1) * sizeof(gboolean))));
+
+  setup_rand();
+  for (unsigned int iter(0); iter < magic_limit; ++iter)
+  {
+    array[iter] = std::rand() % 2 ? TRUE : FALSE;
+  }
+  array[magic_limit] = FALSE;
+  return array;
+}
+
+void
+c_print_bool_array(gboolean* array)
+{
+  for (unsigned int iter(0); iter < magic_limit; ++iter)
+  {
+    ostr << iter << ": " << (array[iter] ? "TRUE" : "FALSE") << "\n";
+  }
+}
+
+Glib::ArrayHandle<bool>
+cxx_get_bool_array()
+{
+  return Glib::ArrayHandle<bool>(c_get_bool_array(), magic_limit, Glib::OWNERSHIP_SHALLOW);
+}
+
+void
+cxx_print_bool_array(const Glib::ArrayHandle<bool>& array)
+{
+  c_print_bool_array(const_cast<gboolean*>(array.data()));
+}
+
+int
+main()
+{
+  Glib::init();
+
+  std::vector<bool> v(cxx_get_bool_array());
+  std::list<bool> l(cxx_get_bool_array());
+  std::deque<bool> d(cxx_get_bool_array());
+
+  ostr << "vector:\n";
+  cxx_print_bool_array(v);
+  ostr << "list:\n";
+  cxx_print_bool_array(l);
+  ostr << "deque:\n";
+  cxx_print_bool_array(d);
+
+  return EXIT_SUCCESS;
+}
index 79b286c..0752318 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include <cstdlib>
 #include <ctime>
index e92559c..1e6411d 100644 (file)
@@ -17,7 +17,7 @@ main(int, char**)
   date.subtract_days(1);
   date.add_years(1);
 
-  ostr << "The date a year and a month from yesterday will be: " << date.get_month_as_int() << "/"
+  ostr << "The date a year and a month from yesterday will be: " << date.get_month() << "/"
        << (int)date.get_day() << "/" << date.get_year() << "." << std::endl;
 
   Glib::Date copy_date(date);
@@ -25,7 +25,7 @@ main(int, char**)
 
   assigned_date = copy_date;
 
-  ostr << "The copied date is: " << copy_date.get_month_as_int() << "/" << (int)copy_date.get_day() << "/"
+  ostr << "The copied date is: " << copy_date.get_month() << "/" << (int)copy_date.get_day() << "/"
        << copy_date.get_year() << "." << std::endl;
 
   return EXIT_SUCCESS;
index 16fa72a..c097cbb 100644 (file)
@@ -109,7 +109,7 @@ class TestInterface : public Glib::Interface
 protected:
   using CppClassType = TestInterface_Class;
 
-  TestInterface() : Glib::Interface(derived_interface_class_.init()), i_(0) {}
+  TestInterface() : Glib::Interface(derived_interface_class_.init()) {}
 
 public:
   // A real application would never make the constructor public.
@@ -187,7 +187,7 @@ public:
 
   // A real application would never make the constructor public.
   // It would instead have a protected constructor and a public create() method.
-  explicit DerivedObject(int i)
+  DerivedObject(int i)
   : Glib::ObjectBase(nullptr),
     Glib::Object(Glib::ConstructParams(derived_object_class_.init())),
     i_(i)
index fee12ff..0554c48 100644 (file)
@@ -14,6 +14,7 @@ node_build_string(type_nodetree_string& node, std::string& string)
 int
 main()
 {
+  std::list<std::string> alma;
   std::string tstring, cstring;
   type_nodetree_string* root;
   type_nodetree_string* node;
@@ -49,16 +50,16 @@ main()
   g_assert(root->depth() == 1);
   g_assert(root->get_max_height() == 4);
   g_assert(node_G->first_child()->next_sibling()->depth() == 4);
-  g_assert(root->node_count(type_nodetree_string::TraverseFlags::LEAVES) == 7);
-  g_assert(root->node_count(type_nodetree_string::TraverseFlags::NON_LEAVES) == 4);
-  g_assert(root->node_count(type_nodetree_string::TraverseFlags::ALL) == 11);
+  g_assert(root->node_count(type_nodetree_string::TRAVERSE_LEAVES) == 7);
+  g_assert(root->node_count(type_nodetree_string::TRAVERSE_NON_LEAVES) == 4);
+  g_assert(root->node_count(type_nodetree_string::TRAVERSE_ALL) == 11);
   g_assert(node_F->get_max_height() == 3);
   g_assert(node_G->child_count() == 4);
-  g_assert(root->find_child("F", type_nodetree_string::TraverseFlags::ALL) == node_F);
+  g_assert(root->find_child("F", type_nodetree_string::TRAVERSE_ALL) == node_F);
   g_assert(
-    root->find("I", type_nodetree_string::TraverseType::LEVEL_ORDER, type_nodetree_string::TraverseFlags::NON_LEAVES) == NULL);
+    root->find("I", Glib::TRAVERSE_LEVEL_ORDER, type_nodetree_string::TRAVERSE_NON_LEAVES) == NULL);
   g_assert(
-    root->find("J", type_nodetree_string::TraverseType::IN_ORDER, type_nodetree_string::TraverseFlags::LEAVES) == node_J);
+    root->find("J", Glib::TRAVERSE_IN_ORDER, type_nodetree_string::TRAVERSE_LEAVES) == node_J);
 
   for (guint i = 0; i < node_B->child_count(); i++)
   {
@@ -83,28 +84,28 @@ main()
 
   tstring.clear();
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::PRE_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_PRE_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == "ABCDEFGHIJK");
   tstring.clear();
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::POST_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_POST_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == "CDEBHIJKGFA");
   tstring.clear();
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::IN_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_IN_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == "CBDEAHGIJKF");
   tstring.clear();
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::LEVEL_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_LEVEL_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == "ABFCDEGHIJK");
   tstring.clear();
 
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::LEVEL_ORDER, type_nodetree_string::TraverseFlags::LEAVES, -1);
+    Glib::TRAVERSE_LEVEL_ORDER, type_nodetree_string::TRAVERSE_LEAVES, -1);
   g_assert(tstring == "CDEHIJK");
   tstring.clear();
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::PRE_ORDER, type_nodetree_string::TraverseFlags::NON_LEAVES, -1);
+    Glib::TRAVERSE_PRE_ORDER, type_nodetree_string::TRAVERSE_NON_LEAVES, -1);
   g_assert(tstring == "ABFG");
   tstring.clear();
 
@@ -112,18 +113,18 @@ main()
   node_G->reverse_children();
 
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::LEVEL_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_LEVEL_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == "ABFEDCGKJIH");
   tstring.clear();
 
   node = new type_nodetree_string(*root); // A deep copy.
-  g_assert(root->node_count(type_nodetree_string::TraverseFlags::ALL) ==
-           node->node_count(type_nodetree_string::TraverseFlags::ALL));
+  g_assert(root->node_count(type_nodetree_string::TRAVERSE_ALL) ==
+           node->node_count(type_nodetree_string::TRAVERSE_ALL));
   g_assert(root->get_max_height() == node->get_max_height());
   root->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(tstring)),
-    type_nodetree_string::TraverseType::IN_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_IN_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   node->traverse(sigc::bind(sigc::ptr_fun(node_build_string), std::ref(cstring)),
-    type_nodetree_string::TraverseType::IN_ORDER, type_nodetree_string::TraverseFlags::ALL, -1);
+    Glib::TRAVERSE_IN_ORDER, type_nodetree_string::TRAVERSE_ALL, -1);
   g_assert(tstring == cstring);
 
   delete node;
@@ -142,7 +143,7 @@ main()
       node = node->first_child()->next_sibling();
   }
   g_assert(root->get_max_height() > 100);
-  g_assert(root->node_count(type_nodetree_string::TraverseFlags::ALL) == 1 + 2048);
+  g_assert(root->node_count(type_nodetree_string::TRAVERSE_ALL) == 1 + 2048);
 
   delete root;
 
diff --git a/tests/glibmm_null_containerhandle/main.cc b/tests/glibmm_null_containerhandle/main.cc
new file mode 100644 (file)
index 0000000..513daca
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (C) 2011 The gtkmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glibmm/arrayhandle.h>
+#include <glibmm/listhandle.h>
+#include <glibmm/slisthandle.h>
+
+#include <giomm/credentials.h>
+#include <giomm/init.h>
+
+int
+main()
+{
+  Gio::init();
+  using CrePtr = Glib::RefPtr<Gio::Credentials>;
+
+  std::vector<CrePtr> v1(Glib::ArrayHandle<CrePtr>(nullptr, Glib::OWNERSHIP_DEEP));
+  std::vector<CrePtr> v2(Glib::ArrayHandle<CrePtr>(nullptr, 5, Glib::OWNERSHIP_DEEP));
+  std::vector<CrePtr> v3(Glib::ListHandle<CrePtr>(nullptr, Glib::OWNERSHIP_DEEP));
+  std::vector<CrePtr> v4(Glib::SListHandle<CrePtr>(nullptr, Glib::OWNERSHIP_DEEP));
+  std::vector<bool> v5(Glib::ArrayHandle<bool>(nullptr, Glib::OWNERSHIP_DEEP));
+  std::vector<bool> v6(Glib::ArrayHandle<bool>(nullptr, 5, Glib::OWNERSHIP_DEEP));
+
+  if (v1.empty() && v2.empty() && v3.empty() && v4.empty() && v5.empty() && v6.empty())
+  {
+    return 0;
+  }
+  return 1;
+}
index b658b39..533451f 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glibmm/vectorutils.h>
diff --git a/tests/glibmm_object/main.cc b/tests/glibmm_object/main.cc
deleted file mode 100644 (file)
index aeb71b7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "test_derived_object.h"
-#include <glibmm.h>
-#include <iostream>
-#include <stdlib.h>
-
-static void
-test_object()
-{
-  GObject* gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr));
-  DerivedObject derived(gobject, 5);
-  // std::cout << "debug: gobj(): " << derived.gobj() << std::endl;
-  g_assert(derived.gobj() == gobject);
-}
-
-int
-main(int, char**)
-{
-  Glib::init();
-
-  test_objectbase();
-  test_object();
-
-  return EXIT_SUCCESS;
-}
diff --git a/tests/glibmm_object/test_derived_object.h b/tests/glibmm_object/test_derived_object.h
deleted file mode 100644 (file)
index 4c506b2..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef _GLIBMM_TEST_DERIVED_OBJECT_H
-#define _GLIBMM_TEST_DERIVED_OBJECT_H
-
-#include <glibmm.h>
-
-// A basic derived GObject, just to test Glib::Object.
-typedef struct
-{
-  GObject parent;
-} TestDerived;
-
-typedef struct
-{
-  GObjectClass parent;
-} TestDerivedClass;
-
-#define TEST_TYPE_DERIVED (test_derived_get_type())
-#define TEST_DERIVED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TEST_TYPE_DERIVED, TestDerived))
-#define TEST_DERIVED_CLASS(cls) \
-  (G_TYPE_CHECK_CLASS_CAST((cls), TEST_TYPE_DERIVED, TestDerivedClass))
-#define TEST_DERIVED_GET_CLASS(obj) \
-  (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_DERIVED, TestDerivedClass))
-
-static void
-test_derived_class_init(TestDerivedClass*)
-{
-}
-static void
-test_derived_init(TestDerived*)
-{
-}
-
-G_DEFINE_TYPE(TestDerived, test_derived, G_TYPE_OBJECT)
-
-class DerivedObject : public Glib::Object
-{
-public:
-  // A real application would never make the constructor public.
-  // It would instead have a protected constructor and a public create() method.
-  DerivedObject(GObject* gobject, int i) : Glib::Object(gobject), i_(i) {}
-
-  DerivedObject(const DerivedObject& src) = delete;
-  DerivedObject& operator=(const DerivedObject& src) = delete;
-
-  DerivedObject(DerivedObject&& src) noexcept : Glib::Object(std::move(src)), i_(std::move(src.i_))
-  {
-  }
-
-  DerivedObject& operator=(DerivedObject&& src) noexcept
-  {
-    Glib::Object::operator=(std::move(src));
-    i_ = std::move(src.i_);
-
-    return *this;
-  }
-
-  int i_;
-};
-
-#endif // _GLIBMM_TEST_DERIVED_OBJECT_H
index 1383b74..4f34cb7 100644 (file)
@@ -1,8 +1,61 @@
-#include "../glibmm_object/test_derived_object.h"
 #include <glibmm.h>
 #include <iostream>
 #include <stdlib.h>
 
+// A basic derived GObject, just to test Glib::Object.
+typedef struct
+{
+  GObject parent;
+} TestDerived;
+
+typedef struct
+{
+  GObjectClass parent;
+} TestDerivedClass;
+
+#define TEST_TYPE_DERIVED (test_derived_get_type())
+#define TEST_DERIVED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TEST_TYPE_DERIVED, TestDerived))
+#define TEST_DERIVED_CLASS(cls) \
+  (G_TYPE_CHECK_CLASS_CAST((cls), TEST_TYPE_DERIVED, TestDerivedClass))
+#define TEST_DERIVED_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_DERIVED, TestDerivedClass))
+
+static void
+test_derived_class_init(TestDerivedClass*)
+{
+}
+static void
+test_derived_init(TestDerived*)
+{
+}
+
+G_DEFINE_TYPE(TestDerived, test_derived, G_TYPE_OBJECT)
+
+class DerivedObject : public Glib::Object
+{
+public:
+  // A real application would never make the constructor public.
+  // It would instead have a protected constructor and a public create() method.
+  DerivedObject(GObject* gobject, int i) : Glib::Object(gobject), i_(i) {}
+
+  DerivedObject(const DerivedObject& src) = delete;
+  DerivedObject& operator=(const DerivedObject& src) = delete;
+
+  DerivedObject(DerivedObject&& src) noexcept : Glib::Object(std::move(src)), i_(std::move(src.i_))
+  {
+  }
+
+  DerivedObject& operator=(DerivedObject&& src) noexcept
+  {
+    Glib::Object::operator=(std::move(src));
+    i_ = std::move(src.i_);
+
+    return *this;
+  }
+
+  int i_;
+};
+
 static void
 test_object_move_constructor()
 {
diff --git a/tests/glibmm_objectbase/main.cc b/tests/glibmm_objectbase/main.cc
deleted file mode 100644 (file)
index 9ccf52e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "test_derived_objectbase.h"
-#include "../glibmm_object/test_derived_object.h"
-#include <glibmm.h>
-#include <iostream>
-#include <stdlib.h>
-
-static void
-test_objectbase()
-{
-  GObject* gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr));
-  DerivedObjectBase derived(gobject, 5);
-  // std::cout << "debug: gobj(): " << derived.gobj() << std::endl;
-  g_assert(derived.gobj() == gobject);
-}
-
-int
-main(int, char**)
-{
-  Glib::init();
-
-  test_objectbase();
-
-  return EXIT_SUCCESS;
-}
diff --git a/tests/glibmm_objectbase/test_derived_objectbase.h b/tests/glibmm_objectbase/test_derived_objectbase.h
deleted file mode 100644 (file)
index a4a509a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef _GLIBMM_TEST_DERIVED_OBJECTBASE_H
-#define _GLIBMM_TEST_DERIVED_OBJECTBASE_H
-
-#include <glibmm.h>
-
-class DerivedObjectBase : public Glib::ObjectBase
-{
-public:
-  // A real application would never make the constructor public.
-  // It would instead have a protected constructor and a public create() method.
-  DerivedObjectBase(GObject* gobject, int i) : Glib::ObjectBase(nullptr), i_(i)
-  {
-    Glib::ObjectBase::initialize(gobject);
-  }
-
-  DerivedObjectBase(const DerivedObjectBase& src) = delete;
-  DerivedObjectBase& operator=(const DerivedObjectBase& src) = delete;
-
-  DerivedObjectBase(DerivedObjectBase&& src) noexcept : Glib::ObjectBase(std::move(src)),
-                                                        i_(std::move(src.i_))
-  {
-    ObjectBase::initialize_move(src.gobject_, &src);
-  }
-
-  DerivedObjectBase& operator=(DerivedObjectBase&& src) noexcept
-  {
-    Glib::ObjectBase::operator=(std::move(src));
-    i_ = std::move(src.i_);
-
-    return *this;
-  }
-
-  int i_;
-};
-
-#endif // _GLIBMM_TEST_DERIVED_OBJECTBASE_H
index 79bab6a..697f3cf 100644 (file)
@@ -1,9 +1,66 @@
-#include "../glibmm_objectbase/test_derived_objectbase.h"
-#include "../glibmm_object/test_derived_object.h"
 #include <glibmm.h>
 #include <iostream>
 #include <stdlib.h>
 
+// A basic derived GObject, just to test Glib::ObjectBase.
+typedef struct
+{
+  GObject parent;
+} TestDerived;
+
+typedef struct
+{
+  GObjectClass parent;
+} TestDerivedClass;
+
+#define TEST_TYPE_DERIVED (test_derived_get_type())
+#define TEST_DERIVED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TEST_TYPE_DERIVED, TestDerived))
+#define TEST_DERIVED_CLASS(cls) \
+  (G_TYPE_CHECK_CLASS_CAST((cls), TEST_TYPE_DERIVED, TestDerivedClass))
+#define TEST_DERIVED_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj), TEST_TYPE_DERIVED, TestDerivedClass))
+
+static void
+test_derived_class_init(TestDerivedClass*)
+{
+}
+static void
+test_derived_init(TestDerived*)
+{
+}
+
+G_DEFINE_TYPE(TestDerived, test_derived, G_TYPE_OBJECT)
+
+class DerivedObjectBase : public Glib::ObjectBase
+{
+public:
+  // A real application would never make the constructor public.
+  // It would instead have a protected constructor and a public create() method.
+  DerivedObjectBase(GObject* gobject, int i) : Glib::ObjectBase(nullptr), i_(i)
+  {
+    Glib::ObjectBase::initialize(gobject);
+  }
+
+  DerivedObjectBase(const DerivedObjectBase& src) = delete;
+  DerivedObjectBase& operator=(const DerivedObjectBase& src) = delete;
+
+  DerivedObjectBase(DerivedObjectBase&& src) noexcept : Glib::ObjectBase(std::move(src)),
+                                                        i_(std::move(src.i_))
+  {
+    ObjectBase::initialize_move(src.gobject_, &src);
+  }
+
+  DerivedObjectBase& operator=(DerivedObjectBase&& src) noexcept
+  {
+    Glib::ObjectBase::operator=(std::move(src));
+    i_ = std::move(src.i_);
+
+    return *this;
+  }
+
+  int i_;
+};
+
 static void
 test_objectbase_move_constructor()
 {
index 050db35..53a7449 100644 (file)
@@ -101,18 +101,16 @@ test_refptr_copy_constructor()
   g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
 
   {
-    //The reference count should not change,
-    //because we only take and release a single reference:
     Glib::RefPtr<Something> refSomething2(refSomething);
-    g_assert_cmpint(refSomething->ref_count(), ==, 1);
-    g_assert_cmpint(refSomething2->ref_count(), ==, 1);
-    g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+    g_assert_cmpint(refSomething->ref_count(), ==, 2);
+    g_assert_cmpint(refSomething2->ref_count(), ==, 2);
+    g_assert_cmpint(refSomething->max_ref_count(), ==, 2);
   }
 
   // Test the refcount after other references should have been released
   // when other RefPtrs went out of scope:
   g_assert_cmpint(refSomething->ref_count(), ==, 1);
-  g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+  g_assert_cmpint(refSomething->max_ref_count(), ==, 2);
 }
 
 static void
@@ -123,18 +121,16 @@ test_refptr_assignment_operator()
   g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
 
   {
-    //The reference count should not change,
-    //because we only take and release a single reference:
     Glib::RefPtr<Something> refSomething2 = refSomething;
-    g_assert_cmpint(refSomething->ref_count(), ==, 1);
-    g_assert_cmpint(refSomething2->ref_count(), ==, 1);
-    g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+    g_assert_cmpint(refSomething->ref_count(), ==, 2);
+    g_assert_cmpint(refSomething2->ref_count(), ==, 2);
+    g_assert_cmpint(refSomething->max_ref_count(), ==, 2);
   }
 
   // Test the refcount after other references should have been released
   // when other RefPtrs went out of scope:
   g_assert_cmpint(refSomething->ref_count(), ==, 1);
-  g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+  g_assert_cmpint(refSomething->max_ref_count(), ==, 2);
 }
 
 static Glib::RefPtr<Something>
@@ -143,7 +139,7 @@ get_something()
   static Glib::RefPtr<Something> something_to_get;
 
   // Reinitialize it each time:
-  something_to_get = Glib::make_refptr_for_instance<Something>(new Something());
+  something_to_get = Glib::RefPtr<Something>(new Something());
 
   return something_to_get;
 }
@@ -152,25 +148,23 @@ static void
 test_refptr_with_parent_copy_constructor()
 {
   // We use get_something() because test_refptr_with_parent_move_constructor() does.
-  //The reference count should not change,
-  //because we only take and release a single reference:
   Glib::RefPtr<Something> refSomething = get_something();
-  g_assert_cmpint(refSomething->ref_count(), ==, 1);
-  g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+  g_assert_cmpint(refSomething->ref_count(), ==, 2); // 1 here and 1 inside get_something()
+  g_assert_cmpint(refSomething->max_ref_count(), ==, 2);
 
   {
     Parent parent(refSomething);
     g_assert(!parent.was_constructed_via_move_constructor());
     g_assert(parent.was_constructed_via_copy_constructor());
     g_assert_cmpint(
-      parent.something_ref_count(), ==, 1);
-    g_assert_cmpint(parent.something_max_ref_count(), ==, 1);
+      parent.something_ref_count(), ==, 3); // 1 here, 1 in parent, and 1 inside get_something()
+    g_assert_cmpint(parent.something_max_ref_count(), ==, 3);
   }
 
   // Test the refcount after other references should have been released
   // when other RefPtrs went out of scope:
-  g_assert_cmpint(refSomething->ref_count(), ==, 1);
-  g_assert_cmpint(refSomething->max_ref_count(), ==, 1);
+  g_assert_cmpint(refSomething->ref_count(), ==, 2); // 1 here and 1 inside get_something()
+  g_assert_cmpint(refSomething->max_ref_count(), ==, 3);
 }
 
 static void
@@ -179,8 +173,8 @@ test_refptr_with_parent_move_constructor()
   Parent parent(get_something());
   g_assert(parent.was_constructed_via_move_constructor());
   g_assert(!parent.was_constructed_via_copy_constructor());
-  g_assert_cmpint(parent.something_ref_count(), ==, 1);
-  g_assert_cmpint(parent.something_max_ref_count(), ==, 1);
+  g_assert_cmpint(parent.something_ref_count(), ==, 2); // 1 in parent and 1 inside get_something()
+  g_assert_cmpint(parent.something_max_ref_count(), ==, 2);
 }
 
 static void
diff --git a/tests/glibmm_ustring_make_valid/main.cc b/tests/glibmm_ustring_make_valid/main.cc
deleted file mode 100644 (file)
index 3f94122..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <iostream>
-#include <glibmm.h>
-
-int
-main()
-{
-  Glib::init();
-
-    //                        0-1: bad character
-  const char not_utf8[] = { '\x80',
-    //                        1-4: good three bytes (one character)
-    '\xef', '\x80', '\x80',
-    //                        4-5: bad character
-    '\xef',
-    //                        5-6: bad character
-    '\x80',
-    //                        6-7: good character
-    'a',
-    //                        7-8: bad character
-    '\0',
-    //                        8-9: good character
-    'd',
-    //                        9-10: bad character
-    '\x80',
-    //                        10-13: good three bytes (one character)
-    '\xef', '\x80', '\x80',
-    //                        13-15: two bad characters
-    '\xef', '\x80'
-  };
-
-  const char fixed_utf8[] = { '\xef', '\xbf', '\xbd',
-    '\xef', '\x80', '\x80',
-    '\xef', '\xbf', '\xbd',
-    '\xef', '\xbf', '\xbd',
-    'a',
-    '\xef', '\xbf', '\xbd',
-    'd',
-    '\xef', '\xbf', '\xbd',
-    '\xef', '\x80', '\x80',
-    '\xef', '\xbf', '\xbd',
-    '\xef', '\xbf', '\xbd'
-  };
-
-  // const char repl_character[] = {'\xef', '\xbf', '\xbd'};
-  const Glib::ustring s(not_utf8, not_utf8 + sizeof not_utf8);
-  g_assert(s.validate() == false);
-
-  const Glib::ustring good_one = s.make_valid();
-  g_assert(s.validate() == false); // we make a copy
-  g_assert(good_one.validate());   // this one is good!
-
-  const Glib::ustring correct_output(fixed_utf8,
-      fixed_utf8 + sizeof fixed_utf8);
-  g_assert(correct_output.validate());
-  g_assert(correct_output == good_one);
-
-  return EXIT_SUCCESS;
-}
diff --git a/tests/glibmm_value/glibmm_value.cc b/tests/glibmm_value/glibmm_value.cc
new file mode 100644 (file)
index 0000000..1f598a3
--- /dev/null
@@ -0,0 +1,32 @@
+
+#include <glibmm.h>
+
+struct Foo
+{
+  int bar;
+};
+
+namespace Gtk
+{
+class Widget;
+}
+
+void
+some_method()
+{
+  // custom copyable
+  Glib::Value<Foo> value_foo;
+
+  // custom pointer
+  Glib::Value<Foo*> value_foo_pointer;
+  Glib::Value<const Foo*> value_foo_const_pointer;
+
+  // Glib::Object pointer
+  Glib::Value<Gtk::Widget*> value_widget_pointer;
+  Glib::Value<const Gtk::Widget*> value_widget_const_pointer;
+}
+
+// Glib::Object RefPtr<>
+
+// template Glib::Value< Glib::RefPtr<Gdk::Pixbuf> >;
+// template Glib::Value< Glib::RefPtr<const Gdk::Pixbuf> >;
index a824f94..7682ffd 100644 (file)
@@ -1,156 +1,8 @@
-#include "../glibmm_object/test_derived_object.h"
-#include <glibmm.h>
-#include <cassert>
-
-struct Foo
-{
-  int bar = 1;
-};
-
-namespace Gtk
-{
-
-class Widget {
-};
 
-}
+#include <glibmm.h>
 
-void
-test()
+int
+main(int, char**)
 {
-  {
-    Foo foo;
-
-    // custom copyable
-    Glib::Value<Foo> value;
-    value.init(Glib::Value<Foo>::value_type()); // TODO: Avoid this step?
-    value.set(foo);
-
-    const auto v = value.get();
-    assert(v.bar == 1);
-  }
-
-  {
-    Foo foo;
-
-    // custom pointer
-    Glib::Value<Foo*> value;
-    value.init(Glib::Value<Foo*>::value_type()); // TODO: Avoid this step?
-    value.set(&foo);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    Foo foo;
-
-    Glib::Value<const Foo*> value;
-    value.init(Glib::Value<const Foo*>::value_type()); // TODO: Avoid this step?
-    value.set(&foo);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    Gtk::Widget widget;
-
-    // Glib::Object pointer
-    Glib::Value<Gtk::Widget*> value;
-    value.init(Glib::Value<Gtk::Widget*>::value_type()); // TODO: Avoid this step?
-    value.set(&widget);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    Gtk::Widget widget;
-
-    Glib::Value<const Gtk::Widget*> value;
-    value.init(Glib::Value<const Gtk::Widget*>::value_type()); // TODO: Avoid this step?
-    value.set(&widget);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  Glib::init();
-
-  // TODO: Put this test, of internal stuff, somewhere else.
-  static_assert(Glib::Traits::HasGetBaseType<DerivedObject, GType()>::value,
-    "DerivedObject has no get_base_type().");
-
-  // RefPtr to Glib::ObjectBase-derived type:
-  {
-    GObject* gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr));
-    auto derived = Glib::make_refptr_for_instance(new DerivedObject(gobject, 5));
-
-    using ValueType = Glib::Value<Glib::RefPtr<DerivedObject>>;
-    ValueType value;
-    value.init(ValueType::value_type()); // TODO: Avoid this step?
-
-    // Check that value_type() returns the type of the underlying GObjectBase,
-    // not a custom GType for the Glib::RefPtr:
-    assert(ValueType::value_type() == DerivedObject::get_base_type());
-
-    value.set(derived);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    GObject* gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr));
-    auto derived = Glib::make_refptr_for_instance(new DerivedObject(gobject, 5));
-
-    using ValueType = Glib::Value<Glib::RefPtr<const DerivedObject>>;
-    ValueType value;
-    value.init(ValueType::value_type()); // TODO: Avoid this step?
-
-    // Check that value_type() returns the type of the underlying GObjectBase,
-    // not a custom GType for the Glib::RefPtr:
-    assert(ValueType::value_type() == DerivedObject::get_base_type());
-
-    value.set(derived);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    auto foo = std::make_shared<Foo>();
-
-    // custom pointer
-    Glib::Value<std::shared_ptr<Foo>> value;
-    value.init(Glib::Value<std::shared_ptr<Foo>>::value_type()); // TODO: Avoid this step?
-    value.set(foo);
-
-    const auto v = value.get();
-    assert(v);
-  }
-
-  {
-    auto foo = std::make_shared<Foo>();
-
-    Glib::Value<std::shared_ptr<const Foo>> value;
-    value.init(Glib::Value<std::shared_ptr<const Foo>>::value_type()); // TODO: Avoid this step?
-    value.set(foo);
-
-    const auto v = value.get();
-    assert(v);
-  }
-}
-
-// Glib::Object RefPtr<>
-
-// template Glib::Value< Glib::RefPtr<Gdk::Pixbuf> >;
-// template Glib::Value< Glib::RefPtr<const Gdk::Pixbuf> >;
-//
-
-int main() {
-  test();
-
   return EXIT_SUCCESS;
 }
diff --git a/tests/glibmm_valuearray/main.cc b/tests/glibmm_valuearray/main.cc
new file mode 100644 (file)
index 0000000..b9fc12a
--- /dev/null
@@ -0,0 +1,102 @@
+// Glib::ValueArray is deprecated, but let's keep the test.
+// The recommended replacement is std::vector<> which requires no test here.
+#undef GLIBMM_DISABLE_DEPRECATED
+
+#include <glibmm.h>
+#include <iostream>
+
+#ifdef GLIBMM_DISABLE_DEPRECATED
+int
+main(int, char**)
+{
+  // If glibmm is configured with --disable-deprecated-api, GLIBMM_DISABLE_DEPRECATED
+  // is defined in glibmm.h (actually in glibmmconfig.h). The undef at the start of
+  // this file has no effect.
+  return 77; // Tell automake's test harness to skip this test.
+}
+
+#else
+
+// Use this line if you want debug output:
+// std::ostream& ostr = std::cout;
+
+// This seems nicer and more useful than putting an ifdef around the use of ostr:
+std::stringstream debug;
+std::ostream& ostr = debug;
+
+int
+on_compare(const Glib::ValueBase& v1, const Glib::ValueBase& v2)
+{
+  const Glib::Value<int>& intVal1 = static_cast<const Glib::Value<int>&>(v1);
+  const Glib::Value<int>& intVal2 = static_cast<const Glib::Value<int>&>(v2);
+
+  int int1 = intVal1.get();
+  int int2 = intVal2.get();
+
+  if (int1 < int2)
+    return -1;
+  else if (int1 == int2)
+    return EXIT_SUCCESS;
+  else
+    return 1;
+}
+
+int
+main(int, char**)
+{
+  const int VALUES_COUNT = 10;
+
+  Glib::init();
+
+  Glib::Value<int> values[VALUES_COUNT];
+  Glib::ValueArray array;
+
+  for (int i = 0; i < VALUES_COUNT; i++)
+  {
+    values[i].init(Glib::Value<int>::value_type());
+    values[i].set(i + 1); //  (i + 1) ==> Set to natural counting numbers.
+    array.prepend(values[i]);
+  }
+
+  ostr << "Array members before sorting:" << std::endl;
+
+  for (int i = 0; i < VALUES_COUNT; i++)
+  {
+    Glib::ValueBase value;
+
+    if (!array.get_nth(i, value))
+    {
+      std::cerr << "Error getting element " << i << " of value array." << std::endl;
+      return EXIT_FAILURE;
+      break;
+    }
+
+    auto int_val = static_cast<Glib::Value<int>&>(value);
+    ostr << int_val.get() << " ";
+  }
+  ostr << std::endl; // End of line for list of array elements.
+
+  // Sort array and remove last element:
+  array.sort(sigc::ptr_fun(&on_compare)).remove(VALUES_COUNT - 1);
+
+  ostr << "Array members after sorting without last element:" << std::endl;
+
+  for (int i = 0; i < VALUES_COUNT - 1; i++)
+  {
+    Glib::ValueBase value;
+
+    if (!array.get_nth(i, value))
+    {
+      std::cerr << "Error getting element " << i << " of value array." << std::endl;
+      return EXIT_FAILURE;
+      break;
+    }
+
+    auto int_val = static_cast<Glib::Value<int>&>(value);
+    ostr << int_val.get() << " ";
+  }
+  ostr << std::endl; // End of line for list of array elements.
+
+  return EXIT_SUCCESS;
+}
+#endif // GLIBMM_DISABLE_DEPRECATED
index 4d3c2c7..7431a9a 100644 (file)
@@ -14,7 +14,7 @@ static void test_dynamic_cast();
 namespace
 {
 
-int test_tuple()
+bool test_tuple()
 {
   using TupleType = std::tuple<guint16, Glib::ustring, bool>;
   using MapType = std::map<guint16, TupleType>;
@@ -70,7 +70,54 @@ int test_tuple()
   ostr << "Extracted tuple2: (" << q4 << ", " << s4 << ", " << b4 << ")" << std::endl;
   result_ok &= q4 == q2 && s4 == s2 && b4 == b2;
 
-  return result_ok ? EXIT_SUCCESS : EXIT_FAILURE;
+  return result_ok;
+}
+
+bool test_object_path()
+{
+  bool result_ok = true;
+
+  // Object path vector
+  std::vector<Glib::DBusObjectPathString> vec1 {"/object/path1", "/object/path_two", "/object/pathIII" };
+  auto variantvec1 = Glib::Variant<std::vector<Glib::DBusObjectPathString>>::create(vec1);
+
+  auto vec2 = variantvec1.get();
+  ostr << "Extracted object paths: " << vec2[0] << ", " << vec2[1] << ", " << vec2[2] << std::endl;
+
+  for (std::size_t i = 0; i < vec1.size(); ++i)
+    result_ok &= vec1[i] == vec2[i];
+
+  // Complicated structure of variant type a{oa{sa{sv}}}
+  // Glib::Variant<std::map<Glib::DBusObjectPathString, std::map<Glib::ustring, std::map<Glib::ustring, Glib::VariantBase>>>>
+  using three_leveled_map =
+    std::map<Glib::DBusObjectPathString, std::map<Glib::ustring, std::map<Glib::ustring, Glib::VariantBase>>>;
+
+  // Create the map
+  std::map<Glib::ustring, Glib::VariantBase> map1;
+  map1["map1_1"] = Glib::Variant<Glib::ustring>::create("value1");
+  std::map<Glib::ustring, std::map<Glib::ustring, Glib::VariantBase>> map2;
+  map2["map2_1"] = map1;
+  three_leveled_map map3;
+  map3["/map3/path1"] = map2;
+  // Create the corresponding Variant and check its type
+  auto variantmap = Glib::Variant<three_leveled_map>::create(map3);
+  ostr << "variantmap.get_type_string() = " << variantmap.get_type_string() << std::endl;
+  result_ok &= variantmap.get_type_string() == "a{oa{sa{sv}}}";
+  // Extract the map and check that the stored value remains.
+  auto map4 = variantmap.get();
+  auto variant1 = map4["/map3/path1"]["map2_1"]["map1_1"];
+  ostr << "variant1.get_type_string() = " << variant1.get_type_string() << std::endl;
+  auto variantstring = Glib::VariantBase::cast_dynamic<Glib::Variant<Glib::ustring>>(variant1);
+  if (variantstring && variantstring.get_type_string() == "s")
+  {
+    ostr << "Extracted map value: " << variantstring.get() << std::endl;
+    result_ok &= variantstring.get() == "value1";
+  }
+  else
+  {
+    result_ok = false;
+  }
+  return result_ok;
 }
 
 } // anonymous namespace
@@ -227,7 +274,9 @@ main(int, char**)
   test_variant_floating();
   test_dynamic_cast();
 
-  return test_tuple();
+  bool result_ok = test_tuple();
+  result_ok &= test_object_path();
+  return result_ok ? EXIT_SUCCESS : EXIT_FAILURE;
 }
 
 // Test casting of multiple types to a ustring:
@@ -465,7 +514,7 @@ get_log_flags()
 
 struct WarnCatcher
 {
-  explicit WarnCatcher(const std::string& domain)
+  WarnCatcher(const std::string& domain)
   : m_domain(domain), m_old_flags(g_log_set_fatal_mask(m_domain.c_str(), get_log_flags()))
   {
   }
index e4e779c..31138cf 100644 (file)
@@ -11,8 +11,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 // ugly code ahead.
diff --git a/tests/glibmm_weakref/main.cc b/tests/glibmm_weakref/main.cc
new file mode 100644 (file)
index 0000000..20a8031
--- /dev/null
@@ -0,0 +1,174 @@
+/* Copyright (C) 2015 The glibmm Development Team
+ *
+ * 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.1 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <cstring>
+#include <giomm.h> //There is no class derived from Glib::Object in glibmm
+#include <glibmm.h>
+#include <iostream>
+#include <utility> // std::move
+
+int
+main(int, char**)
+{
+  Glib::init();
+  bool success = true;
+
+  // A Glib::WeakRef cannot be created from a Glib::RefPtr<Glib::Bytes>,
+  // because Glib::Bytes is not derived from Glib::ObjectBase.
+  // const int bdata = 1234;
+  // Glib::RefPtr<Glib::Bytes> bytes = Glib::Bytes::create(&bdata, sizeof bdata);
+  // Glib::WeakRef<Glib::Bytes> weakbytes = bytes; // does not compile
+
+  // Gio::MemoryInputStream
+  Glib::RefPtr<Gio::MemoryInputStream> memstream1 = Gio::MemoryInputStream::create();
+  const char data[] = "Some arbitrary data";
+  memstream1->add_data(data, sizeof data, Gio::MemoryInputStream::SlotDestroyData());
+
+  // Downcast copy, followed by upcast.
+  Glib::WeakRef<Gio::MemoryInputStream> weakmemstream1 = memstream1;
+  Glib::WeakRef<Gio::InputStream> weakstream1 = weakmemstream1;
+  Glib::WeakRef<Gio::MemoryInputStream> weakmemstream2 =
+    Glib::WeakRef<Gio::MemoryInputStream>::cast_dynamic(weakstream1);
+  Glib::RefPtr<Gio::MemoryInputStream> memstream2 = weakmemstream2.get();
+  if (memstream2)
+  {
+    char buffer[200];
+    gsize bytes_read = 0;
+    try
+    {
+      memstream2->read_all(buffer, sizeof buffer, bytes_read);
+      std::cout << buffer << std::endl;
+      success &= std::strcmp(buffer, data) == 0;
+    }
+    catch (const Glib::Error& ex)
+    {
+      std::cout << "Error reading from memory stream: " << ex.what() << std::endl;
+      success = false;
+    }
+  }
+  else
+  {
+    std::cout << "!memstream2" << std::endl;
+    success = false;
+  }
+
+  // Move construction.
+  Glib::WeakRef<Gio::MemoryInputStream> weakmemstream3(std::move(weakmemstream1));
+  if (weakmemstream1.get() || !weakmemstream3.get())
+  {
+    success = false;
+    if (weakmemstream1.get())
+      std::cout << "weakmemstream1 || !weakmemstream3: weakmemstream1" << std::endl;
+    if (!weakmemstream3.get())
+      std::cout << "weakmemstream1 || !weakmemstream3: !weakmemstream3" << std::endl;
+  }
+  else
+  {
+    // Move assignment.
+    weakmemstream2 = std::move(weakmemstream3);
+    if (!weakmemstream2 || weakmemstream3)
+    {
+      success = false;
+      if (!weakmemstream2.get())
+        std::cout << "!weakmemstream2 || weakmemstream3: !weakmemstream2" << std::endl;
+      if (weakmemstream3.get())
+        std::cout << "!weakmemstream2 || weakmemstream3: weakmemstream3" << std::endl;
+    }
+    else
+    {
+      // Downcast move, followed by upcast.
+      weakstream1 = std::move(weakmemstream2);
+      weakmemstream1 = Glib::WeakRef<Gio::MemoryInputStream>::cast_dynamic(weakstream1);
+      if (weakmemstream2 || !weakmemstream1)
+      {
+        success = false;
+        if (weakmemstream2)
+          std::cout << "weakmemstream2 || !weakmemstream1: weakmemstream2" << std::endl;
+        if (!weakmemstream1)
+          std::cout << "weakmemstream2 || !weakmemstream1: !weakmemstream1" << std::endl;
+      }
+    }
+  }
+
+  // Gio::SimpleAction
+  Glib::RefPtr<Gio::SimpleAction> action1 = Gio::SimpleAction::create("Action1");
+
+  Glib::ustring name = action1->get_name();
+  std::cout << "The name is '" << name << "'." << std::endl;
+  success &= name == "Action1";
+
+  Glib::WeakRef<Gio::SimpleAction> weakaction1 = action1;
+  Glib::WeakRef<Gio::SimpleAction> weakaction2 = weakaction1;
+
+  // A second RefPtr
+  Glib::RefPtr<Gio::SimpleAction> action2 = weakaction1.get();
+  if (action2)
+  {
+    name = action2->get_name();
+    std::cout << "The name is '" << name << "'." << std::endl;
+    success &= name == "Action1";
+  }
+  else
+  {
+    std::cout << "!action2" << std::endl;
+    success = false;
+  }
+
+  weakaction1.reset();
+  if (weakaction1.get())
+  {
+    std::cout << "weakaction1" << std::endl;
+    success = false;
+  }
+
+  action2 = weakaction2.get();
+  if (action2)
+  {
+    name = action2->get_name();
+    std::cout << "The name is '" << name << "'." << std::endl;
+    success &= name == "Action1";
+  }
+  else
+  {
+    std::cout << "!action2" << std::endl;
+    success = false;
+  }
+
+  // Reset one of the RefPtrs. One remains.
+  action1.reset();
+  action2 = weakaction2.get();
+  if (action2)
+  {
+    name = action2->get_name();
+    std::cout << "The name is '" << name << "'." << std::endl;
+    success &= name == "Action1";
+  }
+  else
+  {
+    std::cout << "!action2" << std::endl;
+    success = false;
+  }
+
+  // Reset the other RefPtr as well.
+  action2.reset();
+  if (weakaction2.get())
+  {
+    std::cout << "weakaction2" << std::endl;
+    success = false;
+  }
+
+  return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
index 77b2a32..af53de8 100644 (file)
@@ -34,16 +34,16 @@ dist_noinst_DATA    = README TODO
 dist_noinst_SCRIPTS = enum.pl
 
 noinst_PROGRAMS = extra_defs_gen/generate_defs_glib extra_defs_gen/generate_defs_gio
-lib_LTLIBRARIES = extra_defs_gen/libglibmm_generate_extra_defs-2.54.la
+lib_LTLIBRARIES = extra_defs_gen/libglibmm_generate_extra_defs-2.4.la
 
 extradefs_includedir      = $(includedir)/$(GLIBMM_MODULE_NAME)/glibmm_generate_extra_defs
 extradefs_include_HEADERS = extra_defs_gen/generate_extra_defs.h
 
 extradefs_ldflags = -no-undefined -version-info $(LIBGLIBMM_SO_VERSION)
 
-extra_defs_gen_libglibmm_generate_extra_defs_2_54_la_SOURCES = extra_defs_gen/generate_extra_defs.cc
-extra_defs_gen_libglibmm_generate_extra_defs_2_54_la_LDFLAGS = $(extradefs_ldflags)
-extra_defs_gen_libglibmm_generate_extra_defs_2_54_la_LIBADD  = $(GLIBMM_LIBS)
+extra_defs_gen_libglibmm_generate_extra_defs_2_4_la_SOURCES = extra_defs_gen/generate_extra_defs.cc
+extra_defs_gen_libglibmm_generate_extra_defs_2_4_la_LDFLAGS = $(extradefs_ldflags)
+extra_defs_gen_libglibmm_generate_extra_defs_2_4_la_LIBADD  = $(GLIBMM_LIBS)
 
 extra_defs_gen_generate_defs_glib_SOURCES = extra_defs_gen/generate_defs_glib.cc
 extra_defs_gen_generate_defs_glib_LDADD   = $(GLIBMM_LIBS) $(lib_LTLIBRARIES)
index e59c13c..bc0ace8 100644 (file)
@@ -13,8 +13,7 @@
 # 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+# License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #
 #
 #
index 8b52d8c..1b42a97 100755 (executable)
@@ -19,6 +19,8 @@ my $module = "none";
 my $help = 0;
 # if user wants to omit deprecated stuff.
 my $omit = 0;
+# A long warning is printed at most once.
+my $has_warned_unknown_token = 0;
 #
 # prototypes.
 #
@@ -196,6 +198,8 @@ sub process($$)
   my $unknown_val = "";
   my $unknown_base = "";
   my $unknown_increment = 0;
+  # Part of a regular expression
+  my $optional_cast = '(?:\([a-z ]+\)\s*)?';
 
   my @lines = split(/,/, $line);
   my $iter = 0;
@@ -209,15 +213,15 @@ sub process($$)
     # except '(' and ')' enum values
     if ($lines[$iter] =~ /^\s*\S+\s*=\s*'[\(\)]'$/)
     {
-       $iter++;
+      $iter++;
     }
     else
     {
       do
       {
         $brackets_count += () = $lines[$iter] =~ /\(/g;
-       $brackets_count -= () = $lines[$iter] =~ /\)/g;
-       $iter++;
+        $brackets_count -= () = $lines[$iter] =~ /\)/g;
+        $iter++;
       } while ($iter < scalar @lines && $brackets_count != 0);
     }
 
@@ -249,7 +253,7 @@ sub process($$)
     # or 1 << 2 or (1 << 4) or (1 << 5) - 1].
     elsif ($i =~ /^(\S+)\s*=?\s*(0x[0-9a-fA-F]+[\s0-9a-fx<-]*)$/ or
            $i =~ /^(\S+)\s*=?\s*(-?\s*[0-9]+)$/ or
-           $i =~ /^(\S+)\s*=?\s*(\(?1\s*<<\s*[0-9]+\s*\)?[\s0-9a-fx<-]*)$/
+           $i =~ /^(\S+)\s*=?\s*($optional_cast\(?1[uU]?\s*<<\s*[0-9]+\s*\)?[\s0-9a-fx<-]*)$/
           )
     {
       my ($tmp1, $tmp2) = ($1, $2);
@@ -260,8 +264,11 @@ sub process($$)
       {
         $tmp2 =~ s/\s+//;
       }
-      eval("\$val = $tmp2;");
-      if ($tmp2 =~ /^\(?1\s*<</)
+      my $tmp3 = $tmp2;
+      # Perl does not understand C-style cast or the u suffix for unsigned.
+      $tmp3 =~ s/$optional_cast(\(?1)[uU]/$1/;
+      eval("\$val = $tmp3;");
+      if ($tmp2 =~ /^$optional_cast\(?1[uU]?\s*<</)
       {
         $e_h{"flags"} += 10;
       }
@@ -302,17 +309,22 @@ sub process($$)
       foreach my $tmpval (@tmps)
       {
         # if r-value is something like MY_FLAG or MY_DEFINE_VALUE3.
-        if ($tmpval =~ /([_A-Z0-9]+)/)
+        if ($tmpval =~ /([A-Z][_A-Z0-9]+)/)
         {
           my $tmp3 = $1;
           unless (defined($tokens{$tmp3}))
           {
             $dont_eval = 1;
-            print STDERR "WARNING: " . $tmp3 . " value of " . $tmp1 . " element in '" . $c_name . "' enum is an unknown token.\n" .
-                  "It probably is one of below:\n" .
-                  "         - preprocessor value - make sure that header defining this value is included in sources wrapping " . $c_name . ".\n" .
-                  "         - enum value from other header or module - see 'preprocessor value'.\n" .
-                  "         - typo (happens rarely) - send a patch fixing this to maintainer of this module.\n";
+            print STDERR "WARNING: " . $tmp3 . " value of " . $tmp1 . " element in '" . $c_name . "' enum is an unknown token.\n";
+            unless ($has_warned_unknown_token)
+            {
+              # Print this at most once.
+              print STDERR "It probably is one of:\n" .
+                  "  - preprocessor value - make sure that header defining this value is included in sources wrapping the enum.\n" .
+                  "  - enum value from other header or module - see 'preprocessor value'.\n" .
+                  "  - typo (happens rarely) - send a patch fixing this to maintainer of this module.\n";
+              $has_warned_unknown_token = 1;
+            }
             # unknown value often makes a flag.
             $e_h{"flags"}++;
           }
@@ -372,8 +384,9 @@ sub process($$)
       $unknown_flag = 0;
       $e_h{"enum"}++;
     }
-    # it should not get here.
-    else
+    # it should not get here,
+    # except if the last enumerator is followed by a comma.
+    elsif (!($i eq "" and $iter == scalar @lines))
     {
       print STDERR "WARNING: I do not know how to parse it: '" . $i . "' in '" . $c_name . "'.\n";
     }
@@ -410,7 +423,7 @@ sub process($$)
     {
       $numbers[$j] = eval($numbers[$j]);
     }
-    if ($numbers[$j] =~ /[0-9a-fA-F]+/ and $numbers[$j] !~ /[_G-Zg-z<]/)
+    if ($numbers[$j] =~ /[0-9a-fA-F]+/ and $numbers[$j] !~ /[_G-Zg-z<']/)
     {
       $numbers[$j] = sprintf($format, $numbers[$j]);
     }
index 30c3939..0759a52 100644 (file)
@@ -13,8 +13,7 @@
  * General Public License for more details.
  *
  * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "generate_extra_defs.h"
index 235bc39..f1e552f 100644 (file)
@@ -13,8 +13,7 @@
  * General Public License for more details.
  *
  * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "generate_extra_defs.h"
index 3b5028d..23300c8 100644 (file)
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "generate_extra_defs.h"
 #include <algorithm>
+#include <regex>
+#include <sstream>
+
+namespace
+{
+void add_signal_flag_if(std::string& strFlags, const char* strFlag,
+  const GSignalQuery& signalQuery, GSignalFlags flag)
+{
+  if (signalQuery.signal_flags & flag)
+  {
+    if (!strFlags.empty())
+      strFlags += ", ";
+    strFlags += strFlag;
+  }
+}
+
+} // anonymous namespace
 
 std::string
 get_property_with_node_name(
@@ -58,6 +74,55 @@ get_property_with_node_name(
   if (bDeprecated)
     strResult += "  (deprecated #t)\n"; // Default: not deprecated
 
+  // Default value:
+  const GValue* defValue = g_param_spec_get_default_value(pParamSpec);
+  std::string defString;
+  bool defValueExists = false;
+  if (G_VALUE_HOLDS_STRING(defValue))
+  {
+    defValueExists = true;
+    const char* defCString = g_value_get_string(defValue);
+    if (defCString)
+    {
+      // Replace newlines with \n.
+      // A string default value can contain newline characters.
+      // gmmproc removes all newlines when it reads .defs files.
+      defString = std::regex_replace(defCString, std::regex("\n"), "\\n");
+    }
+    else
+      defString = ""; // A NULL string pointer becomes an empty string.
+  }
+  else if (G_VALUE_HOLDS_FLOAT(defValue) || G_VALUE_HOLDS_DOUBLE(defValue))
+  {
+    // g_value_transform() can transform a floating point value to a terrible
+    // string, especially if the value is huge.
+    defValueExists = true;
+    const double defDouble = G_VALUE_HOLDS_FLOAT(defValue) ?
+      g_value_get_float(defValue) : g_value_get_double(defValue);
+    std::ostringstream defStringStream;
+    defStringStream << defDouble;
+    defString = defStringStream.str();
+  }
+  else
+  {
+    GValue defStringValue = G_VALUE_INIT;
+    g_value_init(&defStringValue, G_TYPE_STRING);
+
+    if (g_value_transform(defValue, &defStringValue))
+    {
+      const char* defCString = g_value_get_string(&defStringValue);
+      if (defCString)
+      {
+        defValueExists = true;
+        defString = defCString;
+      }
+    }
+    g_value_unset(&defStringValue);
+  }
+
+  if (defValueExists)
+    strResult += "  (default-value \"" + defString + "\")\n";
+
   strResult += ")\n\n"; // close (strNodeName
 
   return strResult;
@@ -210,24 +275,21 @@ get_signals(GType gtype, GTypeIsAPointerFunc is_a_pointer_func)
       // G_SIGNAL_TYPE_STATIC_SCOPE;
       strResult += "  (return-type \"" + strReturnTypeName + "\")\n";
 
-      // When:
-      {
-        bool bWhenFirst = (signalQuery.signal_flags & G_SIGNAL_RUN_FIRST) == G_SIGNAL_RUN_FIRST;
-        bool bWhenLast = (signalQuery.signal_flags & G_SIGNAL_RUN_LAST) == G_SIGNAL_RUN_LAST;
-
-        std::string strWhen = "unknown";
-
-        if (bWhenFirst && bWhenLast)
-          strWhen = "both";
-        else if (bWhenFirst)
-          strWhen = "first";
-        else if (bWhenLast)
-          strWhen = "last";
-
-        strResult += "  (when \"" + strWhen + "\")\n";
-      }
-      bool bDeprecated = (signalQuery.signal_flags & G_SIGNAL_DEPRECATED) == G_SIGNAL_DEPRECATED;
-      if (bDeprecated)
+      // Flags:
+      std::string strFlags;
+      add_signal_flag_if(strFlags, "Run First", signalQuery, G_SIGNAL_RUN_FIRST);
+      add_signal_flag_if(strFlags, "Run Last", signalQuery, G_SIGNAL_RUN_LAST);
+      add_signal_flag_if(strFlags, "Run Cleanup", signalQuery, G_SIGNAL_RUN_CLEANUP);
+      add_signal_flag_if(strFlags, "No Recurse", signalQuery, G_SIGNAL_NO_RECURSE);
+      add_signal_flag_if(strFlags, "Action", signalQuery, G_SIGNAL_ACTION);
+      add_signal_flag_if(strFlags, "No Hooks", signalQuery, G_SIGNAL_NO_HOOKS);
+      add_signal_flag_if(strFlags, "Must Collect", signalQuery, G_SIGNAL_MUST_COLLECT);
+      strResult += "  (flags \"" + strFlags + "\")\n";
+
+      if (signalQuery.signal_flags & G_SIGNAL_DETAILED)
+        strResult += "  (detailed #t)\n"; // Default: not detailed
+
+      if (signalQuery.signal_flags & G_SIGNAL_DEPRECATED)
         strResult += "  (deprecated #t)\n"; // Default: not deprecated
 
       // Loop through the list of parameters:
index 9d960e3..300df4c 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /* generate_extra_defs.h
  *
  * Copyright (C) 2001 The Free Software Foundation
@@ -15,8 +13,7 @@
  * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <glib-object.h>
index e929503..56b44e6 100644 (file)
@@ -21,8 +21,7 @@
 # GNU General Public License for more details. 
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #
 # 'classes':
index bd7d0e1..4535475 100644 (file)
@@ -110,9 +110,9 @@ dnl
 
 dnl _PUSH(section_name)
 dnl Uses pushdef() to redefine the __DIV__ macro
-dnl so that it diverts ouput to the section_name,
+dnl so that it diverts output to the section_name,
 dnl or discards it (-1) if no section_name is given.
-dnl TODO: However, as far as I can tell, __DIV__ is not used anywhere. murrayc.
+dnl _POP() uses __DIV__ for choosing diversion number.
 define(`_PUSH',`pushdef(`__DIV__',divnum)m4_divert(m4_ifelse($1,,-1,__SEC_$1))dnl`'')
 
 dnl _POP(section_name)
index ff07505..0e0e4f6 100644 (file)
@@ -105,7 +105,7 @@ define(`_CREATE_METHOD',`
 _PUSH(SECTION_CC)
 Glib::RefPtr<`'__CPPNAME__`'> __CPPNAME__`'::create(`'$2`')
 {
-  return Glib::make_refptr_for_instance<`'__CPPNAME__`'>( new __CPPNAME__`'(`'$3`') );
+  return Glib::RefPtr<`'__CPPNAME__`'>( new __CPPNAME__`'(`'$3`') );
 }
 
 _POP()
@@ -169,7 +169,7 @@ namespace Glib
 
 Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__REAL_CNAME__`'* object, bool take_copy)
 {
-  return Glib::make_refptr_for_instance<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto ((GObject*)(object), take_copy)) );
+  return Glib::RefPtr<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto ((GObject*)(object), take_copy)) );
   //We use dynamic_cast<> in case of multiple inheritance.
 }
 
index bce51ff..3c0b93e 100644 (file)
@@ -161,7 +161,7 @@ namespace Glib
 
 Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__CNAME__`'* object, bool take_copy)
 {
-  return Glib::make_refptr_for_instance<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto_interface<__NAMESPACE__::__CPPNAME__> ((GObject*)(object), take_copy)) );
+  return Glib::RefPtr<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto_interface<__NAMESPACE__::__CPPNAME__> ((GObject*)(object), take_copy)) );
   //We use dynamic_cast<> in case of multiple inheritance.
 }
 
index 41fbc5a..e90a1c0 100644 (file)
@@ -66,7 +66,7 @@ Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__CNAME__* object, bool take_copy)
     __OPAQUE_FUNC_REF`'(object);
 
   // See the comment at the top of this file, if you want to know why the cast works.
-  return Glib::make_refptr_for_instance<__NAMESPACE__::__CPPNAME__>(reinterpret_cast<__NAMESPACE__::__CPPNAME__*>(object));
+  return Glib::RefPtr<__NAMESPACE__::__CPPNAME__>(reinterpret_cast<__NAMESPACE__::__CPPNAME__*>(object));
 }
 
 } // namespace Glib
@@ -84,7 +84,7 @@ ifelse(__OPAQUE_FUNC_NEW,NONE,`dnl
 Glib::RefPtr<__CPPNAME__> __CPPNAME__::create()
 {
   // See the comment at the top of this file, if you want to know why the cast works.
-  return Glib::make_refptr_for_instance<__CPPNAME__>(reinterpret_cast<__CPPNAME__*>(__OPAQUE_FUNC_NEW`'()));
+  return Glib::RefPtr<__CPPNAME__>(reinterpret_cast<__CPPNAME__*>(__OPAQUE_FUNC_NEW`'()));
 }
 ')dnl endif __OPAQUE_FUNC_NEW
 
index ce447cc..8d372fa 100644 (file)
@@ -1,3 +1,5 @@
+dnl $Id$
+
 #
 #  Define a hashing for names
 #
@@ -50,29 +52,11 @@ define(`_EQUAL',`define(EV`'__HASH(`$1'),`$2')')
 
 
 define(`__ARG3__',`$`'3')
-
-# _CONV_ENUM(namespace, enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of namespace+enum_name.
 define(`_CONV_ENUM',`dnl
-pushdef(`C_ENUM_NAME', `m4_ifelse(`$3',,`$1$2',`$3')')
-_CONVERSION(`C_ENUM_NAME', `$2', (($2)(__ARG3__)))
-_CONVERSION(`C_ENUM_NAME', `$1::$2', (($1::$2)(__ARG3__)))
-_CONVERSION(`$2', `C_ENUM_NAME', ((C_ENUM_NAME)(__ARG3__)))
-_CONVERSION(`$1::$2', `C_ENUM_NAME', ((C_ENUM_NAME)(__ARG3__)))
-popdef(`C_ENUM_NAME')
-')dnl
-
-# _CONV_INCLASS_ENUM(namespace, class_name, enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of namespace+class_name+enum_name.
-define(`_CONV_INCLASS_ENUM',`dnl
-pushdef(`C_ENUM_NAME', `m4_ifelse(`$4',,`$1$2$3',`$4')')
-_CONVERSION(`C_ENUM_NAME', `$3', (($3)(__ARG3__)))
-_CONVERSION(`C_ENUM_NAME', `$2::$3', (($2::$3)(__ARG3__)))
-_CONVERSION(`C_ENUM_NAME', `$1::$2::$3', (($1::$2::$3)(__ARG3__)))
-_CONVERSION(`$3', `C_ENUM_NAME', ((C_ENUM_NAME)(__ARG3__)))
-_CONVERSION(`$2::$3', `C_ENUM_NAME', ((C_ENUM_NAME)(__ARG3__)))
-_CONVERSION(`$1::$2::$3', `C_ENUM_NAME', ((C_ENUM_NAME)(__ARG3__)))
-popdef(`C_ENUM_NAME')
+_CONVERSION(`$1$2', `$2', (($2)(__ARG3__)))
+_CONVERSION(`$1$2', `$1::$2', (($1::$2)(__ARG3__)))
+_CONVERSION(`$2', `$1$2', (($1$2)(__ARG3__)))
+_CONVERSION(`$1::$2', `$1$2', (($1$2)(__ARG3__)))
 ')dnl
 
 # e.g. Glib::RefPtr<Gdk::Something> to GdkSomething*
index a8989df..e6f7cb4 100644 (file)
@@ -1,85 +1,59 @@
-dnl
-dnl Gio C names have prefix 'G' or 'GDBus' but C++ namespace Gio ot Gio::DBus
-dnl
-# _CONV_GIO_ENUM(enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of G+enum_name.
-define(`_CONV_GIO_ENUM',`dnl
-_CONV_ENUM(`Gio',`$1',`m4_ifelse(`$2',,`G$1',`$2')')
-')dnl
-
-# _CONV_GIO_DBUS_ENUM(enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of GDBus+enum_name.
-define(`_CONV_GIO_DBUS_ENUM',`dnl
-_CONV_ENUM(`Gio::DBus',`$1',`m4_ifelse(`$2',,`GDBus$1',`$2')')
-')dnl
-
-# _CONV_GIO_INCLASS_ENUM(class_name, enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of G+class_name+enum_name.
-define(`_CONV_GIO_INCLASS_ENUM',`dnl
-_CONV_INCLASS_ENUM(`Gio',`$1',`$2',`m4_ifelse(`$3',,`G$1$2',`$3')')
-')dnl
-
-# _CONV_GIO_DBUS_INCLASS_ENUM(class_name, enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of GDBus+class_name+enum_name.
-define(`_CONV_GIO_DBUS_INCLASS_ENUM',`dnl
-_CONV_INCLASS_ENUM(`Gio::DBus',`$1',`$2',`m4_ifelse(`$3',,`GDBus$1$2',`$3')')
-')dnl
-
-_CONV_GIO_INCLASS_ENUM(AppInfo,CreateFlags)
-_CONV_GIO_INCLASS_ENUM(Application,Flags)
-_CONV_GIO_ENUM(AskPasswordFlags)
-_CONV_GIO_ENUM(BusType)
-_CONV_GIO_INCLASS_ENUM(Converter,Flags)
-_CONV_GIO_INCLASS_ENUM(Converter,Result)
-_CONV_GIO_INCLASS_ENUM(Credentials,Type)
-_CONV_GIO_ENUM(DataStreamByteOrder)
-_CONV_GIO_ENUM(DataStreamNewlineType)
-_CONV_GIO_DBUS_ENUM(CallFlags)
-_CONV_GIO_DBUS_ENUM(CapabilityFlags)
-_CONV_GIO_DBUS_INCLASS_ENUM(InterfaceSkeleton,Flags)
-_CONV_GIO_DBUS_ENUM(MessageFlags)
-_CONV_GIO_DBUS_ENUM(MessageHeaderField)
-_CONV_GIO_DBUS_ENUM(MessageType)
-_CONV_GIO_DBUS_ENUM(ProxyFlags)
-_CONV_GIO_DBUS_ENUM(SendMessageFlags)
-_CONV_GIO_DBUS_INCLASS_ENUM(Server,Flags)
-_CONV_GIO_INCLASS_ENUM(Drive,StartFlags)
-_CONV_GIO_INCLASS_ENUM(Drive,StartStopType)
-_CONV_GIO_INCLASS_ENUM(Emblem,Origin)
-_CONV_GIO_INCLASS_ENUM(FileAttributeInfo,Flags)
-_CONV_GIO_ENUM(FileAttributeStatus)
-_CONV_GIO_ENUM(FileAttributeType)
-_CONV_GIO_INCLASS_ENUM(FileCopy,Flags)
-_CONV_GIO_INCLASS_ENUM(FileCreate,Flags)
-_CONV_GIO_INCLASS_ENUM(FileMonitor,Event)
-_CONV_GIO_INCLASS_ENUM(FileMonitor,Flags)
-_CONV_GIO_ENUM(FileQueryInfoFlags)
-_CONV_GIO_ENUM(FileType)
-_CONV_GIO_INCLASS_ENUM(Mount,MountFlags)
-_CONV_GIO_ENUM(MountOperationResult)
-_CONV_GIO_INCLASS_ENUM(Mount,UnmountFlags)
-_CONV_GIO_ENUM(NetworkConnectivity)
-_CONV_GIO_INCLASS_ENUM(Notification,Priority)
-_CONV_GIO_INCLASS_ENUM(OutputStream,SpliceFlags)
-_CONV_GIO_ENUM(PasswordSave)
-_CONV_GIO_INCLASS_ENUM(Resolver,RecordType)
-_CONV_GIO_INCLASS_ENUM(Resource,Flags)
-_CONV_GIO_INCLASS_ENUM(Resource,LookupFlags)
-_CONV_GIO_INCLASS_ENUM(Settings,BindFlags)
-_CONV_GIO_ENUM(SocketClientEvent)
-_CONV_GIO_ENUM(SocketFamily)
-_CONV_GIO_INCLASS_ENUM(Socket,MsgFlags)
-_CONV_GIO_INCLASS_ENUM(Socket,Protocol)
-_CONV_GIO_INCLASS_ENUM(Socket,Type)
-_CONV_GIO_ENUM(TlsCertificateFlags)
-_CONV_GIO_ENUM(TlsCertificateRequestFlags)
-_CONV_GIO_INCLASS_ENUM(TlsDatabase,VerifyFlags)
-_CONV_GIO_INCLASS_ENUM(TlsDatabase,LookupFlags)
-_CONV_GIO_ENUM(TlsInteractionResult)
-_CONV_GIO_INCLASS_ENUM(TlsPassword,Flags)
-_CONV_GIO_ENUM(TlsRehandshakeMode)
-_CONV_GIO_INCLASS_ENUM(UnixSocketAddress,Type)
-_CONV_GIO_ENUM(ZlibCompressorFormat)
+_CONV_ENUM(G,AppInfoCreateFlags)
+_CONV_ENUM(G,ApplicationFlags)
+_CONV_ENUM(G,AskPasswordFlags)
+_CONV_ENUM(G,BusType)
+_CONV_ENUM(G,ConverterFlags)
+_CONV_ENUM(G,ConverterResult)
+_CONV_ENUM(G,CredentialsType)
+_CONV_ENUM(G,DataStreamByteOrder)
+_CONV_ENUM(G,DataStreamNewlineType)
+_CONV_ENUM(GDBus,CallFlags)
+_CONV_ENUM(GDBus,CapabilityFlags)
+_CONV_ENUM(GDBus, InterfaceSkeletonFlags)
+_CONV_ENUM(GDBus,MessageFlags)
+_CONV_ENUM(GDBus,MessageHeaderField)
+_CONV_ENUM(GDBus,MessageType)
+_CONV_ENUM(GDBus,ProxyFlags)
+_CONV_ENUM(GDBus,SendMessageFlags)
+_CONV_ENUM(GDBus,ServerFlags)
+_CONV_ENUM(G,DriveStartFlags)
+_CONV_ENUM(G,DriveStartFlags)
+_CONV_ENUM(G,DriveStartStopType)
+_CONV_ENUM(G,EmblemOrigin)
+_CONV_ENUM(G,FileAttributeInfoFlags)
+_CONV_ENUM(G,FileAttributeStatus)
+_CONV_ENUM(G,FileAttributeType)
+_CONV_ENUM(G,FileCopyFlags)
+_CONV_ENUM(G,FileCreateFlags)
+_CONV_ENUM(G,FileMonitorEvent)
+_CONV_ENUM(G,FileMonitorFlags)
+_CONV_ENUM(G,FileQueryInfoFlags)
+_CONV_ENUM(G,FileType)
+_CONV_ENUM(G,MountMountFlags)
+_CONV_ENUM(G,MountOperationResult)
+_CONV_ENUM(G,MountUnmountFlags)
+_CONV_ENUM(G,NetworkConnectivity)
+_CONV_ENUM(G,NotificationPriority)
+_CONV_ENUM(G,OutputStreamSpliceFlags)
+_CONV_ENUM(G,PasswordSave)
+_CONV_ENUM(G,ResolverRecordType)
+_CONV_ENUM(G,ResourceFlags)
+_CONV_ENUM(G,ResourceLookupFlags)
+_CONV_ENUM(G,SettingsBindFlags)
+_CONV_ENUM(G,SocketClientEvent)
+_CONV_ENUM(G,SocketFamily)
+_CONV_ENUM(G,SocketMsgFlags)
+_CONV_ENUM(G,SocketProtocol)
+_CONV_ENUM(G,SocketType)
+_CONV_ENUM(G,TlsCertificateFlags)
+_CONV_ENUM(G,TlsCertificateRequestFlags)
+_CONV_ENUM(G,TlsDatabaseVerifyFlags)
+_CONV_ENUM(G,TlsDatabaseLookupFlags)
+_CONV_ENUM(G,TlsInteractionResult)
+_CONV_ENUM(G,TlsPasswordFlags)
+_CONV_ENUM(G,TlsRehandshakeMode)
+_CONV_ENUM(G,UnixSocketAddressType)
+_CONV_ENUM(G,ZlibCompressorFormat)
 
 # Action
 _CONVERSION(`GAction*',`Glib::RefPtr<Action>',`Glib::wrap($3)')
@@ -95,7 +69,7 @@ _CONVERSION(`GAppLaunchContext*',`const Glib::RefPtr<AppLaunchContext>&',Glib::w
 _CONVERSION(`const Glib::RefPtr<AppInfo>&',`GAppInfo*',__CONVERT_REFPTR_TO_P)
 _CONVERSION(`Glib::RefPtr<AppInfo>',`GAppInfo*',__CONVERT_REFPTR_TO_P)
 _CONVERSION(`GAppInfo*',`const Glib::RefPtr<AppInfo>&',`Glib::wrap($3)')
-_CONVERSION(`const std::vector<Glib::RefPtr<Gio::File>>&',`GList*',`Glib::ListHandler<Glib::RefPtr<Gio::File>>::vector_to_list($3).data()')
+_CONVERSION(`const Glib::ListHandle< Glib::RefPtr<Gio::File> >&',`GList*',`$3.data()')
 
 # Application
 _CONVERSION(`GApplication*',`Glib::RefPtr<Application>',`Glib::wrap($3)')
@@ -255,7 +229,7 @@ _CONVERSION(`const Glib::RefPtr<MenuModel>&',`GMenuModel*',__CONVERT_CONST_REFPT
 
 # MenuItem
 _CONVERSION(`GMenuItem*',`Glib::RefPtr<MenuItem>',`Glib::wrap($3)')
-_CONVERSION(`const Glib::RefPtr<const MenuItem>&',`GMenuItem*',__CONVERT_CONST_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<MenuItem>&',`GMenuItem*',__CONVERT_CONST_REFPTR_TO_P)
 
 # Mount
 _CONVERSION(`GMount*',`Glib::RefPtr<Mount>',`Glib::wrap($3)')
@@ -291,7 +265,7 @@ _CONVERSION(`GResource*',`Glib::RefPtr<Resource>',`Glib::wrap($3)')
 
 #Settings
 _CONVERSION(`GSettings*',`Glib::RefPtr<Settings>',`Glib::wrap($3)')
-_CONVERSION(`const std::vector<Glib::ustring>&',`const gchar*-const*',`Glib::ArrayHandler<Glib::ustring>::vector_to_array($3).data()')
+_CONVERSION(`const Glib::StringArrayHandle&',`const gchar*-const*',`($3).data()')
 _CONVERSION(`const Glib::RefPtr<SettingsBackend>&',`GSettingsBackend*',__CONVERT_REFPTR_TO_P)
 
 _CONVERSION(`GSettingsSchemaKey*',`Glib::RefPtr<SettingsSchemaKey>',`Glib::wrap($3)')
index 4871482..0c70cdf 100644 (file)
@@ -1,16 +1,11 @@
 dnl
 dnl Glib C names have prefix 'G' but C++ namespace Glib
 dnl
-# _CONV_GLIB_ENUM(enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of G+enum_name.
 define(`_CONV_GLIB_ENUM',`dnl
-_CONV_ENUM(`Glib',`$1',`m4_ifelse(`$2',,`G$1',`$2')')
-')dnl
-
-# _CONV_GLIB_INCLASS_ENUM(class_name, enum_name[, C_enum_name])
-# Specify C_enum_name, if it's not the concatenation of G+class_name+enum_name.
-define(`_CONV_GLIB_INCLASS_ENUM',`dnl
-_CONV_INCLASS_ENUM(`Glib',`$1',`$2',`m4_ifelse(`$3',,`G$1$2',`$3')')
+_CONVERSION(`G$1', `$1', (($1)(__ARG3__)))
+_CONVERSION(`G$1', `Glib::$1', ((Glib::$1)(__ARG3__)))
+_CONVERSION(`$1', `G$1', ((G$1)(__ARG3__)))
+_CONVERSION(`Glib::$1', `G$1', ((G$1)(__ARG3__)))
 ')dnl
 
 _EQUAL(gchar,char)
@@ -65,14 +60,14 @@ dnl
 dnl # These are for fixmegtkconst
 _CONVERSION(`const guchar*',`guchar*',`const_cast<guchar*>($3)',`$3')
 
-_CONV_GLIB_INCLASS_ENUM(Binding,Flags)
+_CONV_GLIB_ENUM(BindingFlags)
 _CONV_GLIB_ENUM(IOCondition)
 _CONV_GLIB_ENUM(IOFlags)
 _CONV_GLIB_ENUM(IOStatus)
-_CONV_GLIB_INCLASS_ENUM(KeyFile,Flags)
+_CONV_GLIB_ENUM(KeyFileFlags)
 _CONV_GLIB_ENUM(OptionArg)
-_CONV_GLIB_INCLASS_ENUM(Regex,CompileFlags)
-_CONV_GLIB_INCLASS_ENUM(Regex,MatchFlags)
+_CONV_GLIB_ENUM(RegexCompileFlags)
+_CONV_GLIB_ENUM(RegexMatchFlags)
 _CONV_GLIB_ENUM(SeekType)
 _CONV_GLIB_ENUM(TimeType)
 
index 5e908dc..9064e35 100644 (file)
@@ -1,26 +1,13 @@
 dnl
-dnl _ENUM(cpp_type, c_type, value_suffix, `element_list', `no_gtype', in_class,
-dnl          $1       $2         $3             $4           $5          $6
-dnl `optional_refdoc_comment', 'deprecated')
-dnl           $7                   $8
+dnl _ENUM(cpp_type, c_type, value_suffix, `element_list', `no_gtype', `optional_refdoc_comment', 'deprecated')
+dnl          $1       $2         $3             $4           $5              $6                        $7
 dnl
 m4_define(`_ENUM',`dnl
 _PUSH()
 
-dnl Concerning __ENUM_CLASS_NOLINK__:
-dnl The percent signs prevent Doxygen from creating links in the html files.
-dnl If a % precedes the class name, another % must precede the enum name,
-dnl otherwise Doxygen removes the double colons.
-dnl Possibly the percent signs are unnecessary. Even without them Doxygen
-dnl version 1.7.1 does not create links from the enum descriptions.
-dnl Other versions may behave differently.
-
 m4_define(`__ENUM_CPPNAME__',`$1')
 m4_define(`__ENUM_CNAME__',`$2')
-m4_define(`__ENUM_CLASS_CPPNAME__',m4_ifelse($6,0,,`__CPPNAME__::')`__ENUM_CPPNAME__')
-m4_define(`__ENUM_CLASS_NOLINK__',m4_ifelse($6,0,,`%__CPPNAME__::')`%__ENUM_CPPNAME__')
-m4_define(`__ENUM_INDENT__',m4_ifelse($6,0,,`  '))
-m4_define(`__ENUM_VALUE_BASE__',`Glib::Value_$3<__NAMESPACE__::__ENUM_CLASS_CPPNAME__>')
+m4_define(`__ENUM_VALUE_BASE__',`Glib::Value_$3<__NAMESPACE__::__ENUM_CPPNAME__>')
 
 _POP()
 dnl
@@ -30,107 +17,88 @@ m4_ifdef(`__DOCGROUP_'__MODULE_CANONICAL__`_ENUMS__',,`dnl else
 m4_define(`__DOCGROUP_'__MODULE_CANONICAL__`_ENUMS__')dnl
 /** @addtogroup '__MODULE_CANONICAL__`Enums __MODULE_CANONICAL__ Enums and Flags */
 
-__ENUM_INDENT__')`'dnl endif
+')dnl endif
 dnl
 dnl
-ifelse(`$8',,,`_DEPRECATE_IFDEF_START'`'__ENUM_INDENT__)`'dnl The expansion of _DEPRECATE_IFDEF_START ends with a newline
-/** $7
-__ENUM_INDENT__ *
-__ENUM_INDENT__ * @ingroup __MODULE_CANONICAL__`'Enums
-m4_ifelse($3,`Flags',`dnl
-__ENUM_INDENT__ * @par Bitwise operators:
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__ operator|(__ENUM_CLASS_CPPNAME__, __ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__ operator&(__ENUM_CLASS_CPPNAME__, __ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__ operator^(__ENUM_CLASS_CPPNAME__, __ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__ operator~(__ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__& operator|=(__ENUM_CLASS_CPPNAME__&, __ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__& operator&=(__ENUM_CLASS_CPPNAME__&, __ENUM_CLASS_CPPNAME__)</tt><br>
-__ENUM_INDENT__ * <tt>__ENUM_CLASS_NOLINK__& operator^=(__ENUM_CLASS_CPPNAME__&, __ENUM_CLASS_CPPNAME__)</tt><br>
+ifelse(`$7',,,`_DEPRECATE_IFDEF_START')`'dnl The expansion of _DEPRECATE_IFDEF_START ends with a newline
+/** $6
+ *
+ * @ingroup __MODULE_CANONICAL__`'Enums
+m4_ifelse($3,Flags,`dnl
+ * @par Bitwise operators:
+ * <tt>%__ENUM_CPPNAME__ operator|(__ENUM_CPPNAME__, __ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__ operator&(__ENUM_CPPNAME__, __ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__ operator^(__ENUM_CPPNAME__, __ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__ operator~(__ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__& operator|=(__ENUM_CPPNAME__&, __ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__& operator&=(__ENUM_CPPNAME__&, __ENUM_CPPNAME__)</tt><br>
+ * <tt>%__ENUM_CPPNAME__& operator^=(__ENUM_CPPNAME__&, __ENUM_CPPNAME__)</tt><br>
 ')dnl endif
-__ENUM_INDENT__ */
-__ENUM_INDENT__`'enum class __ENUM_CPPNAME__
-__ENUM_INDENT__{
+ */
+enum __ENUM_CPPNAME__
+{
 $4
-__ENUM_INDENT__};
-m4_ifelse($3,`Flags',`dnl
-m4_ifelse($6,0,,`dnl  in_class
-_PUSH(SECTION_HEADER3)
-__NAMESPACE_BEGIN__
-ifelse(`$8',,,`_DEPRECATE_IFDEF_START')`'dnl
-')dnl endif
+};
+m4_ifelse($3,Flags,`dnl
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__ operator|(__ENUM_CLASS_CPPNAME__ lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }
+inline __ENUM_CPPNAME__ operator|(__ENUM_CPPNAME__ lhs, __ENUM_CPPNAME__ rhs)
+  { return static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__ operator&(__ENUM_CLASS_CPPNAME__ lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }
+inline __ENUM_CPPNAME__ operator&(__ENUM_CPPNAME__ lhs, __ENUM_CPPNAME__ rhs)
+  { return static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__ operator^(__ENUM_CLASS_CPPNAME__ lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }
+inline __ENUM_CPPNAME__ operator^(__ENUM_CPPNAME__ lhs, __ENUM_CPPNAME__ rhs)
+  { return static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__ operator~(__ENUM_CLASS_CPPNAME__ flags)
-  { return static_cast<__ENUM_CLASS_CPPNAME__>(~static_cast<unsigned>(flags)); }
+inline __ENUM_CPPNAME__ operator~(__ENUM_CPPNAME__ flags)
+  { return static_cast<__ENUM_CPPNAME__>(~static_cast<unsigned>(flags)); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__& operator|=(__ENUM_CLASS_CPPNAME__& lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return (lhs = static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }
+inline __ENUM_CPPNAME__& operator|=(__ENUM_CPPNAME__& lhs, __ENUM_CPPNAME__ rhs)
+  { return (lhs = static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__& operator&=(__ENUM_CLASS_CPPNAME__& lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return (lhs = static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }
+inline __ENUM_CPPNAME__& operator&=(__ENUM_CPPNAME__& lhs, __ENUM_CPPNAME__ rhs)
+  { return (lhs = static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }
 
 /** @ingroup __MODULE_CANONICAL__`'Enums */
-inline __ENUM_CLASS_CPPNAME__& operator^=(__ENUM_CLASS_CPPNAME__& lhs, __ENUM_CLASS_CPPNAME__ rhs)
-  { return (lhs = static_cast<__ENUM_CLASS_CPPNAME__>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }
-m4_ifelse($6,0,,`dnl  in_class
-ifelse(`$8',,,`_DEPRECATE_IFDEF_END')`'dnl
-__NAMESPACE_END__
-_POP()
-')dnl endif
-')dnl endif !NO_OPERATORS
-
-ifelse(`$8',,,`_DEPRECATE_IFDEF_END')`'dnl The expansion of _DEPRECATE_IFDEF_END ends with a newline
+inline __ENUM_CPPNAME__& operator^=(__ENUM_CPPNAME__& lhs, __ENUM_CPPNAME__ rhs)
+  { return (lhs = static_cast<__ENUM_CPPNAME__>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }
+')dnl endif Flags
+ifelse(`$7',,,`_DEPRECATE_IFDEF_END')`'dnl The expansion of _DEPRECATE_IFDEF_END ends with a newline
 
 m4_ifelse($5,`NO_GTYPE',,`dnl else
-m4_ifelse($6,0,`dnl  not in_class
 __NAMESPACE_END__
-',`dnl else
-_PUSH(SECTION_HEADER3)
-')dnl endif
 
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
 namespace Glib
 {
 
-ifelse(`$8',,,`_DEPRECATE_IFDEF_START')`'dnl
+ifelse(`$7',,,`_DEPRECATE_IFDEF_START')`'dnl
 template <>
-class Value<__NAMESPACE__::__ENUM_CLASS_CPPNAME__> : public __ENUM_VALUE_BASE__
+class Value<__NAMESPACE__::__ENUM_CPPNAME__> : public __ENUM_VALUE_BASE__
 {
 public:
   static GType value_type() G_GNUC_CONST;
 };
-ifelse(`$8',,,`_DEPRECATE_IFDEF_END')`'dnl
+ifelse(`$7',,,`_DEPRECATE_IFDEF_END')`'dnl
 
 } // namespace Glib
 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
 
-m4_ifelse($6,0,`dnl  not in_class
 __NAMESPACE_BEGIN__
-',`dnl else
-_POP()
-')dnl endif
 _PUSH(SECTION_SRC_GENERATED)
-ifelse(`$8',,,`_DEPRECATE_IFDEF_START')`'dnl
+ifelse(`$7',,,`_DEPRECATE_IFDEF_START')`'dnl
 // static
-GType Glib::Value<__NAMESPACE__::__ENUM_CLASS_CPPNAME__>::value_type()
+GType Glib::Value<__NAMESPACE__::__ENUM_CPPNAME__>::value_type()
 {
   return _GET_TYPE_FUNC(__ENUM_CNAME__);
 }
-ifelse(`$8',,,`_DEPRECATE_IFDEF_END')`'dnl
+ifelse(`$7',,,`_DEPRECATE_IFDEF_END')`'dnl
 
 _POP()
 ')dnl endif !NO_GTYPE
index 279f0ee..3ca4de6 100644 (file)
@@ -45,7 +45,7 @@ ifelse(`$8',,,`$8
 ')dnl
 ',dnl If the C function returns non-void:
 dnl Store the return if there are C output parameters.
-`ifelse(`$6',,`  return ',`  auto retvalue = ')_CONVERT($4,`$3',`$2`'(ifelse(`$9',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$7',,,`, ')$7)');
+`ifelse(`$6',,`  return ',`  `$3' retvalue = ')_CONVERT($4,`$3',`$2`'(ifelse(`$9',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$7',,,`, ')$7)');
 dnl Insert the initializations for the C output parameters
 ifelse(`$8',,,`$8
 ')dnl
@@ -78,7 +78,7 @@ dnl Insert the declarations for C output parameters
 ifelse(`$6',,,`$6
 ')`'dnl
 ifelse(`$16',,dnl If no C++ output parameter is specified:
-`  ifelse(`$3',void,,`auto retvalue = ')_CONVERT($4,`$3',`$2`'(ifelse(`$9',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$7',,,`, ')$7)');
+`  ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,`$3',`$2`'(ifelse(`$9',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$7',,,`, ')$7)');
 'dnl
 ,dnl A C++ output parameter is specified:
 `  _INITIALIZE($17,$4,`$16',`$2`'(ifelse(`$9',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$7',,,`, ')$7)',$21);
@@ -144,7 +144,7 @@ dnl If no C++ output parameter is specified.
 `  ifelse(`$3',void,,dnl
 dnl Returns non-void:
 dnl Store the return if there are C output parameters
-ifelse(`$6',,`return ',`auto retval = '))_CONVERT($4,`$3',`$2`'($7)');'dnl
+ifelse(`$6',,`return ',``$3' retval = '))_CONVERT($4,`$3',`$2`'($7)');'dnl
 dnl A C++ output parameter is specified so initialize it from C return
 ,`  _INITIALIZE($14,$4,`$13',`$2`'($7)',$18);'dnl
 )
@@ -171,7 +171,7 @@ dnl Insert the declarations for the C output parameters
 ifelse(`$6',,,`$6
 ')`'dnl
 ifelse(`$13',,dnl If no C++ output parameter is specified:
-  ifelse(`$3',void,,`auto retvalue = ')_CONVERT($4,`$3',`$2`'($7)');dnl
+  ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,`$3',`$2`'($7)');dnl
 dnl A C++ output parameter is specified:
 ,`  _INITIALIZE($14,$4,`$13',`$2`'($7)',$18);'dnl
 )dnl
index fa2cd99..5b680f4 100644 (file)
@@ -24,17 +24,17 @@ ifelse(`$9',,,`_DEPRECATE_IFDEF_START
 ')dnl
 ifelse($13,,`dnl no detail_name
 $10
-  Glib::SignalProxy<$5`'($6)> signal_$4`'();
+  Glib::SignalProxy< $5`'_COMMA_PREFIX($6) > signal_$4`'();
 ',dnl detail_name
 $14,0,`dnl
 $10
-  Glib::SignalProxyDetailed<$5`'($6)> signal_$4`'(const Glib::ustring& $13 = Glib::ustring());
+  Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13 = Glib::ustring());
 ',`dnl detail_name and two_signal_methods
 $10
-  Glib::SignalProxy<$5`'($6)> signal_$4`'();
+  Glib::SignalProxy< $5`'_COMMA_PREFIX($6) > signal_$4`'();
 
 $10
-  Glib::SignalProxyDetailed<$5`'($6)> signal_$4`'(const Glib::ustring& $13);
+  Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) > signal_$4`'(const Glib::ustring& $13);
 ')dnl end detail_name
 ifelse(`$9',,,`_DEPRECATE_IFDEF_END
 ')dnl
@@ -65,7 +65,7 @@ ifelse($8,`1',,`dnl Do not generate the implementation if it should be custom:
 static $2 __CPPNAME__`'_signal_$4_callback`'(__CNAME__`'* self, _COMMA_SUFFIX($3)`'void* data)
 {
   using namespace __NAMESPACE__;
-  using SlotType = sigc::slot<$5`'($6)>;
+  using SlotType = sigc::slot< $5`'_COMMA_PREFIX($6) >;
 
   auto obj = dynamic_cast<__CPPNAME__*>(Glib::ObjectBase::_get_current_wrapper((GObject*) self));
   // Do not try to call a signal on a disassociated wrapper.
@@ -107,7 +107,7 @@ ifelse($2,void,,`dnl else
 static $2 __CPPNAME__`'_signal_$4_notify_callback`'(__CNAME__`'* self, _COMMA_SUFFIX($3)`' void* data)
 {
   using namespace __NAMESPACE__;
-  using SlotType = sigc::slot<void($6)>;
+  using SlotType = sigc::slot< void`'_COMMA_PREFIX($6) >;
 
   auto obj = dynamic_cast<__CPPNAME__*>(Glib::ObjectBase::_get_current_wrapper((GObject*) self));
   // Do not try to call a signal on a disassociated wrapper.
@@ -161,25 +161,25 @@ ifelse(`$11',,,`#ifdef $11'
 ifelse(`$9',,,`_DEPRECATE_IFDEF_START
 ')dnl
 ifelse($13,,`dnl no detail_name
-Glib::SignalProxy<$5`'($6)> __CPPNAME__::signal_$4`'()
+Glib::SignalProxy< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
 {
-  return Glib::SignalProxy<$5`'($6) >(this, &__CPPNAME__`'_signal_$4_info);
+  return Glib::SignalProxy< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
 }
 ',dnl detail_name
 $14,0,`dnl
-Glib::SignalProxyDetailed<$5`'($6)> __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
+Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
 {
-  return Glib::SignalProxyDetailed<$5`'($6)>(this, &__CPPNAME__`'_signal_$4_info, $13);
+  return Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, $13);
 }
 ',`dnl detail_name and two_signal_methods
-Glib::SignalProxy<$5`'($6)> __CPPNAME__::signal_$4`'()
+Glib::SignalProxy< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'()
 {
-  return Glib::SignalProxy<$5`'($6)>(this, &__CPPNAME__`'_signal_$4_info);
+  return Glib::SignalProxy< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info);
 }
 
-Glib::SignalProxyDetailed<$5`'($6)> __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
+Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) > __CPPNAME__::signal_$4`'(const Glib::ustring& $13)
 {
-  return Glib::SignalProxyDetailed<$5`'($6)>(this, &__CPPNAME__`'_signal_$4_info, $13);
+  return Glib::SignalProxyDetailedAnyType< $5`'_COMMA_PREFIX($6) >(this, &__CPPNAME__`'_signal_$4_info, $13);
 }
 ')dnl end detail_name
 ifelse(`$9',,,`_DEPRECATE_IFDEF_END
index 93928be..25dba9e 100644 (file)
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
 # Based on XML::Parser tutorial found at http://www.devshed.com/Server_Side/Perl/PerlXML/PerlXML1/page1.html
@@ -391,6 +390,20 @@ sub lookup_documentation($$$;$)
   return $text;
 }
 
+# void convert_value_to_cpp(\$text)
+# Converts e.g. a property's default value.
+sub convert_value_to_cpp($)
+{
+  my ($text) = @_;
+
+  $$text =~ s"\bFALSE\b"<tt>false</tt>"g;
+  $$text =~ s"\bTRUE\b"<tt>true</tt>"g;
+  $$text =~ s"\bNULL\b"<tt>nullptr</tt>"g;
+
+  # Enumerator names
+  $$text =~ s/\b([A-Z]+)_([A-Z\d_]+)\b/&DocsParser::substitute_enumerator_name($1, $2)/eg;
+}
+
 # void remove_example_code($obj_name, \$text)
 # Removes example code from the text of docs (passed by reference).
 sub remove_example_code($$)
@@ -863,8 +876,7 @@ sub substitute_enumerator_name($$)
 
   my $cxx_name = (($module eq "G") ? "" : (ucfirst(lc($module)) . "::")) . $name;
 
-  print "DocsParser.pm: Assuming the enumerator $c_name shall become $cxx_name.\n";
-
+  #print "DocsParser.pm: Assuming the enumerator $c_name shall become $cxx_name.\n";
   return $cxx_name;
 }
 
index c1bdc3c..ceb705c 100644 (file)
@@ -26,7 +26,6 @@ our @EXPORT_OK;
 #       string module;
 #       string c_type;
 #
-#       string array elem_short_names;
 #       string array elem_names;
 #       string array elem_values;
 #       string c_prefix;
@@ -148,7 +147,6 @@ sub new
   $$self{flags} = 0;
   $$self{c_prefix} = "";
 
-  $$self{elem_short_names}  = [];
   $$self{elem_names}  = [];
   $$self{elem_values} = [];
 
@@ -175,7 +173,6 @@ sub new
   }
 
   # this should never happen
-  warn if(scalar(@{$$self{elem_short_names}}) != scalar(@{$$self{elem_values}}));
   warn if(scalar(@{$$self{elem_names}}) != scalar(@{$$self{elem_values}}));
 
   return $self;
@@ -185,7 +182,6 @@ sub parse_values($$)
 {
   my ($self, $value) = @_;
 
-  my $elem_short_names  = [];
   my $elem_names  = [];
   my $elem_values = [];
   my $common_prefix = undef;
@@ -193,9 +189,9 @@ sub parse_values($$)
   # and handles triples like '("dq-token", "MY_SCANNER_DQ_TOKEN", "'"'").
   foreach (split_enum_tokens($value))
   {
-    if (/^"(\S+)" "(\S+)" "(.+)"$/)
+    if (/^"\S+" "(\S+)" "(.+)"$/)
     {
-      my ($nick_name, $name, $value) = ($1, $2, $3);
+      my ($name, $value) = ($1, $2);
 
       # detect whether there is module prefix common to all names, e.g. GTK_
       my $prefix = $1 if ($name =~ /^([^_]+_)/);
@@ -209,16 +205,6 @@ sub parse_values($$)
         $common_prefix = "";
       }
 
-      # enum.pl generates nick names from the C names of the enum constants.
-      # A nick name consists of the trailing part of the enum name.
-      # The leading part which is common for each constant of an enum type
-      # has been removed. The remaining part is then tranform to lowercase
-      # and hyphens.
-      # Transform the nick name with lowercase letters and hyphens
-      # back to a short name with uppercase letters and underscores.
-      # The short names are suitable for 'enum class' definitions.
-      $nick_name =~ tr/a-z-/A-Z_/;
-      push(@$elem_short_names, $nick_name);
       push(@$elem_names, $name);
       push(@$elem_values, $value);
     }
@@ -237,18 +223,17 @@ sub parse_values($$)
     $$self{c_prefix}  = $common_prefix;
   }
 
-  $$self{elem_short_names}  = $elem_short_names;
   $$self{elem_names}  = $elem_names;
   $$self{elem_values} = $elem_values;
 }
 
-sub beautify_values($$)
+sub beautify_values($)
 {
-  my ($self, $use_short_names) = @_;
+  my ($self) = @_;
 
   return if($$self{flags});
 
-  my $elem_names  = $use_short_names ? $$self{elem_short_names} : $$self{elem_names};
+  my $elem_names  = $$self{elem_names};
   my $elem_values = $$self{elem_values};
 
   my $num_elements = scalar(@$elem_values);
@@ -292,9 +277,9 @@ sub beautify_values($$)
 
 sub build_element_list($$$$)
 {
-  my ($self, $use_short_names, $ref_subst_in, $ref_subst_out, $indent) = @_;
+  my ($self, $ref_subst_in, $ref_subst_out, $indent) = @_;
 
-  my $elem_names  = $use_short_names ? $$self{elem_short_names} : $$self{elem_names};
+  my $elem_names  = $$self{elem_names};
   my $elem_values = $$self{elem_values};
 
   my $num_elements = scalar(@$elem_names);
@@ -322,19 +307,6 @@ sub build_element_list($$$$)
   return $elements;
 }
 
-# The name prefix is defined by: $name_prefix . $short_name eq $name
-# I.e. what shall be chopped off the name to get the short name.
-sub get_name_prefix($)
-{
-  my ($self) = @_;
-
-  my $name = ${$$self{elem_names}}[0];
-  my $short_name = ${$$self{elem_short_names}}[0];
-  my $prefix_length = length($name) - length($short_name);
-
-  return substr($name, 0, $prefix_length);
-}
-
 sub dump($)
 {
   my ($self) = @_;
index d3cd8ea..f962216 100644 (file)
@@ -104,12 +104,11 @@ sub new($$)
   }
   elsif ($line =~ /^([^()]+)\s+(\S+)\s*\((.*)\)\s*(const)*$/)
   {
-    no warnings qw(uninitialized); # disable the uninitialize warning for $4
     $$self{rettype} = $1;
     $$self{name} = $2;
     $$self{c_name} = $2;
     $self->parse_param($3);
-    $$self{const} = ($4 eq "const");
+    $$self{const} = defined($4);
   }
   else
   {
@@ -158,7 +157,7 @@ sub new_ctor($$)
   if ($line =~ /^(\S+)\s*\((.*)\)\s*/)
   {
     $$self{name} = $1;
-    $$self{c_name} = $2;
+    $$self{c_name} = $1;
     $self->parse_param($2);
   }
   else
@@ -211,60 +210,73 @@ sub parse_param($$)
   $line =~ s/\s+/ /g; # Compress whitespace.
   return if ($line =~ /^$/);
 
-  # parse through argument list
+  # Add a ',' at the end. No special treatment of the last parameter is necessary,
+  # if it's followed by a comma, like the other parameters.
+  $line .= ',' if (substr($line, -1) ne ',');
+
+  # Parse through the argument list.
+  #
+  # We must find commas (,) that separate parameters, and equal signs (=) that
+  # separate parameter names from optional default values.
+  # '&', '*' and '>' are delimiters in split() because they must be separated
+  # from the parameter name even if there is no space char between.
+  # Commas within "<.,.>" or "{.,.}" or "(.,.)" do not end a parameter.
+  # This parsing is not guaranteed to work well if there are several levels
+  # of (()) or {{}}. X<Y<Z>> works in the normal case where there is nothing
+  # but possibly spaces between the multiple ">>".
+  # Quoted strings are not detected. If a quoted string exists in a function
+  # prototype, it's probably as part of a default value, inside ("x") or {"y"}.
+  #
   my @str = ();
-  my $par = 0;
-  foreach (split(/(const )|([,=&*()])|({.*?})|(<[^,]*?>)|(\s+)/, $line)) #special characters OR <something> OR whitespace.
+  foreach (split(/(\bconst\b|[,=&*>]|<.*?>|{.*?}|\(.*?\)|\s+)/, $line))
   {
     next if ( !defined($_) or $_ eq "" );
 
-    if ( $_ eq "(" ) #Detect the opening bracket.
-    {
-       push(@str, $_);
-       $par++; #Increment the number of parameters.
-       next;
-    }
-    elsif ( $_ eq ")" )
+    if ($_ =~ /^(?:const|[*&>]|<.*>|\(.*\)|\s+)$/)
     {
-       push(@str, $_);
-       $par--; #Decrement the number of parameters.
-       next;
+      # Any separator, except ',' or '=' or {.*}.
+      push(@str, $_);
+      next;
     }
-    elsif( $_ =~ /{(.*)}/)
+    elsif ($_ =~ /^{(.*)}$/)
     {
-      # gmmproc options have been specified for the current parameter so
-      # process them.
-
-      # Get the options.
-      my $options = $1;
-
-      # Check if param should be optional or an output param.
-      $flags = FLAG_PARAM_OPTIONAL if($options =~ /\?/);
-      $flags |= FLAG_PARAM_OUTPUT if($options =~ />>/);
-
-      # Delete "NULL" from $options, so it won't be interpreted as a parameter name.
-      if ($options =~ s/(!?\bNULL\b)//)
+      if (!$has_value)
       {
-        $flags |= ($1 eq "!NULL") ? FLAG_PARAM_EMPTY_STRING : FLAG_PARAM_NULLPTR;
+        # gmmproc options have been specified for the current parameter so
+        # process them.
+
+        # Get the options.
+        my $options = $1;
+
+        # Check if param should be optional or an output param.
+        $flags = FLAG_PARAM_OPTIONAL if($options =~ /\?/);
+        $flags |= FLAG_PARAM_OUTPUT if($options =~ />>/);
+
+        # Delete "NULL" from $options, so it won't be interpreted as a parameter name.
+        if ($options =~ s/(!?\bNULL\b)//)
+        {
+          $flags |= ($1 eq "!NULL") ? FLAG_PARAM_EMPTY_STRING : FLAG_PARAM_NULLPTR;
+        }
+
+        # Check if it should be mapped to a C param.
+        if ($options =~ /(\w+|\.)/)
+        {
+          $mapping = $1;
+          $mapping = $name if($mapping eq ".");
+        }
       }
-
-      # Check if it should be mapped to a C param.
-      if ($options =~ /(\w+|\.)/)
+      else
       {
-        $mapping = $1;
-        $mapping = $name if($mapping eq ".");
+        # {...} in a default value.
+        push(@str, $_);
       }
       next;
     }
-    elsif ( $par || /^(const )|(<[^,]*>)|([*&>])|(\s+)/ ) #TODO: What's happening here?
-    {
-      push(@str, $_); #This looks like part of the type, so we store it.
-      next;
-    }
     elsif ( $_ eq "=" ) #Default value
     {
       $str[$name_pos] = "" if ($name_pos >= 0);
-      $type = join("", @str); #The type is everything before the = character.
+      # The type is everything before the = character, except the parameter name.
+      $type = join("", @str);
       @str = (); #Wipe it so that it will only contain the default value, which comes next.
       $has_value = 1;
       next;
@@ -310,54 +322,26 @@ sub parse_param($$)
       $mapping = "";
 
       $id = 0;
-
-      next;
-    }
-
-    if ($has_value)
-    {
-      push(@str, $_);
       next;
     }
 
-    # The last identifier before ',', '=', or '{.*}' is the parameter name.
-    # E.g. int name, unsigned long int name = 42, const unsigned int& name.
-    # The name must be preceded by at least one other identifier (the type).
-    # 'const ' is treated specially, as it can't by itself denote the type.
-    $id++;
+    # Anything but a separator in split().
     push(@str, $_);
-    if ($id >= 2)
+
+    if (!$has_value)
     {
-      $name = $_;
-      $name_pos = $#str;
+      # The last identifier before ',', '=', or '{.*}' is the parameter name.
+      # E.g. int name, unsigned long int name = 42, const unsigned int& name.
+      # The name must be preceded by at least one other identifier (the type).
+      # 'const' is treated specially, as it can't by itself denote the type.
+      $id++;
+      if ($id >= 2)
+      {
+        $name = $_;
+        $name_pos = $#str;
+      }
     }
-  }
-
-  # handle last argument  (There's no , at the end.)
-  if ($has_value)
-  {
-    $value = join("", @str);
-  }
-  else
-  {
-    $str[$name_pos] = "" if ($name_pos >= 0);
-    $type = join("", @str);
-  }
-
-  if ($name eq "")
-  {
-    $name = sprintf("p%s", $#$param_types + 2)
-  }
-
-  $type = string_trim($type);
-
-  push(@$param_types, $type);
-  push(@$param_names, $name);
-  push(@$param_default_values, $value);
-  push(@$param_flags, $flags);
-
-  # Map from the c_name to the C++ index (no map if no name given).
-  $$param_mappings{$mapping} = $curr_param if($mapping);
+  } # end foreach
 }
 
 # add_parameter_autoname($, $type, $name)
@@ -392,12 +376,12 @@ sub add_parameter($$$)
   return $self;
 }
 
-# $string get_refdoc_comment($existing_signal_docs)
+# $string get_refdoc_comment($existing_signal_docs, $signal_flags)
 # Generate a readable prototype for signals and merge the prototype into the
 # existing Doxygen comment block.
-sub get_refdoc_comment($$)
+sub get_refdoc_comment($$$)
 {
-  my ($self, $documentation) = @_;
+  my ($self, $documentation, $signal_flags) = @_;
 
   my $str = "  /**\n";
 
@@ -418,6 +402,11 @@ sub get_refdoc_comment($$)
   $str .= ")</tt>\n";
   $str .= "   *\n";
 
+  if ($signal_flags)
+  {
+    $str .= "   * Flags: $signal_flags\n   *\n";
+  }
+
   if($documentation ne "")
   {
     # Remove the initial '/** ' from the existing docs and merge it.
index 03c1131..c50af4a 100644 (file)
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 package GtkDefs;
 use strict;
@@ -714,8 +713,9 @@ BEGIN { @GtkDefs::Signal::ISA=qw(GtkDefs::Function); }
 #
 #       string rettype;
 #
-#       string when. e.g. first, last, or both.
+#       string flags. e.g. Run Last, No Hooks
 #       string entity_type. e.g. vfunc or signal
+#       bool detailed; # optional
 #       bool deprecated; # optional
 #    }
 
@@ -742,7 +742,7 @@ sub new
   $$self{rettype} = "none";
   $$self{param_types} = [];
   $$self{param_names} = [];
-  $$self{when} = "";
+  $$self{flags} = "";
   $$self{class} = "";
 
   # snarf down lisp fields
@@ -761,9 +761,26 @@ sub new
     $$self{rettype} =~ s/-/ /g; #e.g. replace const-gchar* with const gchar*. Otherwise it will be used in code.
   }
 
-  if($def =~ s/\(when "(\S+)"\)//)
+  if ($def =~ s/\(flags "(.*?)"\)//)
   {
-    $$self{when} = $1;
+    $$self{flags} = $1;
+  }
+  elsif ($def =~ s/\(when "(\S+)"\)//)
+  {
+    # "when" is a deprecated alternative to "flags".
+    # when eq "none", "first", "last", or "both".
+    if ($1 eq "first")
+    {
+      $$self{flags} = "Run First";
+    }
+    elsif ($1 eq "last")
+    {
+      $$self{flags} = "Run Last";
+    }
+    elsif ($1 eq "both")
+    {
+      $$self{flags} = "Run First, Run Last";
+    }
   }
 
   if($$self{rettype} eq "none")
@@ -771,6 +788,7 @@ sub new
     $$self{rettype} = "void"
   }
 
+  $$self{detailed} = ($1 eq "#t") if ($def =~ s/\(detailed (\S+)\)//);
   $$self{deprecated} = ($1 eq "#t") if ($def =~ s/\(deprecated (\S+)\)//);
 
   # signals always have a parameter
@@ -791,6 +809,13 @@ sub new
   return $self;
 }
 
+# bool get_detailed()
+sub get_detailed($)
+{
+  my ($self) = @_;
+  return $$self{detailed}; # undef, 0 or 1
+}
+
 # bool get_deprecated()
 sub get_deprecated($)
 {
index d266e63..80ebfc1 100644 (file)
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 package Output;
 use strict;
@@ -100,15 +99,11 @@ sub check_deprecation($$$$$$)
     print STDERR "Warning, $main::source: The $entity_name $entity_type" .
       " is deprecated in the .defs file, but not in _WRAP_$wrapper.\n";
   }
-  # Uncomment the following lines some time in the future, when most
-  # signal.defs files have been updated with deprecation information.
-  # generate_extra_defs.cc was updated to generate this info soon after
-  # glibmm 2.47.6.
-  #elsif (!$defs_deprecated && $wrap_deprecated)
-  #{
-  #  print STDERR "Warning, $main::source: The $entity_name $entity_type" .
-  #    " is deprecated in _WRAP_$wrapper, but not in the .defs file.\n";
-  #}
+  elsif (!$defs_deprecated && $wrap_deprecated)
+  {
+    print STDERR "Warning, $main::source: The $entity_name $entity_type" .
+      " is deprecated in _WRAP_$wrapper, but not in the .defs file.\n";
+  }
 }
 
 sub ifdef($$)
@@ -562,7 +557,6 @@ sub output_wrap_ctor($$$$$)
     }
 
     #Ctor Declaration:
-    #TODO: Add explicit.
     $self->append("  explicit " . $objCppfunc->get_declaration($arg_list) . "\n");
 
     my $errthrow = "";
@@ -636,7 +630,7 @@ sub output_wrap_sig_decl($$$$$$$$$$$$$$)
 
   # Create a merged Doxygen comment block for the signal from the looked up
   # docs (the block will also contain a prototype of the slot as an example).
-  my $doxycomment = $objCppfunc->get_refdoc_comment($documentation);
+  my $doxycomment = $objCppfunc->get_refdoc_comment($documentation, $$objCSignal{flags});
 
   # If there was already a previous doxygen comment, we want to merge this
   # one with the previous so it is one big comment. If
@@ -690,12 +684,12 @@ sub output_wrap_sig_decl($$$$$$$$$$$$$$)
 }
 
 # void output_wrap_enum($filename, $line_num, $cpp_type, $c_type,
-#   $comment, $ref_subst_in, $ref_subst_out, $no_gtype, $in_class,
+#   $comment, $ref_subst_in, $ref_subst_out, $no_gtype,
 #   $deprecated, $deprecation_docs, $newin)
-sub output_wrap_enum($$$$$$$$$$$$$)
+sub output_wrap_enum($$$$$$$$$$$$)
 {
   my ($self, $filename, $line_num, $cpp_type, $c_type,
-    $comment, $ref_subst_in, $ref_subst_out, $no_gtype, $in_class,
+    $comment, $ref_subst_in, $ref_subst_out, $no_gtype,
     $deprecated, $deprecation_docs, $newin) = @_;
 
   my $objEnum = GtkDefs::lookup_enum($c_type);
@@ -705,11 +699,10 @@ sub output_wrap_enum($$$$$$$$$$$$$)
     return;
   }
 
-  $objEnum->beautify_values(1);
+  $objEnum->beautify_values();
 
-  my $indent = "  ";
-  $indent .= "  " if ($in_class);
-  my $elements = $objEnum->build_element_list(1, $ref_subst_in, $ref_subst_out, $indent);
+  my $elements = $objEnum->build_element_list($ref_subst_in, $ref_subst_out, "  ");
+  add_m4_quotes(\$elements);
 
   if(!$elements)
   {
@@ -717,57 +710,37 @@ sub output_wrap_enum($$$$$$$$$$$$$)
     return;
   }
 
-  # Chop off the name prefix in the documentation.
-  my $name_prefix = $objEnum->get_name_prefix();
-  unshift(@$ref_subst_in, "^$name_prefix");
-  unshift(@$ref_subst_out, "");
+  my $value_suffix = "Enum";
+  $value_suffix = "Flags" if($$objEnum{flags});
 
   # Get the enum documentation from the parsed docs.
-  $indent = " ";
-  $indent .= "  " if ($in_class);
   my $enum_docs = DocsParser::lookup_enum_documentation("$c_type", "$cpp_type",
-    $indent, $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin);
+    " ", $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin);
 
   # Merge the passed in comment to the existing enum documentation.
-  $comment .= "\n$indent* $enum_docs" if $enum_docs ne "";
-
-  my $value_suffix = "Enum";
-  $value_suffix = "Flags" if ($$objEnum{flags});
+  $comment .= "\n * " . $enum_docs if $enum_docs ne "";
 
-  my $str = sprintf("_ENUM(%s,%s,%s,\`%s\',\`%s\',%d,\`%s\',\`%s\')dnl\n",
+  my $str = sprintf("_ENUM(%s,%s,%s,\`%s\',\`%s\',\`%s\',\`%s\')dnl\n",
     $cpp_type,
     $c_type,
     $value_suffix,
     $elements,
     $no_gtype,
-    $in_class,
     $comment,
     $deprecated
   );
+
   $self->append($str);
 }
 
-sub output_wrap_enum_docs_only($$$$$$$$$$$$)
+sub output_wrap_enum_docs_only($$$$$$$$$$$)
 {
   my ($self, $filename, $line_num, $module_canonical, $cpp_type, $c_type,
-    $comment, $ref_subst_in, $ref_subst_out, $in_class, $deprecation_docs, $newin) = @_;
-
-  my $objEnum = GtkDefs::lookup_enum($c_type);
-  if(!$objEnum)
-  {
-    $self->output_wrap_failed($c_type, "enum defs lookup failed.");
-    return;
-  }
-  # Chop off the name prefix in the documentation.
-  my $name_prefix = $objEnum->get_name_prefix();
-  unshift(@$ref_subst_in, "^$name_prefix");
-  unshift(@$ref_subst_out, "");
+    $comment, $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin) = @_;
 
-  # Get the enum documentation from the parsed docs.
-  my $indent = " ";
-  $indent .= "  " if ($in_class);
+  # Get the existing enum description from the parsed docs.
   my $enum_docs = DocsParser::lookup_enum_documentation("$c_type", "$cpp_type",
-    $indent, $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin);
+    " ", $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin);
 
   if($enum_docs eq "")
   {
@@ -776,10 +749,10 @@ sub output_wrap_enum_docs_only($$$$$$$$$$$$)
   }
 
   # Include the enum docs in the module's enum docs group.
-  $enum_docs .= "\n$indent*\n$indent* \@ingroup ${module_canonical}Enums";
+  $enum_docs .= "\n *\n * \@ingroup ${module_canonical}Enums";
 
   # Merge the passed in comment to the existing enum documentation.
-  $comment = "/** " . $comment . "\n$indent* " . $enum_docs . "\n$indent*/\n";
+  $comment = "/** " . $comment . "\n * " . $enum_docs . "\n */\n";
 
   $self->append($comment);
 }
@@ -805,7 +778,7 @@ sub output_wrap_gerror($$$$$$$$$$$$$)
   # Shouldn't happen, and if it does, I'd like to know that.
   warn if($$objEnum{flags});
 
-  $objEnum->beautify_values(0);
+  $objEnum->beautify_values();
 
   # cut off the module prefix, e.g. GDK_
   my $prefix = $domain;
@@ -815,7 +788,8 @@ sub output_wrap_gerror($$$$$$$$$$$$$)
   unshift(@$ref_subst_in, "^${prefix}_");
   unshift(@$ref_subst_out, "");
 
-  my $elements = $objEnum->build_element_list(0, $ref_subst_in, $ref_subst_out, "    ");
+  my $elements = $objEnum->build_element_list($ref_subst_in, $ref_subst_out, "    ");
+  add_m4_quotes(\$elements);
 
   # Get the enum documentation from the parsed docs.
   my $enum_docs = DocsParser::lookup_enum_documentation("$c_type", "Code",
@@ -841,7 +815,7 @@ sub output_wrap_gerror($$$$$$$$$$$$$)
     # $class_docs has got ` and ' replaced and m4 quotes added in WrapParser::
     # on_comment_doxygen() and extract_preceding_documentation().
     # Fix $extra_class_docs here. $deprecation_docs can contain any characters.
-    DocsParser::add_m4_quotes(\$extra_class_docs);
+    add_m4_quotes(\$extra_class_docs);
     $class_docs .= $extra_class_docs;
   }
 
@@ -875,22 +849,22 @@ sub output_wrap_any_property($$$$$$$$$$)
   my $proxy_suffix = "";
 
   # Read/Write:
-  if($objProperty->get_construct_only() eq 1)
+  if ($objProperty->get_construct_only())
   {
     # construct-only functions can be read, but not written.
     $proxy_suffix = "_ReadOnly";
 
-    if($objProperty->get_readable() ne 1)
+    if (!$objProperty->get_readable())
     {
       $self->output_wrap_failed($name, "attempt to wrap write-only and construct-only property.");
       return;
     }
   }
-  elsif($objProperty->get_readable() ne 1)
+  elsif (!$objProperty->get_readable())
   {
     $proxy_suffix = "_WriteOnly";
   }
-  elsif($objProperty->get_writable() ne 1)
+  elsif (!$objProperty->get_writable())
   {
     $proxy_suffix = "_ReadOnly";
   }
@@ -938,6 +912,26 @@ sub output_wrap_any_property($$$$$$$$$$)
     }
   }
 
+  # Default value, if available:
+  my $default_value = $objProperty->get_default_value();
+  if (defined($default_value))
+  {
+    DocsParser::convert_value_to_cpp(\$default_value);
+
+    # Add double quotes around a string value.
+    if ($objProperty->get_type() eq "GParamString")
+    {
+      $default_value = "\"" . $default_value . "\"";
+    }
+    $default_value = "Default value: $default_value";
+    add_m4_quotes(\$default_value);
+    if ($documentation ne "")
+    {
+      $documentation .= "\n   *\n   * ";
+    }
+    $documentation .= $default_value;
+  }
+
   #Declaration:
   if($deprecated ne "")
   {
index 265a3f7..a5fc618 100644 (file)
@@ -27,6 +27,7 @@ our @EXPORT_OK;
 #       bool writable;
 #       bool construct_only;
 #       bool deprecated; # optional
+#       string default_value; # optional
 #       string docs;
 #    }
 
@@ -48,10 +49,11 @@ sub new
   $$self{writable} = ($1 eq "#t")       if ($def =~ s/\(writable (\S+)\)//);
   $$self{construct_only} = ($1 eq "#t") if ($def =~ s/\(construct-only (\S+)\)//);
   $$self{deprecated} = ($1 eq "#t")     if ($def =~ s/\(deprecated (\S+)\)//);
+  $$self{default_value} = $1            if ($def =~ s/\(default-value "(.*?)"\)//);
   $$self{entity_type} = 'property';
 
   # Property documentation:
-  my $propertydocs = $1                     if ($def =~ s/\(docs "([^"]*)"\)//);
+  my $propertydocs = $1                 if ($def =~ s/\(docs "([^"]*)"\)//);
   # Add a full-stop if there is not one already:
   if(defined($propertydocs))
   {
@@ -118,6 +120,12 @@ sub get_deprecated($)
   return $$self{deprecated}; # undef, 0 or 1
 }
 
+sub get_default_value($)
+{
+  my ($self) = @_;
+  return $$self{default_value}; # undef or a string (possibly empty)
+}
+
 sub get_docs($$)
 {
   my ($self, $deprecation_docs, $newin) = @_;
index bf033c6..9b0dd66 100644 (file)
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #
 # This file holds basic functions used throughout gtkmmproc modules.
index 829f9b1..cb3337a 100644 (file)
@@ -13,8 +13,7 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 package WrapParser;
 use strict;
@@ -711,7 +710,6 @@ sub string_split_commas($;$)
   $ignore_quotes = 2 unless defined $ignore_quotes;
   my @out;
   my $level = 0;
-  my $in_braces = 0;
   my $in_quotes = 0;
   my $str = "";
   my @in = split(/([,"()<>{}])/, $in);
@@ -728,15 +726,12 @@ sub string_split_commas($;$)
     $in_quotes = !$in_quotes if ($t eq '"' and scalar(@out) >= $ignore_quotes);
     if (!$in_quotes)
     {
-      $in_braces++ if ($t eq "{");
-      $in_braces-- if ($t eq "}");
+      $level++ if ($t eq "(" or $t eq "<" or $t eq "{");
 
-      $level++ if ($t eq "(" or $t eq "<");
-
-      # In the case of a '>' decrease the level if it is not in a {...}
-      # because if it is found in a {...} it is most likely indicating that
-      # a parameter in a method declaration is an output param.
-      $level-- if ($t eq ")" or ($t eq ">" && !$in_braces));
+      # In the case of a '>' decrease the level if it is not in a {...} without
+      # a preceding '<', because then it is most likely indicating that
+      # a parameter in a method declaration is an output parameter (name{>>}).
+      $level-- if ($t eq ")" or $t eq "}" or ($t eq ">" && $str !~ /{[^<}]*$/));
 
       # Don't split at comma, if inside a function, e.g. void f1(int x, int y)
       # or std::map<Glib::ustring, float> f2(),
@@ -1449,6 +1444,11 @@ sub on_wrap_any_enum($$)
     {
       $no_gtype = "NO_GTYPE";
     }
+    elsif ($arg =~ /^(get_type_func=)(\s*)$/)
+    {
+      my $part1 = $1;
+      my $part2 = $2;
+    }
     elsif ($arg =~ /^s#([^#]+)#([^#]*)#$/)
     {
       push(@subst_in,  $1);
@@ -1472,22 +1472,6 @@ sub on_wrap_any_enum($$)
     $argDeprecated, $deprecation_docs, $newin);
 }
 
-# void on_wrap_enum()
-# _WRAP_ENUM(cpp_type, c_type [,NO_GTYPE] [,s#regexpr#subst#]*)
-# Optional arguments:
-# NO_GTYPE Don't generate code for a specialization of the template
-#          Glib::Value_Enum or Glib::Value_Flags.
-#          Necessary, if the C type enum is not registered as a GType.
-# s#regexpr#subst# Zero or more substitutions in names of enum constants, e.g. s#^DATE_##.
-#
-# _WRAP_ENUM can be located either in a class or outside all classes.
-# When located in a class, and Value specialization shall be generated or it's
-# a Flags type (i.e. bitwise operators shall be generated), then the following
-# requirements must be fulfilled:
-# 1. _WRAP_ENUM must be located in the public part of the class.
-# 2. The class must contain a class macro (_CLASS_GENERIC, _CLASS_GOBJECT,
-#    _CLASS_GTKOBJECT, etc.) before _WRAP_ENUM.
-#
 sub on_wrap_enum($)
 {
   my ($self) = @_;
@@ -1502,7 +1486,7 @@ sub on_wrap_enum($)
 
   $$self{objOutputter}->output_wrap_enum(
     $$self{filename}, $$self{line_num}, $cpp_type, $c_type,
-    $comment, $ref_subst_in, $ref_subst_out, $no_gtype, $$self{in_class},
+    $comment, $ref_subst_in, $ref_subst_out, $no_gtype,
     $argDeprecated, $deprecation_docs, $newin);
 }
 
@@ -1524,7 +1508,7 @@ sub on_wrap_enum_docs_only($)
 
   $$self{objOutputter}->output_wrap_enum_docs_only(
     $$self{filename}, $$self{line_num}, $module_canonical, $cpp_type, $c_type,
-    $comment, $ref_subst_in, $ref_subst_out, $$self{in_class}, $deprecation_docs, $newin);
+    $comment, $ref_subst_in, $ref_subst_out, $deprecation_docs, $newin);
 }
 
 sub on_wrap_gerror($)
@@ -1678,7 +1662,7 @@ sub output_wrap_signal($$$$$$$$$$$$$$$$$)
     $objCSignal = GtkDefs::lookup_signal($$self{c_class}, $signal_name);
 
     # Check for failed lookup.
-    if($objCSignal eq 0)
+    if (!$objCSignal)
     {
       print STDERR "$signal_name\n";
         $objOutputter->output_wrap_failed($signal_name,
@@ -1687,6 +1671,19 @@ sub output_wrap_signal($$$$$$$$$$$$$$$$$)
     }
   }
 
+  # Check detailed.
+  my $defs_detailed = $objCSignal->get_detailed();
+    if ($defs_detailed && !$detail_name)
+  {
+    print STDERR "Warning, $main::source: The $signal_name signal" .
+      " is marked 'detailed' in the .defs file, but not in _WRAP_SIGNAL.\n";
+  }
+  elsif (!$defs_detailed && $detail_name)
+  {
+    print STDERR "Warning, $main::source: The $signal_name signal" .
+      " is marked 'detailed' in _WRAP_SIGNAL, but not in the .defs file.\n";
+  }
+
   Output::check_deprecation($$self{deprecated}, $objCSignal->get_deprecated(),
     $deprecated, $signal_name, "signal", "SIGNAL");
 
@@ -1695,7 +1692,7 @@ sub output_wrap_signal($$$$$$$$$$$$$$$$$)
     $deprecated, $deprecation_docs, $newin, $exceptionHandler,
     $detail_name, $bTwoSignalMethods);
 
-  if($bNoDefaultHandler eq 0)
+  if (!$bNoDefaultHandler)
   {
     $objOutputter->output_wrap_default_signal_handler_h($filename, $line_num,
       $objCppSignal, $objCSignal, $ifdef, $deprecated, $exceptionHandler);
index 3d8477d..150ada4 100755 (executable)
@@ -5,9 +5,9 @@
 # files that it depends on.
 
 # Example: In glibmm, go to directory glibmm, and run
-#   tools/test_scripts/testheaders.sh -I glib glibmm-2.54 gio # compile glibmm/gio/giomm/*.h
-#   tools/test_scripts/testheaders.sh glibmm-2.54 glib gio    # compile glibmm/glib/glibmm/*.h and glibmm/gio/giomm/*.h
-#   tools/test_scripts/testheaders.sh -I glib -I gio glibmm-2.54 glib/glibmm/ustring.h # compile glibmm/glib/glibmm/ustring.h
+#   tools/test_scripts/testheaders.sh -I glib glibmm-2.4 gio # compile glibmm/gio/giomm/*.h
+#   tools/test_scripts/testheaders.sh glibmm-2.4 glib gio    # compile glibmm/glib/glibmm/*.h and glibmm/gio/giomm/*.h
+#   tools/test_scripts/testheaders.sh -I glib -I gio glibmm-2.4 glib/glibmm/ustring.h # compile glibmm/glib/glibmm/ustring.h
 
 # Usage: testheaders.sh [-I<dir>]... <pkg> [<dir> | <file>]...
 # -I<dir> is added to the g++ command.
@@ -18,9 +18,6 @@ function usage() {
   exit 1
 }
 
-#extra_gcc_args=-std=c++11
-extra_gcc_args=
-
 # Search for directories to include in CFLAGS.
 idirs=""
 while [ $# -gt 0 ]
@@ -78,11 +75,11 @@ do
     for headerfile in $i/${i}mm/*.h
     do
       echo "=== $headerfile"
-      g++ -c -x c++ $extra_gcc_args -o /dev/null $headerfile $CFLAGS
+      g++ -c -x c++ -std=c++11 -o /dev/null $headerfile $CFLAGS
     done
   else
     echo "=== $i"
-    g++ -c -x c++ $extra_gcc_args -o /dev/null $i $CFLAGS
+    g++ -c -x c++ -std=c++11 -o /dev/null $i $CFLAGS
   fi
 done