Ronald Oussoren avatar Ronald Oussoren committed d727241 Merge

Merge fix for issue #44

Comments (0)

Files changed (38)

pyobjc-core/Modules/objc/module.m

 	return protocols;
 }
 
+PyDoc_STRVAR(protocolNamed_doc,
+	"_protocolNamed(name) -> Protocol\n");
+static PyObject*
+protocolNamed(PyObject* self __attribute__((__unused__)), PyObject* args, PyObject* kwds)
+{
+static 	char* keywords[] = { "name", NULL };
+	char* name;
+	Protocol* p;
+
+	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", keywords, &name)) {
+		return NULL;
+	}
+
+	p = objc_getProtocol(name);
+	if (p == NULL) {
+		PyErr_SetString(PyExc_AttributeError, name);
+		return NULL;
+	}
+	return PyObjCFormalProtocol_ForProtocol(p);
+}
+
 
 PyDoc_STRVAR(protocolsForClass_doc,
 	"protocolsForClass(cls) -> [Protocols]\n"
 	{ "allocateBuffer", (PyCFunction)allocateBuffer, METH_VARARGS|METH_KEYWORDS, allocateBuffer_doc },
 	{ "protocolsForClass", (PyCFunction)protocolsForClass, METH_VARARGS|METH_KEYWORDS, protocolsForClass_doc },
 	{ "protocolsForProcess", (PyCFunction)protocolsForProcess, METH_NOARGS, protocolsForProcess_doc },
+	{ "_protocolNamed", (PyCFunction)protocolNamed, METH_VARARGS|METH_KEYWORDS, protocolNamed_doc },
 	{ "registerCFSignature", (PyCFunction)registerCFSignature, METH_VARARGS|METH_KEYWORDS, registerCFSignature_doc },
 #if PY_MAJOR_VERSION == 2
 	{ "CFToObject", (PyCFunction)objc_CFToObject, METH_VARARGS|METH_KEYWORDS, objc_CFToObject_doc },

pyobjc-core/Modules/objc/objc-runtime-compat.m

 	return protocols;
 }
 
