diff --git a/client/Mac/CMakeLists.txt b/client/Mac/CMakeLists.txt index 734b66933..2183eb9d2 100644 --- a/client/Mac/CMakeLists.txt +++ b/client/Mac/CMakeLists.txt @@ -10,13 +10,14 @@ include_directories(${FRAMEWORK_HEADERS_PATH} /System/Library/Frameworks) # set(CMAKE_OSX_SYSROOT MacOSX10.7.sdk) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -mmacosx-version-min=10.4") set(GUI_TYPE MACOSX_BUNDLE) - + # Import libraries find_library(FOUNDATION_LIBRARY Foundation) find_library(COCOA_LIBRARY Cocoa) find_library(APPKIT_LIBRARY AppKit) set(MACOSX_BUNDLE_INFO_STRING "MacFreeRDP") +set(MACOSX_BUNDLE_ICON_FILE "FreeRDP.icns") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.freerdp.mac") set(MACOSX_BUNDLE_BUNDLE_IDENTIFIER "FreeRDP.Mac") set(MACOSX_BUNDLE_LONG_VERSION_STRING "MacFreeRDP Version 1.0.1") @@ -27,35 +28,37 @@ set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2012. All Rights Reserved.") set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu") set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication") - + mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY) set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY}) set(APP_TYPE MACOSX_BUNDLE) # OS X Interface Builder files -file(GLOB MacFreeRDP_XIBS *.xib) +file(GLOB ${MODULE_NAME}_XIBS *.xib) + +set(${MODULE_NAME}_RESOURCES ${${MODULE_NAME}_XIBS} ${MACOSX_BUNDLE_ICON_FILE}) # Headers -file(GLOB MacFreeRDP_Headers *.h) +file(GLOB ${MODULE_NAME}_HEADERS *.h) # Source -file(GLOB MacFreeRDP_Source *.m) +file(GLOB ${MODULE_NAME}_SOURCES *.m) -add_executable(MacFreeRDP +add_executable(${MODULE_NAME} ${APP_TYPE} - ${MacFreeRDP_Headers} - ${MacFreeRDP_Source} - ${MacFreeRDP_XIBS}) + ${${MODULE_NAME}_HEADERS} + ${${MODULE_NAME}_SOURCES} + ${${MODULE_NAME}_RESOURCES}) # This is necessary for the xib file part below configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) # This allows for automatic xib to nib ibitool -set_target_properties(MacFreeRDP PROPERTIES RESOURCE "${MacFreeRDP_XIBS}") +set_target_properties(${MODULE_NAME} PROPERTIES RESOURCE "${${MODULE_NAME}_RESOURCES}") # Automatic ref counting # temporary turn off for x86_64 build issue -# set_target_properties(MacFreeRDP PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) +# set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) # Support for automatic reference counting requires non-fragile abi. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-nonfragile-abi") @@ -67,10 +70,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-nonfragile-abi") # In the future the FreeRDP Xcode project should be pulled in for a couple of reasons: # 1) better step-into debugging 2) automatic dependency compilation and multi-arch compilation + linkage # If you know the solutions for 1 and 2, please add below. -set_target_properties(MacFreeRDP PROPERTIES XCODE_ATTRIBUTE_ARCHS "$(NATIVE_ARCH_ACTUAL)") +set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_ARCHS "$(NATIVE_ARCH_ACTUAL)") # Set the info plist to the custom instance -set_target_properties(MacFreeRDP PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) +set_target_properties(${MODULE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS}) @@ -82,8 +85,8 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHI set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD} MODULE winpr - MODULES winpr-crt) + MODULES winpr-input winpr-crt winpr-utils) target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) -set_property(TARGET MacFreeRDP PROPERTY FOLDER "Client/Mac") +set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Mac") diff --git a/client/Mac/FreeRDP.icns b/client/Mac/FreeRDP.icns new file mode 100644 index 000000000..88bd44ca0 Binary files /dev/null and b/client/Mac/FreeRDP.icns differ diff --git a/client/Mac/Info.plist b/client/Mac/Info.plist index 119d3fec6..cb6976502 100644 --- a/client/Mac/Info.plist +++ b/client/Mac/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable CFBundleIconFile - + FreeRDP CFBundleIdentifier FreeRDP.Mac CFBundleInfoDictionaryVersion diff --git a/client/Mac/MRDPView.m b/client/Mac/MRDPView.m index 449d7c181..faa11e506 100644 --- a/client/Mac/MRDPView.m +++ b/client/Mac/MRDPView.m @@ -815,7 +815,7 @@ int rdp_connect() instance->ContextNew = mac_context_new; instance->ContextFree = mac_context_free; instance->ReceiveChannelData = receive_channel_data; - instance->Authenticate = mac_authenticate; + instance->Authenticate = mac_authenticate; freerdp_context_new(instance); status = freerdp_connect(instance); @@ -929,13 +929,13 @@ BOOL mac_pre_connect(freerdp* instance) freerdp_client_load_addins(instance->context->channels, instance->settings); - settings = instance->settings; + settings = instance->settings; bitmap_cache = settings->BitmapCacheEnabled; instance->settings->ColorDepth = 32; instance->settings->SoftwareGdi = TRUE; - settings->OsMajorType = OSMAJORTYPE_UNIX; + settings->OsMajorType = OSMAJORTYPE_UNIX; settings->OsMinorType = OSMINORTYPE_NATIVE_XSERVER; settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE; @@ -966,12 +966,11 @@ BOOL mac_pre_connect(freerdp* instance) settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE; settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE; - - - + [g_mrdpview setViewSize:instance->settings->DesktopWidth :instance->settings->DesktopHeight]; freerdp_channels_pre_connect(instance->context->channels, instance); + return TRUE; } @@ -1008,11 +1007,10 @@ BOOL mac_post_connect(freerdp* instance) flags = CLRBUF_32BPP; gdi_init(instance, flags, NULL); - rdpGdi* gdi = instance->context->gdi; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - g_mrdpview->bitmap_context = CGBitmapContextCreate(gdi->primary_buffer, gdi->width, gdi->height, 8, gdi->width * 4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst); + rdpGdi* gdi = instance->context->gdi; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + g_mrdpview->bitmap_context = CGBitmapContextCreate(gdi->primary_buffer, gdi->width, gdi->height, 8, gdi->width * 4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst); - pointer_cache_register_callbacks(instance->update); graphics_register_pointer(instance->context->graphics, &rdp_pointer); @@ -1062,27 +1060,30 @@ BOOL mac_post_connect(freerdp* instance) BOOL mac_authenticate(freerdp* instance, char** username, char** password, char** domain) { - PasswordDialog * dialog = [PasswordDialog new]; + PasswordDialog * dialog = [PasswordDialog new]; - dialog.serverName = [NSString stringWithCString:instance->settings->ServerHostname encoding:NSUTF8StringEncoding]; + dialog.serverName = [NSString stringWithCString:instance->settings->ServerHostname encoding:NSUTF8StringEncoding]; - if (*username) - dialog.userName = [NSString stringWithCString:*username encoding:NSUTF8StringEncoding]; + if (*username) + dialog.userName = [NSString stringWithCString:*username encoding:NSUTF8StringEncoding]; - if (*password) - dialog.password = [NSString stringWithCString:*password encoding:NSUTF8StringEncoding]; + if (*password) + dialog.password = [NSString stringWithCString:*password encoding:NSUTF8StringEncoding]; - BOOL ok = [dialog runModal]; - if (ok) { - const char* submittedUsername = [dialog.userName cStringUsingEncoding:NSUTF8StringEncoding]; - *username = malloc((strlen(submittedUsername) + 1) * sizeof(char)); - strcpy(*username, submittedUsername); + BOOL ok = [dialog runModal]; + + if (ok) + { + const char* submittedUsername = [dialog.userName cStringUsingEncoding:NSUTF8StringEncoding]; + *username = malloc((strlen(submittedUsername) + 1) * sizeof(char)); + strcpy(*username, submittedUsername); - const char* submittedPassword = [dialog.password cStringUsingEncoding:NSUTF8StringEncoding]; - *password = malloc((strlen(submittedPassword) + 1) * sizeof(char)); - strcpy(*password, submittedPassword); - } - return ok; + const char* submittedPassword = [dialog.password cStringUsingEncoding:NSUTF8StringEncoding]; + *password = malloc((strlen(submittedPassword) + 1) * sizeof(char)); + strcpy(*password, submittedPassword); + } + + return ok; } /** *********************************************************************