mirror of
https://github.com/clementine-player/Clementine
synced 2024-12-18 20:34:39 +01:00
Add and use scoped_cftyperef from Chromium.
This commit is contained in:
parent
87b94de0d7
commit
17c8189dcf
1
debian/copyright
vendored
1
debian/copyright
vendored
@ -46,6 +46,7 @@ Copyright: 2004, Melchior FRANZ <mfranz@kde.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/core/scoped_nsobject.h
|
||||
src/core/scoped_cftyperef.h
|
||||
Copyright: 2011, The Chromium Authors
|
||||
License: BSD-Google
|
||||
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "macglobalshortcutbackend.h"
|
||||
#include "utilities.h"
|
||||
#include "core/logging.h"
|
||||
#include "core/scoped_cftyperef.h"
|
||||
|
||||
#ifdef HAVE_SPARKLE
|
||||
#import <Sparkle/SUUpdater.h>
|
||||
@ -259,12 +260,10 @@ void CheckForUpdates() {
|
||||
}
|
||||
|
||||
QString GetBundlePath() {
|
||||
CFURLRef app_url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
||||
CFStringRef mac_path = CFURLCopyFileSystemPath(app_url, kCFURLPOSIXPathStyle);
|
||||
const char* path = CFStringGetCStringPtr(mac_path, CFStringGetSystemEncoding());
|
||||
ScopedCFTypeRef<CFURLRef> app_url(CFBundleCopyBundleURL(CFBundleGetMainBundle()));
|
||||
ScopedCFTypeRef<CFStringRef> mac_path(CFURLCopyFileSystemPath(app_url.get(), kCFURLPOSIXPathStyle));
|
||||
const char* path = CFStringGetCStringPtr(mac_path.get(), CFStringGetSystemEncoding());
|
||||
QString bundle_path = QString::fromUtf8(path);
|
||||
CFRelease(app_url);
|
||||
CFRelease(mac_path);
|
||||
return bundle_path;
|
||||
}
|
||||
|
||||
|
77
src/core/scoped_cftyperef.h
Normal file
77
src/core/scoped_cftyperef.h
Normal file
@ -0,0 +1,77 @@
|
||||
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef BASE_MAC_SCOPED_CFTYPEREF_H_
|
||||
#define BASE_MAC_SCOPED_CFTYPEREF_H_
|
||||
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
|
||||
// ScopedCFTypeRef<> is patterned after scoped_ptr<>, but maintains ownership
|
||||
// of a CoreFoundation object: any object that can be represented as a
|
||||
// CFTypeRef. Style deviations here are solely for compatibility with
|
||||
// scoped_ptr<>'s interface, with which everyone is already familiar.
|
||||
//
|
||||
// When ScopedCFTypeRef<> takes ownership of an object (in the constructor or
|
||||
// in reset()), it takes over the caller's existing ownership claim. The
|
||||
// caller must own the object it gives to ScopedCFTypeRef<>, and relinquishes
|
||||
// an ownership claim to that object. ScopedCFTypeRef<> does not call
|
||||
// CFRetain().
|
||||
template<typename CFT>
|
||||
class ScopedCFTypeRef {
|
||||
public:
|
||||
typedef CFT element_type;
|
||||
|
||||
explicit ScopedCFTypeRef(CFT object = NULL)
|
||||
: object_(object) {
|
||||
}
|
||||
|
||||
~ScopedCFTypeRef() {
|
||||
if (object_)
|
||||
CFRelease(object_);
|
||||
}
|
||||
|
||||
void reset(CFT object = NULL) {
|
||||
if (object_)
|
||||
CFRelease(object_);
|
||||
object_ = object;
|
||||
}
|
||||
|
||||
bool operator==(CFT that) const {
|
||||
return object_ == that;
|
||||
}
|
||||
|
||||
bool operator!=(CFT that) const {
|
||||
return object_ != that;
|
||||
}
|
||||
|
||||
operator CFT() const {
|
||||
return object_;
|
||||
}
|
||||
|
||||
CFT get() const {
|
||||
return object_;
|
||||
}
|
||||
|
||||
void swap(ScopedCFTypeRef& that) {
|
||||
CFT temp = that.object_;
|
||||
that.object_ = object_;
|
||||
object_ = temp;
|
||||
}
|
||||
|
||||
// ScopedCFTypeRef<>::release() is like scoped_ptr<>::release. It is NOT
|
||||
// a wrapper for CFRelease(). To force a ScopedCFTypeRef<> object to call
|
||||
// CFRelease(), use ScopedCFTypeRef<>::reset().
|
||||
CFT release() __attribute__((warn_unused_result)) {
|
||||
CFT temp = object_;
|
||||
object_ = NULL;
|
||||
return temp;
|
||||
}
|
||||
|
||||
private:
|
||||
CFT object_;
|
||||
|
||||
Q_DISABLE_COPY(ScopedCFTypeRef);
|
||||
};
|
||||
|
||||
#endif // BASE_MAC_SCOPED_CFTYPEREF_H_
|
Loading…
Reference in New Issue
Block a user