+static Protocol*  compat_objc_getProtocol(char* name)
+{
+	uint32_t image_count, image_index;
+	image_count = _dyld_image_count();
+	for (image_index = 0; image_index < image_count; image_index++) {
+		uint32_t size = 0;
+		const struct mach_header *mh = _dyld_get_image_header(image_index);
+		intptr_t slide = _dyld_get_image_vmaddr_slide(image_index);
+		ProtocolTemplate *protos = (ProtocolTemplate*)(
+			((char *)getsectdatafromheader(mh, SEG_OBJC, "__protocol", &size)) +
+			slide);
+		uint32_t nprotos = size / sizeof(ProtocolTemplate);
+		uint32_t i;
+
+		if (nprotos == 0) continue;
+
+		for (i = 0; i < nprotos; i++) {
+			Protocol* p = (Protocol*)&protos[i];
+			if (strcmp([protocol name], name) == 0) {
+				return p;
+			}
+		}
+	}
+	return protocols;
+}
+
+
 static void
 compat_objc_registerClassPair(Class cls)
 {
 void (*PyObjC_objc_registerClassPair)(Class) = NULL;
 void (*PyObjC_objc_disposeClassPair)(Class) = NULL;
 Protocol** (*PyObjC_objc_copyProtocolList)(unsigned int*) = NULL;
+Protocol*  (*PyObjC_objc_getProtocol)(char* name) = NULL;
 
 BOOL (*PyObjC_preclass_addMethod)(Class, SEL, IMP, const char*) = NULL;
 BOOL (*PyObjC_preclass_addIvar)(Class cls, 
 	SETUP(objc_registerClassPair);
 	SETUP(objc_disposeClassPair);
 	SETUP(objc_copyProtocolList);
+	SETUP(objc_getProtocol);
 
 	SETUP(object_getClass);
 	SETUP(object_setClass);

pyobjc-core/NEWS.txt

 - Issue #41: the 'install.py' script in the root of pyobjc repository 
   failed to perform an install when running in a clean checkout of the tree.
 
+- Issue #44: the various Cocoa frameworks only export @protocol defintions when
+  they happen to be used by code in the framework. Added extensions to the
+  various framework wrappers to ensure that all protocols are available to
+  python code.
+
 Version 2.5
 -----------
 

pyobjc-core/PyObjCTest/test_pointer_compat.py

+from PyObjCTools.TestSupport import *
+import objc
+import ctypes
+
+
+class TestProxySupport (TestCase):
+    def test_cobject_roundtrip(self):
+        arr = objc.lookUpClass('NSArray').array()
+
+        p = arr.__cobject__()
+        self.assertEqual(type(p).__name__, "PyCapsule")
+        self.assertIn("objc.__object__", repr(p))
+        # Note: 
+
+        v = objc.objc_object(cobject=p)
+        self.assertIs(v, arr)
+
+    def test_voidp_roundtrip(self):
+        arr = objc.lookUpClass('NSArray').array()
+
+        p = arr.__c_void_p__()
+        self.assertIsInstance(p, ctypes.c_void_p)
+        self.assertEqual(p.value, objc.pyobjc_id(arr))
+
+        v = objc.objc_object(c_void_p=p)
+        self.assertIs(v, arr)
+
+    @expectedFailure
+    def test_missing(self):
+        # Add tests simular to the ones above, but
+        # with objects created outside of PyObjC
+        self.fail()
+
+if __name__ == "__main__":
+    main()

pyobjc-framework-AddressBook/Lib/AddressBook/__init__.py

 import Foundation
 
 from AddressBook import _metadata
+from AddressBook._AddressBook import *
 
 sys.modules['AddressBook'] = mod = objc.ObjCLazyModule(
     "AddressBook",

pyobjc-framework-AddressBook/Modules/_AddressBook.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <AddressBook/AddressBook.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_AddressBook_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_AddressBook)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_AddressBook)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-AddressBook/Modules/_AddressBook_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:56:43 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(ABImageClient)); Py_XDECREF(p);
+}

