mirror of
https://github.com/clementine-player/Clementine
synced 2024-12-18 12:28:31 +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+
|
License: GPL-2+
|
||||||
|
|
||||||
Files: src/core/scoped_nsobject.h
|
Files: src/core/scoped_nsobject.h
|
||||||
|
src/core/scoped_cftyperef.h
|
||||||
Copyright: 2011, The Chromium Authors
|
Copyright: 2011, The Chromium Authors
|
||||||
License: BSD-Google
|
License: BSD-Google
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include "macglobalshortcutbackend.h"
|
#include "macglobalshortcutbackend.h"
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
#include "core/logging.h"
|
#include "core/logging.h"
|
||||||
|
#include "core/scoped_cftyperef.h"
|
||||||
|
|
||||||
#ifdef HAVE_SPARKLE
|
#ifdef HAVE_SPARKLE
|
||||||
#import <Sparkle/SUUpdater.h>
|
#import <Sparkle/SUUpdater.h>
|
||||||
@ -259,12 +260,10 @@ void CheckForUpdates() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString GetBundlePath() {
|
QString GetBundlePath() {
|
||||||
CFURLRef app_url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
|
ScopedCFTypeRef<CFURLRef> app_url(CFBundleCopyBundleURL(CFBundleGetMainBundle()));
|
||||||
CFStringRef mac_path = CFURLCopyFileSystemPath(app_url, kCFURLPOSIXPathStyle);
|
ScopedCFTypeRef<CFStringRef> mac_path(CFURLCopyFileSystemPath(app_url.get(), kCFURLPOSIXPathStyle));
|
||||||
const char* path = CFStringGetCStringPtr(mac_path, CFStringGetSystemEncoding());
|
const char* path = CFStringGetCStringPtr(mac_path.get(), CFStringGetSystemEncoding());
|
||||||
QString bundle_path = QString::fromUtf8(path);
|
QString bundle_path = QString::fromUtf8(path);
|
||||||
CFRelease(app_url);
|
|
||||||
CFRelease(mac_path);
|
|
||||||
return bundle_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