pyobjc-framework-AddressBook/setup.py

 and (Objective-)C frameworks
 '''
 
-from pyobjc_setup import setup
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     name='pyobjc-framework-AddressBook',
         'pyobjc-core>=2.6b1',
         'pyobjc-framework-Cocoa>=2.6b1',
     ],
+    ext_modules = [
+        Extension("AddressBook._AddressBook",
+            [ "Modules/_AddressBook.m" ],
+            extra_link_args=["-framework", "AddressBook"],
+            depends=[
+                os.path.join('Modules', fn)
+                    for fn in os.listdir('Modules')
+                    if fn.startswith('_AddressBook') 
+            ]
+        ),
+    ]
 )

pyobjc-framework-Cocoa/Modules/_AppKit.m

 #include "_AppKit_nsquickdrawview.m"
 #include "_AppKit_nsview.m"
 #include "_AppKit_nswindow.m"
+#include "_AppKit_protocols.m"
 
 
 static PyMethodDef mod_methods[] = {
 PyObjC_MODULE_INIT(_AppKit)
 {
 	PyObject* m;
+	Protocol* p;
 	m = PyObjC_MODULE_CREATE(_AppKit)
 	if (!m) { 
 		PyObjC_INITERROR();
 	if (setup_nsview(m) == -1) PyObjC_INITERROR();
 	if (setup_nswindows(m) == -1) PyObjC_INITERROR();
 
+	p = @protocol(NSSpeechSynthesizerDelegate);
+	if (p != nil) {
+		PyObject* r = PyObjC_ObjCToPython("@", p);
+		Py_XDECREF(r);
+		if (r == NULL) {
+			PyObjC_INITERROR();
+		}
+	}
+
 	PyObjC_INITDONE();
 }

pyobjc-framework-Cocoa/Modules/_AppKit_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:57:46 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(NSAlertDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSAnimatablePropertyContainer)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSAnimationDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSApplicationDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSBrowserDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSChangeSpelling)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSCollectionViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSColorPickingCustom)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSColorPickingDefault)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSComboBoxCellDataSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSComboBoxDataSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSComboBoxDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSControlTextEditingDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDatePickerCellDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDockTilePlugIn)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDraggingInfo)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDrawerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSGlyphStorage)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSIgnoreMisspelledWords)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSImageDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSInputServerMouseTracker)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSInputServiceProvider)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSLayoutManagerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSMatrixDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSMenuDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSOpenSavePanelDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSOutlineViewDataSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSOutlineViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPasteboardItemDataProvider)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPasteboardReading)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPasteboardWriting)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPathCellDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPathControlDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPrintPanelAccessorizing)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSRuleEditorDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSoundDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSpeechRecognizerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSpeechSynthesizerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSplitViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTabViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTableViewDataSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTableViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextAttachmentCell)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextFieldDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextInput)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextInputClient)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextStorageDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextViewDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTokenFieldCellDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTokenFieldDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSToolbarDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSUserInterfaceItemSearching)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSUserInterfaceValidations)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSValidatedUserInterfaceItem)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSWindowDelegate)); Py_XDECREF(p);
+#if defined(MAC_OS_X_VERSION_10_7)
+    p = PyObjC_IdToPython(@protocol(NSDraggingDestination)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDraggingSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPopoverDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextFinderBarContainer)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextFinderClient)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSTextLayoutOrientationProvider)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSUserInterfaceItemIdentification)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSWindowRestoration)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_7) */
+#if defined(MAC_OS_X_VERSION_10_8)
+    p = PyObjC_IdToPython(@protocol(NSPageControllerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSharingServiceDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSharingServicePickerDelegate)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_8) */
+}

pyobjc-framework-Cocoa/Modules/_Foundation.m

 #include "_Foundation_nscoder.m"
 #include "_Foundation_string.m"
 #include "_Foundation_typecode.m"
+#include "_Foundation_protocols.m"
 
 static PyMethodDef mod_methods[] = {
 	FOUNDATION_TYPECODE_METHODS

pyobjc-framework-Cocoa/Modules/_Foundation_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:57:44 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(NSCacheDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSConnectionDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDiscardableContent)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSKeyedArchiverDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSKeyedUnarchiverDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSMachPortDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSMetadataQueryDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSNetServiceBrowserDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSNetServiceDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPortDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSSpellServerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSStreamDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSXMLParserDelegate)); Py_XDECREF(p);
+#if defined(MAC_OS_X_VERSION_10_5)
+    p = PyObjC_IdToPython(@protocol(NSCoding)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSCopying)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSDecimalNumberBehaviors)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSFastEnumeration)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSLocking)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSMutableCopying)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSObject)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLAuthenticationChallengeSender)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLHandleClient)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLProtocolClient)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_5) */
+#if defined(MAC_OS_X_VERSION_10_7)
+    p = PyObjC_IdToPython(@protocol(NSFileManagerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSFilePresenter)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLConnectionDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLDownloadDelegate)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_7) */
+#if defined(MAC_OS_X_VERSION_10_8)
+    p = PyObjC_IdToPython(@protocol(NSSecureCoding)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLConnectionDataDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSURLConnectionDownloadDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSUserNotificationCenterDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSXPCListenerDelegate)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSXPCProxyCreating)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_8) */
+}

pyobjc-framework-Cocoa/PyObjCTest/test_appkit_protocols.py

+from PyObjCTools.TestSupport import *
+import Cocoa
+
+class TestProtocolsExisting (TestCase):
+    def testProtocols(self):
+        objc.protocolNamed('NSAlertDelegate')
+        objc.protocolNamed('NSAnimatablePropertyContainer')
+        objc.protocolNamed('NSAnimationDelegate')
+        objc.protocolNamed('NSApplicationDelegate')
+        objc.protocolNamed('NSBrowserDelegate')
+        objc.protocolNamed('NSChangeSpelling')
+        objc.protocolNamed('NSCollectionViewDelegate')
+        objc.protocolNamed('NSColorPickingCustom')
+        objc.protocolNamed('NSColorPickingDefault')
+        objc.protocolNamed('NSComboBoxCellDataSource')
+        objc.protocolNamed('NSComboBoxDataSource')
+        objc.protocolNamed('NSComboBoxDelegate')
+        objc.protocolNamed('NSControlTextEditingDelegate')
+        objc.protocolNamed('NSDatePickerCellDelegate')
+        objc.protocolNamed('NSDockTilePlugIn')
+        objc.protocolNamed('NSDraggingInfo')
+        objc.protocolNamed('NSDrawerDelegate')
+        objc.protocolNamed('NSGlyphStorage')
+        objc.protocolNamed('NSIgnoreMisspelledWords')
+        objc.protocolNamed('NSImageDelegate')
+        objc.protocolNamed('NSInputServerMouseTracker')
+        objc.protocolNamed('NSInputServiceProvider')
+        objc.protocolNamed('NSLayoutManagerDelegate')
+        objc.protocolNamed('NSMatrixDelegate')
+        objc.protocolNamed('NSMenuDelegate')
+        objc.protocolNamed('NSOpenSavePanelDelegate')
+        objc.protocolNamed('NSOutlineViewDataSource')
+        objc.protocolNamed('NSOutlineViewDelegate')
+        objc.protocolNamed('NSPasteboardItemDataProvider')
+        objc.protocolNamed('NSPasteboardReading')
+        objc.protocolNamed('NSPasteboardWriting')
+        objc.protocolNamed('NSPathCellDelegate')
+        objc.protocolNamed('NSPathControlDelegate')
+        objc.protocolNamed('NSPrintPanelAccessorizing')
+        objc.protocolNamed('NSRuleEditorDelegate')
+        objc.protocolNamed('NSSoundDelegate')
+        objc.protocolNamed('NSSpeechRecognizerDelegate')
+        objc.protocolNamed('NSSpeechSynthesizerDelegate')
+        objc.protocolNamed('NSSplitViewDelegate')
+        objc.protocolNamed('NSTabViewDelegate')
+        objc.protocolNamed('NSTableViewDataSource')
+        objc.protocolNamed('NSTableViewDelegate')
+        objc.protocolNamed('NSTextAttachmentCell')
+        objc.protocolNamed('NSTextDelegate')
+        objc.protocolNamed('NSTextFieldDelegate')
+        objc.protocolNamed('NSTextInput')
+        objc.protocolNamed('NSTextInputClient')
+        objc.protocolNamed('NSTextStorageDelegate')
+        objc.protocolNamed('NSTextViewDelegate')
+        objc.protocolNamed('NSTokenFieldCellDelegate')
+        objc.protocolNamed('NSTokenFieldDelegate')
+        objc.protocolNamed('NSToolbarDelegate')
+        objc.protocolNamed('NSUserInterfaceItemSearching')
+        objc.protocolNamed('NSUserInterfaceValidations')
+        objc.protocolNamed('NSValidatedUserInterfaceItem')
+        objc.protocolNamed('NSWindowDelegate')
+
+    @min_os_level('10.7')
+    def testProtocols10_7(self):
+        objc.protocolNamed('NSDraggingDestination')
+        objc.protocolNamed('NSDraggingSource')
+        objc.protocolNamed('NSPopoverDelegate')
+        objc.protocolNamed('NSTextFinderBarContainer')
+        objc.protocolNamed('NSTextFinderClient')
+        objc.protocolNamed('NSTextLayoutOrientationProvider')
+        objc.protocolNamed('NSUserInterfaceItemIdentification')
+        objc.protocolNamed('NSWindowRestoration')
+
+    @min_os_level('10.8')
+    def testProtocols10_8(self):
+        objc.protocolNamed('NSPageControllerDelegate')
+        objc.protocolNamed('NSSharingServiceDelegate')
+        objc.protocolNamed('NSSharingServicePickerDelegate')
+
+if __name__ == "__main__":
+    main()

pyobjc-framework-CoreLocation/Lib/CoreLocation/__init__.py

 import Foundation
 
 from CoreLocation import _metadata
+from CoreLocation._CoreLocation import *
 import os
 
 if int(os.uname()[2].split('.')[0]) < 12:

pyobjc-framework-CoreLocation/Modules/_CoreLocation.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <CoreLocation/CoreLocation.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_CoreLocation_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_CoreLocation)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_CoreLocation)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-CoreLocation/Modules/_CoreLocation_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:57:31 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(CLLocationManagerDelegate)); Py_XDECREF(p);
+}

pyobjc-framework-CoreLocation/setup.py

 for general tips and tricks regarding the translation between Python
 and (Objective-)C frameworks
 '''
-from pyobjc_setup import setup
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     min_os_level='10.6',
         'pyobjc-core>=2.6b1',
         'pyobjc-framework-Cocoa>=2.6b1',
     ],
+    ext_modules = [
+        Extension("CoreLocation._CoreLocation",
+                [ "Modules/_CoreLocation.m" ],
+                extra_link_args=["-framework", "CoreLocation"],
+                depends=[
+                    os.path.join('Modules', fn)
+                        for fn in os.listdir('Modules')
+                        if fn.startswith('_CoreLocation')
+                ]
+        ),
+    ]
 )

pyobjc-framework-InputMethodKit/Lib/InputMethodKit/__init__.py

 import Foundation
 
 from InputMethodKit import _metadata
+from InputMethodKit._InputMethodKit import *
 
 sys.modules['InputMethodKit'] = mod = objc.ObjCLazyModule('InputMethodKit',
     "com.apple.InputMethodKit",

pyobjc-framework-InputMethodKit/Modules/_InputMethodKit.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <InputMethodKit/InputMethodKit.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_InputMethodKit_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_InputMethodKit)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_InputMethodKit)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-InputMethodKit/Modules/_InputMethodKit_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:32:26 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(IMKMouseHandling)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(IMKStateSetting)); Py_XDECREF(p);
+}

pyobjc-framework-InputMethodKit/PyObjCTest/test_inputmethodkit.py

         self.assert_( hasattr(InputMethodKit.protocols, 'IMKServerInput') )
         self.assert_( isinstance(InputMethodKit.protocols.IMKServerInput, objc.informal_protocol) )
 
+    def testProtocols2(self):
+        objc.protocolNamed('IMKMouseHandling')
+        objc.protocolNamed('IMKStateSetting')
+
 
 
 if __name__ == "__main__":

pyobjc-framework-InputMethodKit/setup.py

 for general tips and tricks regarding the translation between Python
 and (Objective-)C frameworks
 '''
-from pyobjc_setup import setup
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     min_os_level='10.5',
         'pyobjc-core>=2.6b1',
         'pyobjc-framework-Cocoa>=2.6b1',
     ],
+    ext_modules = [
+        Extension("InputMethodKit._InputMethodKit",
+            [ "Modules/_InputMethodKit.m" ],
+            extra_link_args=["-framework", "InputMethodKit"],
+            depends=[
+                os.path.join('Modules', fn)
+                    for fn in os.listdir('Modules')
+                    if fn.startswith('_InputMethodKit')
+            ]
+       ),
+   ]
 )

pyobjc-framework-OpenDirectory/PyObjCTest/test_opendirectory.py

 from PyObjCTools.TestSupport import *
-
+import objc
 import OpenDirectory
 
 try:
     def testConstants(self):
         self.assertIsInstance(OpenDirectory.ODFrameworkErrorDomain, unicode)
 
+    def testProtocols(self):
+        objc.protocolNamed('ODQueryDelegate')
+
 
 if __name__ == "__main__":
     main()

pyobjc-framework-ScriptingBridge/Lib/ScriptingBridge/__init__.py

 import Foundation
 
 from ScriptingBridge import _metadata
+from ScriptingBridge._ScriptingBridge import *
 
 sys.modules['ScriptingBridge'] = mod = objc.ObjCLazyModule('ScriptingBridge',
     "com.apple.ScriptingBridge",

pyobjc-framework-ScriptingBridge/Modules/_ScriptingBridge.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <ScriptingBridge/ScriptingBridge.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_ScriptingBridge_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_ScriptingBridge)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_ScriptingBridge)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-ScriptingBridge/Modules/_ScriptingBridge_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:40:50 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(SBApplicationDelegate)); Py_XDECREF(p);
+}

pyobjc-framework-ScriptingBridge/PyObjCTest/test_scriptingbridge.py

-
 from PyObjCTools.TestSupport import *
+import objc
 from ScriptingBridge import *
 
 class TestSBApplicationHelper (NSObject):
     def testMethods(self):
         self.assertResultIsBOOL(SBApplication.isRunning)
 
+    def testProtocols(self):
+        objc.protocolNamed('SBApplicationDelegate')
+
 
 if __name__ == "__main__":
     main()

pyobjc-framework-ScriptingBridge/setup.py

 for general tips and tricks regarding the translation between Python
 and (Objective-)C frameworks
 '''
-from pyobjc_setup import *
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     min_os_level='10.5',
         'pyobjc-core>=2.6b1',
         'pyobjc-framework-Cocoa>=2.6b1',
     ],
+    ext_modules = [
+        Extension("ScriptingBridge._ScriptingBridge",
+            [ "Modules/_ScriptingBridge.m" ],
+            extra_link_args=["-framework", "ScriptingBridge"],
+            depends=[
+                os.path.join('Modules', fn)
+                    for fn in os.listdir('Modules')
+                    if fn.startswith('_ScriptingBridge')
+            ]
+        ),
+    ]
 )

pyobjc-framework-SyncServices/Lib/SyncServices/__init__.py

 import CoreData
 
 from SyncServices import _metadata
+from SyncServices._SyncServices import *
 
 sys.modules['SyncServices'] = mod = objc.ObjCLazyModule('SyncServices',
     "com.apple.syncservices",

pyobjc-framework-SyncServices/Modules/_SyncServices.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <SyncServices/SyncServices.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_SyncServices_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_SyncServices)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_SyncServices)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-SyncServices/Modules/_SyncServices_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:45:59 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+    p = PyObjC_IdToPython(@protocol(ISyncFiltering)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(ISyncSessionDriverDataSource)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(NSPersistentStoreCoordinatorSyncing)); Py_XDECREF(p);
+}

pyobjc-framework-SyncServices/PyObjCTest/test_syncservices.py

         self.assertHasAttr(SyncServices, 'ISyncClient')
         self.assertIsInstance(SyncServices.ISyncClient, objc.objc_class)
 
+    def testProtocols(self):
+        objc.protocolNamed('ISyncFiltering')
+        objc.protocolNamed('ISyncSessionDriverDataSource')
+        objc.protocolNamed('NSPersistentStoreCoordinatorSyncing')
+
 
 if __name__ == "__main__":
     main()

pyobjc-framework-SyncServices/setup.py

 for general tips and tricks regarding the translation between Python
 and (Objective-)C frameworks
 '''
-from pyobjc_setup import setup
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     name='pyobjc-framework-SyncServices',
         'pyobjc-framework-Cocoa>=2.6b1',
         'pyobjc-framework-CoreData>=2.6b1',
     ],
+    ext_modules = [
+        Extension("SyncServices._SyncServices",
+            [ "Modules/_SyncServices.m" ],
+            extra_link_args=["-framework", "SyncServices"],
+            depends=[
+                os.path.join('Modules', fn)
+                    for fn in os.listdir('Modules')
+                    if fn.startswith('_SyncServices')
+            ]
+        ),
+    ]
 )

pyobjc-framework-WebKit/Lib/WebKit/__init__.py

 import Foundation
 
 from WebKit import _metadata
+from WebKit._WebKit import *
 
 sys.modules['WebKit'] = mod = objc.ObjCLazyModule(
     "WebKit",

pyobjc-framework-WebKit/Modules/_WebKit.m

+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "pyobjc-api.h"
+
+#import <WebKit/WebKit.h>
+
+/* We include the source code here instead of 
+ * using the linker due to limitations in pyobjc-api.h
+ */
+#include "_WebKit_protocols.m"
+
+
+static PyMethodDef mod_methods[] = {
+	{ 0, 0, 0, 0 } /* sentinel */
+};
+
+
+/* Python glue */
+PyObjC_MODULE_INIT(_WebKit)
+{
+	PyObject* m;
+	m = PyObjC_MODULE_CREATE(_WebKit)
+	if (!m) { 
+		PyObjC_INITERROR();
+	}
+
+	if (PyObjC_ImportAPI(m) == -1) PyObjC_INITERROR();
+
+	PyObjC_INITDONE();
+}

pyobjc-framework-WebKit/Modules/_WebKit_protocols.m

+/* 
+ * This file is generated by objective.metadata
+ *
+ * Last update: Tue Jan 15 18:52:03 2013
+ */
+
+static void __attribute__((__used__)) use_protocols(void)
+{
+    PyObject* p;
+#if defined(MAC_OS_X_VERSION_10_5)
+    p = PyObjC_IdToPython(@protocol(DOMEventListener)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(DOMEventTarget)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(DOMNodeFilter)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(DOMXPathNSResolver)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebDocumentRepresentation)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebDocumentSearching)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebDocumentText)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebDocumentView)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebOpenPanelResultListener)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebPlugInViewFactory)); Py_XDECREF(p);
+    p = PyObjC_IdToPython(@protocol(WebPolicyDecisionListener)); Py_XDECREF(p);
+#endif /* defined(MAC_OS_X_VERSION_10_5) */
+}

pyobjc-framework-WebKit/PyObjCTest/test_webkit.py

         self.assert_( hasattr(WebKit, 'WebConvertNSImageToCGImageRef') )
         self.assert_(isinstance(WebKit.WebConvertNSImageToCGImageRef, objc.function) )
 
+    def testProtocols(self):
+        objc.protocolNamed('DOMEventListener')
+        objc.protocolNamed('DOMEventTarget')
+        objc.protocolNamed('DOMNodeFilter')
+        objc.protocolNamed('DOMXPathNSResolver')
+        objc.protocolNamed('WebDocumentRepresentation')
+        objc.protocolNamed('WebDocumentSearching')
+        objc.protocolNamed('WebDocumentText')
+        objc.protocolNamed('WebDocumentView')
+        objc.protocolNamed('WebOpenPanelResultListener')
+        objc.protocolNamed('WebPlugInViewFactory')
+        objc.protocolNamed('WebPolicyDecisionListener')
 
 
 if __name__ == "__main__":

pyobjc-framework-WebKit/setup.py

 for general tips and tricks regarding the translation between Python
 and (Objective-)C frameworks
 '''
-from pyobjc_setup import setup
+from pyobjc_setup import setup, Extension
+import os
 
 setup(
     name='pyobjc-framework-WebKit',
         'pyobjc-core>=2.6b1',
         'pyobjc-framework-Cocoa>=2.6b1',
     ],
+    ext_modules = [
+        Extension("WebKit._WebKit",
+            [ "Modules/_WebKit.m" ],
+            extra_link_args=["-framework", "WebKit"],
+            depends=[
+                os.path.join('Modules', fn)
+                    for fn in os.listdir('Modules')
+                    if fn.startswith('_WebKit')
+            ]
+        ),
+    ]
 )
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.