freerdp: merge with master
5
.gitignore
vendored
@@ -43,6 +43,11 @@ client/X11/xfreerdp.1
|
|||||||
*.xcodeproj/
|
*.xcodeproj/
|
||||||
DerivedData/
|
DerivedData/
|
||||||
|
|
||||||
|
# iOS
|
||||||
|
FreeRDP.build
|
||||||
|
Debug-*
|
||||||
|
Release-*
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
*.vcxproj
|
*.vcxproj
|
||||||
*.vcxproj.*
|
*.vcxproj.*
|
||||||
|
|||||||
@@ -178,13 +178,14 @@ if(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(IOS)
|
if(IOS)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot ${CMAKE_IOS_SDK_ROOT} -g")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWINPR_EXPORTS")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_EXPORTS")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFREERDP_EXPORTS")
|
||||||
|
|
||||||
# Include files
|
# Include files
|
||||||
|
if(NOT IOS)
|
||||||
check_include_files(fcntl.h HAVE_FCNTL_H)
|
check_include_files(fcntl.h HAVE_FCNTL_H)
|
||||||
check_include_files(unistd.h HAVE_UNISTD_H)
|
check_include_files(unistd.h HAVE_UNISTD_H)
|
||||||
check_include_files(stdint.h HAVE_STDINT_H)
|
check_include_files(stdint.h HAVE_STDINT_H)
|
||||||
@@ -192,8 +193,19 @@ check_include_files(inttypes.h HAVE_INTTYPES_H)
|
|||||||
check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
|
check_include_files(sys/modem.h HAVE_SYS_MODEM_H)
|
||||||
check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
|
check_include_files(sys/filio.h HAVE_SYS_FILIO_H)
|
||||||
check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
|
check_include_files(sys/strtio.h HAVE_SYS_STRTIO_H)
|
||||||
|
else()
|
||||||
|
set(HAVE_FCNTL_H 1)
|
||||||
|
set(HAVE_UNISTD_H 1)
|
||||||
|
set(HAVE_STDINT_H 1)
|
||||||
|
set(HAVE_INTTYPES_H 1)
|
||||||
|
set(HAVE_SYS_FILIO_H 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT IOS)
|
||||||
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
|
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
|
||||||
|
else()
|
||||||
|
set(HAVE_TM_GMTOFF 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Mac OS X
|
# Mac OS X
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
@@ -202,7 +214,8 @@ if(APPLE)
|
|||||||
message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
|
message(STATUS "FREERDP_IOS_EXTERNAL_SSL_PATH not set! Required if openssl is not found in the iOS SDK (which usually isn't")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
|
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${FREERDP_IOS_EXTERNAL_SSL_PATH})
|
||||||
else()
|
set_property(GLOBAL PROPERTY XCODE_ATTRIBUTE_SKIP_INSTALL YES)
|
||||||
|
else()
|
||||||
if(IS_DIRECTORY /opt/local/include)
|
if(IS_DIRECTORY /opt/local/include)
|
||||||
include_directories(/opt/local/include)
|
include_directories(/opt/local/include)
|
||||||
link_directories(/opt/local/lib)
|
link_directories(/opt/local/lib)
|
||||||
@@ -229,7 +242,7 @@ if(ANDROID)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||||
if(NOT ANDROID)
|
if(NOT IOS AND NOT ANDROID)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -298,6 +311,7 @@ endif()
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(DIRECTFB_FEATURE_TYPE "DISABLED")
|
set(DIRECTFB_FEATURE_TYPE "DISABLED")
|
||||||
set(FFMPEG_FEATURE_TYPE "OPTIONAL")
|
set(FFMPEG_FEATURE_TYPE "OPTIONAL")
|
||||||
|
set(GSTREAMER_FEATURE_TYPE "OPTIONAL")
|
||||||
if(IOS)
|
if(IOS)
|
||||||
set(X11_FEATURE_TYPE "DISABLED")
|
set(X11_FEATURE_TYPE "DISABLED")
|
||||||
set(ALSA_FEATURE_TYPE "DISABLED")
|
set(ALSA_FEATURE_TYPE "DISABLED")
|
||||||
@@ -410,6 +424,13 @@ endif()
|
|||||||
|
|
||||||
# Sub-directories
|
# Sub-directories
|
||||||
|
|
||||||
|
if(WITH_THIRD_PARTY)
|
||||||
|
add_subdirectory(third-party)
|
||||||
|
if (NOT "${THIRD_PARTY_INCLUDES}" STREQUAL "")
|
||||||
|
include_directories(${THIRD_PARTY_INCLUDES})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(include)
|
add_subdirectory(include)
|
||||||
|
|
||||||
add_subdirectory(libfreerdp)
|
add_subdirectory(libfreerdp)
|
||||||
@@ -418,6 +439,10 @@ if(WITH_CHANNELS)
|
|||||||
add_subdirectory(channels)
|
add_subdirectory(channels)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (IOS)
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "")
|
||||||
|
set(CMAKE_OSX_SYSROOT "iphoneos")
|
||||||
|
endif()
|
||||||
if(WITH_CLIENT)
|
if(WITH_CLIENT)
|
||||||
add_subdirectory(client)
|
add_subdirectory(client)
|
||||||
endif()
|
endif()
|
||||||
@@ -426,10 +451,6 @@ if(WITH_SERVER)
|
|||||||
add_subdirectory(server)
|
add_subdirectory(server)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_THIRD_PARTY)
|
|
||||||
add_subdirectory(third-party)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Packaging
|
# Packaging
|
||||||
|
|
||||||
SET(CPACK_BINARY_ZIP "ON")
|
SET(CPACK_BINARY_ZIP "ON")
|
||||||
@@ -536,4 +557,6 @@ if (ANDROID AND CMAKE_EXTRA_GENERATOR STREQUAL "Eclipse CDT4")
|
|||||||
message(STATUS "Disabled CXX system defines for eclipse (workaround).")
|
message(STATUS "Disabled CXX system defines for eclipse (workaround).")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
include(CPack)
|
include(CPack)
|
||||||
|
|||||||
@@ -57,9 +57,15 @@ if(WITH_FFMPEG)
|
|||||||
add_channel_client_subsystem(${MODULE_PREFIX} ${CHANNEL_NAME} "ffmpeg" "decoder")
|
add_channel_client_subsystem(${MODULE_PREFIX} ${CHANNEL_NAME} "ffmpeg" "decoder")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_XRANDR)
|
if(WITH_GSTREAMER)
|
||||||
if(GSTREAMER_FOUND)
|
set(XRANDR_FEATURE_TYPE "REQUIRED")
|
||||||
|
set(XRANDR_FEATURE_PURPOSE "X11 randr")
|
||||||
|
set(XRANDR_FEATURE_DESCRIPTION "X11 randr extension")
|
||||||
|
find_feature(XRandR ${XRANDR_FEATURE_TYPE} ${XRANDR_FEATURE_PURPOSE} ${XRANDR_FEATURE_DESCRIPTION})
|
||||||
|
if (WITH_XRANDR)
|
||||||
add_channel_client_subsystem(${MODULE_PREFIX} ${CHANNEL_NAME} "gstreamer" "decoder")
|
add_channel_client_subsystem(${MODULE_PREFIX} ${CHANNEL_NAME} "gstreamer" "decoder")
|
||||||
|
else()
|
||||||
|
message(WARNING "Disabling tsmf gstreamer because XRandR wasn't found")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -536,8 +536,12 @@ JNIEXPORT void JNICALL jni_freerdp_set_data_directory(JNIEnv *env, jclass cls, j
|
|||||||
free(settings->HomePath);
|
free(settings->HomePath);
|
||||||
free(settings->ConfigPath);
|
free(settings->ConfigPath);
|
||||||
|
|
||||||
|
int config_dir_len = strlen(directory) + 10; /* +9 chars for /.freerdp and +1 for \0 */
|
||||||
|
char* config_dir_buf = (char*)malloc(config_dir_len);
|
||||||
|
strcpy(config_dir_buf, directory);
|
||||||
|
strcat(config_dir_buf, "/.freerdp");
|
||||||
settings->HomePath = strdup(directory);
|
settings->HomePath = strdup(directory);
|
||||||
settings->ConfigPath = NULL;
|
settings->ConfigPath = config_dir_buf; /* will be freed by freerdp library */
|
||||||
|
|
||||||
(*env)->ReleaseStringUTFChars(env, jdirectory, directory);
|
(*env)->ReleaseStringUTFChars(env, jdirectory, directory);
|
||||||
}
|
}
|
||||||
@@ -597,6 +601,7 @@ JNIEXPORT void JNICALL jni_freerdp_set_connection_info(JNIEnv *env, jclass cls,
|
|||||||
|
|
||||||
/* enable NSCodec */
|
/* enable NSCodec */
|
||||||
settings->NSCodec = TRUE;
|
settings->NSCodec = TRUE;
|
||||||
|
settings->BitmapCacheV3Enabled = TRUE;
|
||||||
|
|
||||||
switch ((int) security)
|
switch ((int) security)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -61,16 +61,3 @@ if(BUILD_TESTING)
|
|||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(IOS AND MONOLITHIC_BUILD AND (NOT BUILD_SHARED_LIBS))
|
|
||||||
# generate combined library
|
|
||||||
foreach(af ${${MODULE_PREFIX}_LIBS})
|
|
||||||
get_target_property(LOC ${af} LOCATION)
|
|
||||||
if ((NOT (${LOC} MATCHES ".*libfreerdp.a$")) AND (NOT (${LOC} MATCHES ".*libwinpr.a$")))
|
|
||||||
set(ALIST ${ALIST} ${LOC})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
get_target_property(LOC ${MODULE_NAME} LOCATION)
|
|
||||||
set(ALIST ${ALIST} ${LOC})
|
|
||||||
message(${ALIST})
|
|
||||||
add_custom_command(TARGET ${MODULE_NAME} POST_BUILD COMMAND libtool -static -o libfreerdp-client-combined.a ${ALIST})
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
@interface UIView (Toast)
|
@interface UIView (Toast)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
# FreeRDP: A Remote Desktop Protocol Implementation
|
# FreeRDP: A Remote Desktop Protocol Implementation
|
||||||
# Android Client
|
# FreeRDP X11 Client
|
||||||
#
|
#
|
||||||
# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
# Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||||||
# Copyright 2013 Martin Fleisz <mfleisz@thinstuff.at>
|
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@@ -15,40 +14,122 @@
|
|||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
project(iFreeRDP)
|
||||||
|
|
||||||
set(IOS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
set(MODULE_NAME "iFreeRDP")
|
||||||
set(IOS_PACKAGE_NAME "iFreeRDP")
|
set(MODULE_PREFIX "IFREERDP_CLIENT")
|
||||||
|
set(APP_TYPE MACOSX_BUNDLE)
|
||||||
|
|
||||||
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/iFreeRDP.xcodeproj/project.pbxproj.cmake ${CMAKE_CURRENT_SOURCE_DIR}/iFreeRDP.xcodeproj/project.pbxproj @ONLY)
|
set(IOS_CLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
set(IOS_CLIENT_ADDITIONS_DIR ${IOS_CLIENT_DIR}/Additions)
|
||||||
|
set(IOS_CLIENT_CONTROLLERS_DIR ${IOS_CLIENT_DIR}/Controllers)
|
||||||
|
set(IOS_CLIENT_FREERDP_DIR ${IOS_CLIENT_DIR}/FreeRDP)
|
||||||
|
set(IOS_CLIENT_MISC_DIR ${IOS_CLIENT_DIR}/Misc)
|
||||||
|
set(IOS_CLIENT_MODELS_DIR ${IOS_CLIENT_DIR}/Models)
|
||||||
|
set(IOS_CLIENT_VIEWS_DIR ${IOS_CLIENT_DIR}/Views)
|
||||||
|
set(IOS_CLIENT_RESOURCES_DIR ${IOS_CLIENT_DIR}/Resources)
|
||||||
|
|
||||||
if(IOS_BUILD_OBJC)
|
include_directories(${IOS_CLIENT_DIR})
|
||||||
# And isn't shiped with the android ndk/sdk so
|
include_directories(${IOS_CLIENT_ADDITIONS_DIR})
|
||||||
# we need to find it on the local machine
|
include_directories(${IOS_CLIENT_CONTROLLERS_DIR})
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, BOTH)
|
include_directories(${IOS_CLIENT_FREERDP_DIR})
|
||||||
find_program(XCODEBUILD_COMMAND xcodebuild)
|
include_directories(${IOS_CLIENT_MISC_DIR})
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER, ONLY)
|
include_directories(${IOS_CLIENT_MODELS_DIR})
|
||||||
|
include_directories(${IOS_CLIENT_VIEWS_DIR})
|
||||||
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
||||||
|
|
||||||
if(XCODEBUILD_COMMAND STREQUAL "XCODEBUILD_COMMAND-NOTFOUND")
|
# Add sources
|
||||||
message(FATAL_ERROR "xcodebuild not found but required to build ios objective-c")
|
set(${MODULE_PREFIX}_SRCS
|
||||||
endif()
|
AppDelegate.m
|
||||||
|
AppDelegate.h
|
||||||
|
main.m)
|
||||||
|
|
||||||
if(IOS_BUILD_OBJC_DEBUG)
|
file(GLOB IOS_CLIENT_ADDITIONS_SRCS ${IOS_CLIENT_ADDITIONS_DIR}/*.m)
|
||||||
set(IOS_BUILD_TYPE "Debug")
|
file(GLOB IOS_CLIENT_ADDITIONS_HDRS ${IOS_CLIENT_ADDITIONS_DIR}/*.h)
|
||||||
else()
|
|
||||||
set(IOS_BUILD_TYPE "Release")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(IOS_APP_OUTPUT_DIR "${IOS_SOURCE_DIR}/bin/${IOS_BUILD_TYPE}")
|
file(GLOB IOS_CLIENT_CONTROLLERS_SRCS ${IOS_CLIENT_CONTROLLERS_DIR}/*.m)
|
||||||
set(IOS_APP "${IOS_APP_OUTPUT_DIR}/${IOS_PACKAGE_NAME}.app")
|
file(GLOB IOS_CLIENT_CONTROLLERS_HDRS ${IOS_CLIENT_CONTROLLERS_DIR}/*.h)
|
||||||
|
|
||||||
# command to create the ios package
|
file(GLOB IOS_CLIENT_FREERDP_SRCS ${IOS_CLIENT_FREERDP_DIR}/*.m)
|
||||||
add_custom_command(
|
file(GLOB IOS_CLIENT_FREERDP_HDRS ${IOS_CLIENT_FREERDP_DIR}/*.h)
|
||||||
OUTPUT "${IOS_APP}"
|
|
||||||
COMMAND ${XCODEBUILD_COMMAND} -project "${IOS_SOURCE_DIR}/iFreeRDP.xcodeproj" -sdk ${CMAKE_IOS_SDK_ROOT} -configuration ${IOS_BUILD_TYPE} CONFIGURATION_BUILD_DIR="${IOS_APP_OUTPUT_DIR}"
|
file(GLOB IOS_CLIENT_MISC_SRCS ${IOS_CLIENT_MISC_DIR}/*.m)
|
||||||
WORKING_DIRECTORY "${IOS_SOURCE_DIR}"
|
file(GLOB IOS_CLIENT_MISC_HDRS ${IOS_CLIENT_MISC_DIR}/*.h)
|
||||||
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/iFreeRDP.xcodeproj/project.pbxproj
|
|
||||||
DEPENDS freerdp winpr
|
file(GLOB IOS_CLIENT_MODELS_SRCS ${IOS_CLIENT_MODELS_DIR}/*.m)
|
||||||
|
file(GLOB IOS_CLIENT_MODELS_HDRS ${IOS_CLIENT_MODELS_DIR}/*.h)
|
||||||
|
|
||||||
|
file(GLOB IOS_CLIENT_VIEWS_SRCS ${IOS_CLIENT_VIEWS_DIR}/*.m)
|
||||||
|
file(GLOB IOS_CLIENT_VIEWS_HDRS ${IOS_CLIENT_VIEWS_DIR}/*.h)
|
||||||
|
|
||||||
|
# add resources
|
||||||
|
file(GLOB IOS_CLIENT_RESOURCES_XIBS ${IOS_CLIENT_RESOURCES_DIR}/*.xib)
|
||||||
|
file(GLOB IOS_CLIENT_RESOURCES_PNGS ${IOS_CLIENT_RESOURCES_DIR}/*.png)
|
||||||
|
|
||||||
|
# Specify source grouping
|
||||||
|
source_group(Additions FILES ${IOS_CLIENT_ADDITIONS_SRCS} ${IOS_CLIENT_ADDITIONS_HDRS})
|
||||||
|
source_group(Controllers FILES ${IOS_CLIENT_CONTROLLERS_SRCS} ${IOS_CLIENT_CONTROLLERS_HDRS})
|
||||||
|
source_group(FreeRDP FILES ${IOS_CLIENT_FREERDP_SRCS} ${IOS_CLIENT_FREERDP_HDRS})
|
||||||
|
source_group(Misc FILES ${IOS_CLIENT_MISC_SRCS} ${IOS_CLIENT_MISC_HDRS})
|
||||||
|
source_group(Models FILES ${IOS_CLIENT_MODELS_SRCS} ${IOS_CLIENT_MODELS_HDRS})
|
||||||
|
source_group(Views FILES ${IOS_CLIENT_RESOURCES_XIBS} ${IOS_CLIENT_VIEWS_SRCS} ${IOS_CLIENT_VIEWS_HDRS})
|
||||||
|
source_group(Resources FILES ${IOS_CLIENT_RESOURCES_PNGS} ${IOS_CLIENT_RESOURCES_DIR}/about_page ${IOS_CLIENT_RESOURCES_DIR}/help_page ${IOS_CLIENT_RESOURCES_DIR}/en.lproj)
|
||||||
|
|
||||||
|
# import libraries
|
||||||
|
find_library(FOUNDATION_FRAMEWORK Foundation)
|
||||||
|
find_library(COREGRAPHICS_FRAMEWORK CoreGraphics)
|
||||||
|
find_library(SECURITY_FRAMEWORK Security)
|
||||||
|
find_library(UIKIT_FRAMEWORK UIKit)
|
||||||
|
find_library(SYSTEMCONFIGURATION_FRAMEWORK SystemConfiguration)
|
||||||
|
|
||||||
|
mark_as_advanced(FOUNDATION_FRAMEWORK COREGRAPHICS_FRAMEWORK SECURITY_FRAMEWORK UIKIT_FRAMEWORK SYSTEMCONFIGURATION_FRAMEWORK)
|
||||||
|
set(EXTRA_LIBS ${FOUNDATION_FRAMEWORK} ${COREGRAPHICS_FRAMEWORK} ${SECURITY_FRAMEWORK} ${UIKIT_FRAMEWORK} ${SYSTEMCONFIGURATION_FRAMEWORK})
|
||||||
|
|
||||||
|
set(${MODULE_NAME}_RESOURCES ${IOS_CLIENT_RESOURCES_XIBS})
|
||||||
|
set(${MODULE_NAME}_RESOURCES ${${MODULE_NAME}_RESOURCES} ${IOS_CLIENT_RESOURCES_PNGS})
|
||||||
|
set(${MODULE_NAME}_RESOURCES ${${MODULE_NAME}_RESOURCES} ${IOS_CLIENT_RESOURCES_DIR}/about_page ${IOS_CLIENT_RESOURCES_DIR}/help_page ${IOS_CLIENT_RESOURCES_DIR}/en.lproj)
|
||||||
|
set(${MODULE_NAME}_RESOURCES ${${MODULE_NAME}_RESOURCES} ${IOS_CLIENT_DIR}/Defaults.plist)
|
||||||
|
|
||||||
|
add_executable(${MODULE_NAME}
|
||||||
|
${APP_TYPE}
|
||||||
|
${${MODULE_PREFIX}_SRCS}
|
||||||
|
${IOS_CLIENT_ADDITIONS_SRCS} ${IOS_CLIENT_ADDITIONS_HDRS}
|
||||||
|
${IOS_CLIENT_CONTROLLERS_SRCS} ${IOS_CLIENT_CONTROLLERS_HDRS}
|
||||||
|
${IOS_CLIENT_FREERDP_SRCS} ${IOS_CLIENT_FREERDP_HDRS}
|
||||||
|
${IOS_CLIENT_MISC_SRCS} ${IOS_CLIENT_MISC_HDRS}
|
||||||
|
${IOS_CLIENT_MODELS_SRCS} ${IOS_CLIENT_MODELS_HDRS}
|
||||||
|
${IOS_CLIENT_VIEWS_SRCS} ${IOS_CLIENT_VIEWS_HDRS}
|
||||||
|
${${MODULE_NAME}_RESOURCES}
|
||||||
)
|
)
|
||||||
add_custom_target(ios-package ALL SOURCES "${IOS_APP}")
|
|
||||||
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "bin;build")
|
set_target_properties(${MODULE_NAME} PROPERTIES RESOURCE "${${MODULE_NAME}_RESOURCES}")
|
||||||
endif()
|
|
||||||
|
set(EXECUTABLE_NAME "\${EXECUTABLE_NAME}")
|
||||||
|
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${IOS_CLIENT_DIR}/iFreeRDP.plist)
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "4.3")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++0x")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO)
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD "gnu99")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_COMBINE_HIDPI_IMAGES "NO")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_SKIP_INSTALL NO)
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_INSTALL_PATH "/Applications")
|
||||||
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS YES)
|
||||||
|
|
||||||
|
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS})
|
||||||
|
|
||||||
|
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client)
|
||||||
|
|
||||||
|
set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD}
|
||||||
|
MODULE freerdp
|
||||||
|
MODULES freerdp-core freerdp-gdi freerdp-locale freerdp-primitives freerdp-cache freerdp-utils)
|
||||||
|
|
||||||
|
set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD}
|
||||||
|
MODULE winpr
|
||||||
|
MODULES winpr-input winpr-crt winpr-utils)
|
||||||
|
|
||||||
|
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
|
||||||
|
|
||||||
|
set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/iOS")
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
|
||||||
@interface AboutController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate>
|
@interface AboutController : UIViewController <UIWebViewDelegate>
|
||||||
{
|
{
|
||||||
NSString* last_link_clicked;
|
NSString* last_link_clicked;
|
||||||
UIWebView* webView;
|
UIWebView* webView;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#import "AboutController.h"
|
#import "AboutController.h"
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
|
#import "BlockAlertView.h"
|
||||||
|
|
||||||
@implementation AboutController
|
@implementation AboutController
|
||||||
|
|
||||||
@@ -76,24 +77,19 @@
|
|||||||
{
|
{
|
||||||
[last_link_clicked release];
|
[last_link_clicked release];
|
||||||
last_link_clicked = [[[request URL] absoluteString] retain];
|
last_link_clicked = [[[request URL] absoluteString] retain];
|
||||||
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"External Link", @"External Link Alert Title")
|
BlockAlertView *alert = [BlockAlertView alertWithTitle:NSLocalizedString(@"External Link", @"External Link Alert Title")
|
||||||
message:[NSString stringWithFormat:NSLocalizedString(@"Open [%@] in Browser?", @"Open link in browser (with link as parameter)"), last_link_clicked]
|
message:[NSString stringWithFormat:NSLocalizedString(@"Open [%@] in Browser?", @"Open link in browser (with link as parameter)"), last_link_clicked]];
|
||||||
delegate:self
|
|
||||||
cancelButtonTitle:NSLocalizedString(@"OK", @"OK Button")
|
[alert setCancelButtonWithTitle:NSLocalizedString(@"No", @"No Button") block:nil];
|
||||||
otherButtonTitles:NSLocalizedString(@"No", @"No Button"), nil];
|
[alert addButtonWithTitle:NSLocalizedString(@"OK", @"OK Button") block:^{
|
||||||
[alert show];
|
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:last_link_clicked]];
|
||||||
[alert release];
|
}];
|
||||||
|
|
||||||
|
[alert show];
|
||||||
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark UIAlertView delegate
|
|
||||||
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
|
|
||||||
{
|
|
||||||
if (buttonIndex == 0)
|
|
||||||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:last_link_clicked]];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@interface BookmarkEditorController : EditorBaseController <UIAlertViewDelegate>
|
@interface BookmarkEditorController : EditorBaseController
|
||||||
{
|
{
|
||||||
@private
|
@private
|
||||||
ComputerBookmark* _bookmark;
|
ComputerBookmark* _bookmark;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#import "PerformanceEditorController.h"
|
#import "PerformanceEditorController.h"
|
||||||
#import "CredentialsEditorController.h"
|
#import "CredentialsEditorController.h"
|
||||||
#import "AdvancedBookmarkEditorController.h"
|
#import "AdvancedBookmarkEditorController.h"
|
||||||
|
#import "BlockAlertView.h"
|
||||||
|
|
||||||
@implementation BookmarkEditorController
|
@implementation BookmarkEditorController
|
||||||
|
|
||||||
@@ -32,8 +33,11 @@
|
|||||||
if ((self = [super initWithStyle:UITableViewStyleGrouped]))
|
if ((self = [super initWithStyle:UITableViewStyleGrouped]))
|
||||||
{
|
{
|
||||||
// set additional settings state according to bookmark data
|
// set additional settings state according to bookmark data
|
||||||
_bookmark = [bookmark retain];
|
if ([[bookmark uuid] length] == 0)
|
||||||
_params = [bookmark params];
|
_bookmark = [bookmark copy];
|
||||||
|
else
|
||||||
|
_bookmark = [bookmark copyWithUUID];
|
||||||
|
_params = [_bookmark params];
|
||||||
|
|
||||||
// if this is a TSX Connect bookmark - disable server settings
|
// if this is a TSX Connect bookmark - disable server settings
|
||||||
if([_bookmark isKindOfClass:NSClassFromString(@"TSXConnectComputerBookmark")])
|
if([_bookmark isKindOfClass:NSClassFromString(@"TSXConnectComputerBookmark")])
|
||||||
@@ -335,18 +339,6 @@
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UIAlertViewDelegate methods
|
|
||||||
|
|
||||||
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
|
||||||
{
|
|
||||||
// clicked yes?
|
|
||||||
if (buttonIndex == 0)
|
|
||||||
{
|
|
||||||
// cancel bookmark editing and return to previous view controller
|
|
||||||
[[self navigationController] popViewControllerAnimated:YES];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Action Handlers
|
#pragma mark Action Handlers
|
||||||
|
|
||||||
@@ -360,8 +352,13 @@
|
|||||||
{
|
{
|
||||||
if ([[_bookmark label] length] == 0 || [[_params StringForKey:@"hostname"] length] == 0 || [_params intForKey:@"port"] == 0)
|
if ([[_bookmark label] length] == 0 || [[_params StringForKey:@"hostname"] length] == 0 || [_params intForKey:@"port"] == 0)
|
||||||
{
|
{
|
||||||
UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Cancel without saving?", @"Incomplete bookmark error title") message:NSLocalizedString(@"Press 'Cancel' to abort!\nPress 'Continue' to specify the required fields!", @"Incomplete bookmark error message") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel Button") otherButtonTitles:NSLocalizedString(@"Continue", @"Continue Button"), nil] autorelease];
|
BlockAlertView* alertView = [BlockAlertView alertWithTitle:NSLocalizedString(@"Cancel without saving?", @"Incomplete bookmark error title") message:NSLocalizedString(@"Press 'Cancel' to abort!\nPress 'Continue' to specify the required fields!", @"Incomplete bookmark error message")];
|
||||||
[alertView show];
|
[alertView setCancelButtonWithTitle:NSLocalizedString(@"Cancel", @"Cancel Button") block:^{
|
||||||
|
// cancel bookmark editing and return to previous view controller
|
||||||
|
[[self navigationController] popViewControllerAnimated:YES];
|
||||||
|
}];
|
||||||
|
[alertView addButtonWithTitle:NSLocalizedString(@"Continue", @"Continue Button") block:nil];
|
||||||
|
[alertView show];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#import "BookmarkEditorController.h"
|
#import "BookmarkEditorController.h"
|
||||||
#import "Reachability.h"
|
#import "Reachability.h"
|
||||||
|
|
||||||
@interface BookmarkListController : UIViewController <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate, BookmarkEditorDelegate>
|
@interface BookmarkListController : UIViewController <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource, BookmarkEditorDelegate>
|
||||||
{
|
{
|
||||||
// custom bookmark and session table cells
|
// custom bookmark and session table cells
|
||||||
BookmarkTableCell* _bmTableCell;
|
BookmarkTableCell* _bmTableCell;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#import "Toast+UIView.h"
|
#import "Toast+UIView.h"
|
||||||
#import "Reachability.h"
|
#import "Reachability.h"
|
||||||
#import "GlobalDefaults.h"
|
#import "GlobalDefaults.h"
|
||||||
|
#import "BlockAlertView.h"
|
||||||
|
|
||||||
#define SECTION_SESSIONS 0
|
#define SECTION_SESSIONS 0
|
||||||
#define SECTION_BOOKMARKS 1
|
#define SECTION_BOOKMARKS 1
|
||||||
@@ -633,8 +634,17 @@
|
|||||||
// ask the user if he wants to save the bookmark
|
// ask the user if he wants to save the bookmark
|
||||||
NSString* title = NSLocalizedString(@"Save Connection Settings?", @"Save connection settings title");
|
NSString* title = NSLocalizedString(@"Save Connection Settings?", @"Save connection settings title");
|
||||||
NSString* message = NSLocalizedString(@"Your Connection Settings have not been saved. Do you want to save them?", @"Save connection settings message");
|
NSString* message = NSLocalizedString(@"Your Connection Settings have not been saved. Do you want to save them?", @"Save connection settings message");
|
||||||
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self
|
BlockAlertView* alert = [BlockAlertView alertWithTitle:title message:message];
|
||||||
cancelButtonTitle:NSLocalizedString(@"Yes", @"Yes Button") otherButtonTitles:NSLocalizedString(@"No", @"No Button"), nil];
|
[alert setCancelButtonWithTitle:NSLocalizedString(@"No", @"No Button") block:nil];
|
||||||
|
[alert addButtonWithTitle:NSLocalizedString(@"Yes", @"Yes Button") block:^{
|
||||||
|
if (_temporary_bookmark)
|
||||||
|
{
|
||||||
|
[_manual_bookmarks addObject:_temporary_bookmark];
|
||||||
|
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:SECTION_BOOKMARKS] withRowAnimation:UITableViewRowAnimationNone];
|
||||||
|
[_temporary_bookmark autorelease];
|
||||||
|
_temporary_bookmark = nil;
|
||||||
|
}
|
||||||
|
}];
|
||||||
[alert show];
|
[alert show];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -649,21 +659,6 @@
|
|||||||
[[self view] makeToast:NSLocalizedString(@"Failed to connect to session!", @"Failed to connect error message") duration:ToastDurationNormal position:@"center"];
|
[[self view] makeToast:NSLocalizedString(@"Failed to connect to session!", @"Failed to connect error message") duration:ToastDurationNormal position:@"center"];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UIAlertView delegates
|
|
||||||
|
|
||||||
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
|
||||||
{
|
|
||||||
// yes clicked?
|
|
||||||
if (buttonIndex == 0 && _temporary_bookmark)
|
|
||||||
{
|
|
||||||
[_manual_bookmarks addObject:_temporary_bookmark];
|
|
||||||
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:SECTION_BOOKMARKS] withRowAnimation:UITableViewRowAnimationNone];
|
|
||||||
}
|
|
||||||
|
|
||||||
[_temporary_bookmark autorelease];
|
|
||||||
_temporary_bookmark = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - Reachability notification
|
#pragma mark - Reachability notification
|
||||||
- (void)reachabilityChanged:(NSNotification*)notification
|
- (void)reachabilityChanged:(NSNotification*)notification
|
||||||
{
|
{
|
||||||
@@ -680,10 +675,20 @@
|
|||||||
|
|
||||||
- (void)commitBookmark:(ComputerBookmark *)bookmark
|
- (void)commitBookmark:(ComputerBookmark *)bookmark
|
||||||
{
|
{
|
||||||
// if we got a manual bookmark that is not in the list yet - add it
|
// if we got a manual bookmark that is not in the list yet - add it otherwise replace it
|
||||||
if (![_manual_bookmarks containsObject:bookmark])
|
BOOL found = NO;
|
||||||
|
for (int idx = 0; idx < [_manual_bookmarks count]; ++idx)
|
||||||
|
{
|
||||||
|
if ([[bookmark uuid] isEqualToString:[[_manual_bookmarks objectAtIndex:idx] uuid]])
|
||||||
|
{
|
||||||
|
[_manual_bookmarks replaceObjectAtIndex:idx withObject:bookmark];
|
||||||
|
found = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
[_manual_bookmarks addObject:bookmark];
|
[_manual_bookmarks addObject:bookmark];
|
||||||
|
|
||||||
// remove any quick connect history entry with the same hostname
|
// remove any quick connect history entry with the same hostname
|
||||||
NSString* hostname = [[bookmark params] StringForKey:@"hostname"];
|
NSString* hostname = [[bookmark params] StringForKey:@"hostname"];
|
||||||
if ([_connection_history containsObject:hostname])
|
if ([_connection_history containsObject:hostname])
|
||||||
|
|||||||
@@ -55,27 +55,4 @@
|
|||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
|
||||||
#pragma mark UIWebView callbacks
|
|
||||||
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
|
|
||||||
{
|
|
||||||
if([[request URL] isFileURL])
|
|
||||||
return YES;
|
|
||||||
|
|
||||||
if(navigationType == UIWebViewNavigationTypeLinkClicked)
|
|
||||||
{
|
|
||||||
NSString* lastClickedLink = [[request URL] absoluteString];
|
|
||||||
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"External Link"
|
|
||||||
message:[NSString stringWithFormat:@"Open [%@] in Browser?", lastClickedLink]
|
|
||||||
delegate:self
|
|
||||||
cancelButtonTitle:@"OK"
|
|
||||||
otherButtonTitles:@"No", nil];
|
|
||||||
[alert show];
|
|
||||||
[alert release];
|
|
||||||
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
@interface MainTabBarController : UITabBarController {
|
@interface MainTabBarController : UITabBarController {
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#import "TouchPointerView.h"
|
#import "TouchPointerView.h"
|
||||||
#import "AdvancedKeyboardView.h"
|
#import "AdvancedKeyboardView.h"
|
||||||
|
|
||||||
@interface RDPSessionViewController : UIViewController <RDPSessionDelegate, TouchPointerDelegate, AdvancedKeyboardDelegate, RDPKeyboardDelegate, UIScrollViewDelegate, UITextFieldDelegate, UIAlertViewDelegate>
|
@interface RDPSessionViewController : UIViewController <RDPSessionDelegate, TouchPointerDelegate, AdvancedKeyboardDelegate, RDPKeyboardDelegate, UIScrollViewDelegate, UITextFieldDelegate>
|
||||||
{
|
{
|
||||||
// scrollview that hosts the rdp session view
|
// scrollview that hosts the rdp session view
|
||||||
IBOutlet UIScrollView* _session_scrollview;
|
IBOutlet UIScrollView* _session_scrollview;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#import "ConnectionParams.h"
|
#import "ConnectionParams.h"
|
||||||
#import "CredentialsInputController.h"
|
#import "CredentialsInputController.h"
|
||||||
#import "VerifyCertificateController.h"
|
#import "VerifyCertificateController.h"
|
||||||
|
#import "BlockAlertView.h"
|
||||||
|
|
||||||
#define TOOLBAR_HEIGHT 30
|
#define TOOLBAR_HEIGHT 30
|
||||||
|
|
||||||
@@ -415,8 +416,12 @@
|
|||||||
|
|
||||||
- (void)showGoProScreen:(RDPSession*)session
|
- (void)showGoProScreen:(RDPSession*)session
|
||||||
{
|
{
|
||||||
UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Pro Version", @"Pro version dialog title")
|
BlockAlertView* alertView = [BlockAlertView alertWithTitle:NSLocalizedString(@"Unlicensed Client", @"Pro version dialog title") message:NSLocalizedString(@"You are connected to Thinstuff Remote Desktop Host (RDH). Do you want to purchase an access license for this client which allows you to connect to any computer running Thinstuff RDH?", @"Pro version dialog message")];
|
||||||
message:NSLocalizedString(@"Do you want to buy Thinstuff RDC Pro and enable the full RDP Experience", @"Pro version dialog message") delegate:self cancelButtonTitle:NSLocalizedString(@"No", @"No Button title") otherButtonTitles:NSLocalizedString(@"Yes", @"Yes button title"), nil] autorelease];
|
|
||||||
|
[alertView setCancelButtonWithTitle:NSLocalizedString(@"No", @"No Button title") block:nil];
|
||||||
|
[alertView addButtonWithTitle:NSLocalizedString(@"Yes", @"Yes button title") block:^ {
|
||||||
|
}];
|
||||||
|
|
||||||
[alertView show];
|
[alertView show];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,16 +561,20 @@
|
|||||||
|
|
||||||
- (void)onTransactionSuccess:(NSNotification*)notification
|
- (void)onTransactionSuccess:(NSNotification*)notification
|
||||||
{
|
{
|
||||||
UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Transaction Succeeded", @"Pro version bought dialog title")
|
BlockAlertView* alertView = [BlockAlertView alertWithTitle:NSLocalizedString(@"Transaction Succeeded", @"Pro version bought dialog title")
|
||||||
message:NSLocalizedString(@"Thanks for buying Thinstuff RDC Pro. In order for the purchase to take effect please reconnect your current session.", @"Pro version bought dialog message") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"OK Button title") otherButtonTitles:nil] autorelease];
|
message:NSLocalizedString(@"Thanks for buying Thinstuff RDC Pro. In order for the purchase to take effect please reconnect your current session.", @"Pro version bought dialog message")];
|
||||||
|
[alertView setCancelButtonWithTitle:NSLocalizedString(@"OK", @"OK Button title") block:nil];
|
||||||
|
|
||||||
[alertView show];
|
[alertView show];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onTransactionFailed:(NSNotification*)notification
|
- (void)onTransactionFailed:(NSNotification*)notification
|
||||||
{
|
{
|
||||||
UIAlertView* alertView = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Transaction Failed", @"Pro version buy failed dialog title")
|
BlockAlertView* alertView = [BlockAlertView alertWithTitle:NSLocalizedString(@"Transaction Failed", @"Pro version buy failed dialog title")
|
||||||
message:NSLocalizedString(@"The transaction did not complete successfully!", @"Pro version buy failed dialog message") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"OK Button title") otherButtonTitles:nil] autorelease];
|
message:NSLocalizedString(@"The transaction did not complete successfully!", @"Pro version buy failed dialog message")];
|
||||||
[alertView show];
|
[alertView setCancelButtonWithTitle:NSLocalizedString(@"OK", @"OK Button title") block:nil];
|
||||||
|
|
||||||
|
[alertView show];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#import <CoreGraphics/CoreGraphics.h>
|
||||||
|
|
||||||
#import <freerdp/freerdp.h>
|
#import <freerdp/freerdp.h>
|
||||||
#import <freerdp/channels/channels.h>
|
#import <freerdp/channels/channels.h>
|
||||||
#import "TSXTypes.h"
|
#import "TSXTypes.h"
|
||||||
|
|||||||
@@ -9,7 +9,9 @@
|
|||||||
|
|
||||||
#import <freerdp/utils/event.h>
|
#import <freerdp/utils/event.h>
|
||||||
#import <freerdp/gdi/gdi.h>
|
#import <freerdp/gdi/gdi.h>
|
||||||
#import <freerdp/utils/file.h>
|
#import <freerdp/channels/channels.h>
|
||||||
|
#import <freerdp/client/channels.h>
|
||||||
|
#import <freerdp/client/cmdline.h>
|
||||||
|
|
||||||
#import "ios_freerdp.h"
|
#import "ios_freerdp.h"
|
||||||
#import "ios_freerdp_ui.h"
|
#import "ios_freerdp_ui.h"
|
||||||
@@ -64,7 +66,9 @@ ios_pre_connect(freerdp * instance)
|
|||||||
|
|
||||||
settings->FrameAcknowledge = 10;
|
settings->FrameAcknowledge = 10;
|
||||||
|
|
||||||
// freerdp_channels_pre_connect(instance->context->channels, instance);
|
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||||
|
|
||||||
|
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -82,12 +86,24 @@ static BOOL ios_post_connect(freerdp* instance)
|
|||||||
instance->update->DesktopResize = ios_ui_resize_window;
|
instance->update->DesktopResize = ios_ui_resize_window;
|
||||||
|
|
||||||
// Channel allocation
|
// Channel allocation
|
||||||
// freerdp_channels_post_connect(instance->context->channels, instance);
|
freerdp_channels_post_connect(instance->context->channels, instance);
|
||||||
|
|
||||||
[mfi->session performSelectorOnMainThread:@selector(sessionDidConnect) withObject:nil waitUntilDone:YES];
|
[mfi->session performSelectorOnMainThread:@selector(sessionDidConnect) withObject:nil waitUntilDone:YES];
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ios_receive_channel_data(freerdp* instance, int channelId, UINT8* data, int size, int flags, int total_size)
|
||||||
|
{
|
||||||
|
return freerdp_channels_data(instance, channelId, data, size, flags, total_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ios_process_channel_event(rdpChannels* channels, freerdp* instance)
|
||||||
|
{
|
||||||
|
wMessage* event = freerdp_channels_pop_event(channels);
|
||||||
|
if (event)
|
||||||
|
freerdp_event_free(event);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Running the connection
|
#pragma mark Running the connection
|
||||||
|
|
||||||
@@ -96,7 +112,7 @@ ios_run_freerdp(freerdp * instance)
|
|||||||
{
|
{
|
||||||
mfContext* context = (mfContext*)instance->context;
|
mfContext* context = (mfContext*)instance->context;
|
||||||
mfInfo* mfi = context->mfi;
|
mfInfo* mfi = context->mfi;
|
||||||
// rdpChannels* channels = instance->context->channels;
|
rdpChannels* channels = instance->context->channels;
|
||||||
|
|
||||||
mfi->connection_state = TSXConnectionConnecting;
|
mfi->connection_state = TSXConnectionConnecting;
|
||||||
|
|
||||||
@@ -138,12 +154,12 @@ ios_run_freerdp(freerdp * instance)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (freerdp_channels_get_fds(channels, instance, rfds, &rcount, wfds, &wcount) != TRUE)
|
if (freerdp_channels_get_fds(channels, instance, rfds, &rcount, wfds, &wcount) != TRUE)
|
||||||
{
|
{
|
||||||
NSLog(@"%s: freerdp_chanman_get_fds failed", __func__);
|
NSLog(@"%s: freerdp_chanman_get_fds failed", __func__);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
if (ios_events_get_fds(mfi, rfds, &rcount, wfds, &wcount) != TRUE)
|
if (ios_events_get_fds(mfi, rfds, &rcount, wfds, &wcount) != TRUE)
|
||||||
{
|
{
|
||||||
NSLog(@"%s: ios_events_get_fds", __func__);
|
NSLog(@"%s: ios_events_get_fds", __func__);
|
||||||
@@ -196,20 +212,20 @@ ios_run_freerdp(freerdp * instance)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check channel fds
|
// Check channel fds
|
||||||
/* if (freerdp_channels_check_fds(channels, instance) != TRUE)
|
if (freerdp_channels_check_fds(channels, instance) != TRUE)
|
||||||
{
|
{
|
||||||
NSLog(@"%s: freerdp_chanman_check_fds failed", __func__);
|
NSLog(@"%s: freerdp_chanman_check_fds failed", __func__);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
ios_process_channel_event(channels, instance);
|
||||||
|
|
||||||
[pool release]; pool = nil;
|
[pool release]; pool = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
mfi->connection_state = TSXConnectionDisconnected;
|
mfi->connection_state = TSXConnectionDisconnected;
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
// freerdp_channels_close(channels, instance);
|
freerdp_channels_close(channels, instance);
|
||||||
// freerdp_channels_free(channels);
|
|
||||||
freerdp_disconnect(instance);
|
freerdp_disconnect(instance);
|
||||||
gdi_free(instance);
|
gdi_free(instance);
|
||||||
cache_free(instance->context->cache);
|
cache_free(instance->context->cache);
|
||||||
@@ -225,7 +241,7 @@ void ios_context_new(freerdp* instance, rdpContext* context)
|
|||||||
{
|
{
|
||||||
mfInfo* mfi = (mfInfo*)calloc(1, sizeof(mfInfo));
|
mfInfo* mfi = (mfInfo*)calloc(1, sizeof(mfInfo));
|
||||||
((mfContext*) context)->mfi = mfi;
|
((mfContext*) context)->mfi = mfi;
|
||||||
// context->channels = freerdp_channels_new();
|
context->channels = freerdp_channels_new();
|
||||||
ios_events_create_pipe(mfi);
|
ios_events_create_pipe(mfi);
|
||||||
|
|
||||||
mfi->_context = context;
|
mfi->_context = context;
|
||||||
@@ -237,6 +253,7 @@ void ios_context_new(freerdp* instance, rdpContext* context)
|
|||||||
void ios_context_free(freerdp* instance, rdpContext* context)
|
void ios_context_free(freerdp* instance, rdpContext* context)
|
||||||
{
|
{
|
||||||
mfInfo* mfi = ((mfContext*) context)->mfi;
|
mfInfo* mfi = ((mfContext*) context)->mfi;
|
||||||
|
freerdp_channels_free(context->channels);
|
||||||
ios_events_free_pipe(mfi);
|
ios_events_free_pipe(mfi);
|
||||||
free(mfi);
|
free(mfi);
|
||||||
}
|
}
|
||||||
@@ -253,19 +270,19 @@ freerdp* ios_freerdp_new()
|
|||||||
inst->Authenticate = ios_ui_authenticate;
|
inst->Authenticate = ios_ui_authenticate;
|
||||||
inst->VerifyCertificate = ios_ui_check_certificate;
|
inst->VerifyCertificate = ios_ui_check_certificate;
|
||||||
inst->VerifyChangedCertificate = ios_ui_check_changed_certificate;
|
inst->VerifyChangedCertificate = ios_ui_check_changed_certificate;
|
||||||
|
inst->ReceiveChannelData = ios_receive_channel_data;
|
||||||
|
|
||||||
inst->context_size = sizeof(mfContext);
|
inst->context_size = sizeof(mfContext);
|
||||||
inst->ContextNew = ios_context_new;
|
inst->ContextNew = ios_context_new;
|
||||||
inst->ContextFree = ios_context_free;
|
inst->ContextFree = ios_context_free;
|
||||||
freerdp_context_new(inst);
|
freerdp_context_new(inst);
|
||||||
|
|
||||||
// determine new home path
|
// determine new home path
|
||||||
NSString* home_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
|
NSString* home_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
|
||||||
free(inst->settings->HomePath);
|
free(inst->settings->HomePath);
|
||||||
free(inst->settings->ConfigPath);
|
free(inst->settings->ConfigPath);
|
||||||
inst->settings->HomePath = strdup([home_path UTF8String]);
|
inst->settings->HomePath = strdup([home_path UTF8String]);
|
||||||
inst->settings->ConfigPath = NULL;
|
inst->settings->ConfigPath = strdup([[home_path stringByAppendingPathComponent:@".freerdp"] UTF8String]);
|
||||||
freerdp_detect_paths(inst->settings);
|
|
||||||
|
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
@@ -279,11 +296,12 @@ void ios_freerdp_free(freerdp* instance)
|
|||||||
void ios_init_freerdp()
|
void ios_init_freerdp()
|
||||||
{
|
{
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
// freerdp_channels_global_init();
|
freerdp_channels_global_init();
|
||||||
|
freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ios_uninit_freerdp()
|
void ios_uninit_freerdp()
|
||||||
{
|
{
|
||||||
// freerdp_channels_global_uninit();
|
freerdp_channels_global_uninit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#ifndef IOS_RDP_EVENT_H
|
#ifndef IOS_RDP_EVENT_H
|
||||||
#define IOS_RDP_EVENT_H
|
#define IOS_RDP_EVENT_H
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
#import "ios_freerdp.h"
|
#import "ios_freerdp.h"
|
||||||
|
|
||||||
// For UI: use to send events
|
// For UI: use to send events
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <CoreGraphics/CoreGraphics.h>
|
||||||
#import "TSXTypes.h"
|
#import "TSXTypes.h"
|
||||||
|
|
||||||
// helper macro to encode a table path into a tag value (used to identify controls in their delegate handlers)
|
// helper macro to encode a table path into a tag value (used to identify controls in their delegate handlers)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
#import "ConnectionParams.h"
|
#import "ConnectionParams.h"
|
||||||
|
|
||||||
@interface ComputerBookmark : NSObject <NSCoding> {
|
@interface ComputerBookmark : NSObject <NSCoding> {
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
|
|
||||||
// Creates a copy of this object, with a new UUID
|
// Creates a copy of this object, with a new UUID
|
||||||
- (id)copy;
|
- (id)copy;
|
||||||
|
- (id)copyWithUUID;
|
||||||
|
|
||||||
// Whether user can delete, move, or rename this entry
|
// Whether user can delete, move, or rename this entry
|
||||||
- (BOOL)isDeletable;
|
- (BOOL)isDeletable;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
// Designated initializer.
|
// Designated initializer.
|
||||||
- (id)initWithConnectionParameters:(ConnectionParams*)params
|
- (id)initWithConnectionParameters:(ConnectionParams*)params
|
||||||
{
|
{
|
||||||
if (!(self = [super init]))
|
if (!(self = [self init]))
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
_connection_params = [params copy];
|
_connection_params = [params copy];
|
||||||
@@ -87,6 +87,13 @@
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id)copyWithUUID
|
||||||
|
{
|
||||||
|
ComputerBookmark* copy = [self copy];
|
||||||
|
copy->_uuid = [[self uuid] copy];
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)encodeWithCoder:(NSCoder *)coder
|
- (void)encodeWithCoder:(NSCoder *)coder
|
||||||
{
|
{
|
||||||
if (![coder allowsKeyedCoding])
|
if (![coder allowsKeyedCoding])
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#include <freerdp/freerdp.h>
|
#include <freerdp/freerdp.h>
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ NSString* TSXSessionDidFailToConnectNotification = @"TSXSessionDidFailToConnect"
|
|||||||
|
|
||||||
// enable NSCodec
|
// enable NSCodec
|
||||||
settings->NSCodec = TRUE;
|
settings->NSCodec = TRUE;
|
||||||
|
settings->BitmapCacheV3Enabled = TRUE;
|
||||||
|
|
||||||
// Performance flags
|
// Performance flags
|
||||||
settings->DisableWallpaper = ![_params boolForKey:@"perf_show_desktop" with3GEnabled:connected_via_3g];
|
settings->DisableWallpaper = ![_params boolForKey:@"perf_show_desktop" with3GEnabled:connected_via_3g];
|
||||||
|
|||||||
BIN
client/iOS/Resources/alert-black-button.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
client/iOS/Resources/alert-black-button@2x.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
client/iOS/Resources/alert-gray-button.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
client/iOS/Resources/alert-gray-button@2x.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
client/iOS/Resources/alert-red-button.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
client/iOS/Resources/alert-red-button@2x.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
client/iOS/Resources/alert-window-landscape.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
client/iOS/Resources/alert-window-landscape@2x.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
client/iOS/Resources/alert-window.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
client/iOS/Resources/alert-window@2x.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
@@ -148,7 +148,7 @@ a:hover, a:active, a:focus { /* this group of selectors will give a keyboard nav
|
|||||||
<div id="content">
|
<div id="content">
|
||||||
<h1>Gestures</h1>
|
<h1>Gestures</h1>
|
||||||
<p>
|
<p>
|
||||||
aFreeRDP is designed for touch sensitive devices.
|
iFreeRDP is designed for touch sensitive devices.
|
||||||
These gestures let you do the most usual operations with your fingers.</p>
|
These gestures let you do the most usual operations with your fingers.</p>
|
||||||
<p> <img src="gestures.png"></p>
|
<p> <img src="gestures.png"></p>
|
||||||
|
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ a:hover, a:active, a:focus { /* this group of selectors will give a keyboard nav
|
|||||||
<div id="content">
|
<div id="content">
|
||||||
<h2> Gestures</h2>
|
<h2> Gestures</h2>
|
||||||
<p>
|
<p>
|
||||||
aFreeRDP is designed for touch sensitive devices.
|
iFreeRDP is designed for touch sensitive devices.
|
||||||
These gestures let you do the most usual operations with your fingers.</p>
|
These gestures let you do the most usual operations with your fingers.</p>
|
||||||
<p> <img src="gestures_phone.png"></p>
|
<p> <img src="gestures_phone.png"></p>
|
||||||
|
|
||||||
|
|||||||
41
client/iOS/Views/BlockAlertView.h
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
//
|
||||||
|
// BlockAlertView.h
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface BlockAlertView : NSObject {
|
||||||
|
@protected
|
||||||
|
UIView *_view;
|
||||||
|
NSMutableArray *_blocks;
|
||||||
|
CGFloat _height;
|
||||||
|
NSString *_title;
|
||||||
|
NSString *_message;
|
||||||
|
BOOL _shown;
|
||||||
|
BOOL _cancelBounce;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BlockAlertView *)alertWithTitle:(NSString *)title message:(NSString *)message;
|
||||||
|
|
||||||
|
+ (void)showInfoAlertWithTitle:(NSString *)title message:(NSString *)message;
|
||||||
|
+ (void)showErrorAlert:(NSError *)error;
|
||||||
|
|
||||||
|
- (id)initWithTitle:(NSString *)title message:(NSString *)message;
|
||||||
|
|
||||||
|
- (void)setDestructiveButtonWithTitle:(NSString *)title block:(void (^)())block;
|
||||||
|
- (void)setCancelButtonWithTitle:(NSString *)title block:(void (^)())block;
|
||||||
|
- (void)addButtonWithTitle:(NSString *)title block:(void (^)())block;
|
||||||
|
|
||||||
|
- (void)addComponents:(CGRect)frame;
|
||||||
|
|
||||||
|
- (void)show;
|
||||||
|
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated;
|
||||||
|
|
||||||
|
- (void)setupDisplay;
|
||||||
|
|
||||||
|
@property (nonatomic, retain) UIImage *backgroundImage;
|
||||||
|
@property (nonatomic, readonly) UIView *view;
|
||||||
|
@property (nonatomic, readwrite) BOOL vignetteBackground;
|
||||||
|
|
||||||
|
@end
|
||||||
447
client/iOS/Views/BlockAlertView.m
Executable file
@@ -0,0 +1,447 @@
|
|||||||
|
//
|
||||||
|
// BlockAlertView.m
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BlockAlertView.h"
|
||||||
|
#import "BlockBackground.h"
|
||||||
|
#import "BlockUI.h"
|
||||||
|
|
||||||
|
@implementation BlockAlertView
|
||||||
|
|
||||||
|
@synthesize view = _view;
|
||||||
|
@synthesize backgroundImage = _backgroundImage;
|
||||||
|
@synthesize vignetteBackground = _vignetteBackground;
|
||||||
|
|
||||||
|
static UIImage *background = nil;
|
||||||
|
static UIImage *backgroundlandscape = nil;
|
||||||
|
static UIFont *titleFont = nil;
|
||||||
|
static UIFont *messageFont = nil;
|
||||||
|
static UIFont *buttonFont = nil;
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - init
|
||||||
|
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
if (self == [BlockAlertView class])
|
||||||
|
{
|
||||||
|
background = [UIImage imageNamed:kAlertViewBackground];
|
||||||
|
background = [[background stretchableImageWithLeftCapWidth:0 topCapHeight:kAlertViewBackgroundCapHeight] retain];
|
||||||
|
|
||||||
|
backgroundlandscape = [UIImage imageNamed:kAlertViewBackgroundLandscape];
|
||||||
|
backgroundlandscape = [[backgroundlandscape stretchableImageWithLeftCapWidth:0 topCapHeight:kAlertViewBackgroundCapHeight] retain];
|
||||||
|
|
||||||
|
titleFont = [kAlertViewTitleFont retain];
|
||||||
|
messageFont = [kAlertViewMessageFont retain];
|
||||||
|
buttonFont = [kAlertViewButtonFont retain];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BlockAlertView *)alertWithTitle:(NSString *)title message:(NSString *)message
|
||||||
|
{
|
||||||
|
return [[[BlockAlertView alloc] initWithTitle:title message:message] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)showInfoAlertWithTitle:(NSString *)title message:(NSString *)message
|
||||||
|
{
|
||||||
|
BlockAlertView *alert = [[BlockAlertView alloc] initWithTitle:title message:message];
|
||||||
|
[alert setCancelButtonWithTitle:NSLocalizedString(@"Dismiss", nil) block:nil];
|
||||||
|
[alert show];
|
||||||
|
[alert release];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)showErrorAlert:(NSError *)error
|
||||||
|
{
|
||||||
|
BlockAlertView *alert = [[BlockAlertView alloc] initWithTitle:NSLocalizedString(@"Operation Failed", nil) message:[NSString stringWithFormat:NSLocalizedString(@"The operation did not complete successfully: %@", nil), error]];
|
||||||
|
[alert setCancelButtonWithTitle:@"Dismiss" block:nil];
|
||||||
|
[alert show];
|
||||||
|
[alert release];
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#pragma mark - NSObject
|
||||||
|
|
||||||
|
- (void)addComponents:(CGRect)frame {
|
||||||
|
if (_title)
|
||||||
|
{
|
||||||
|
CGSize size = [_title sizeWithFont:titleFont
|
||||||
|
constrainedToSize:CGSizeMake(frame.size.width-kAlertViewBorder*2, 1000)
|
||||||
|
lineBreakMode:NSLineBreakByWordWrapping];
|
||||||
|
|
||||||
|
UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(kAlertViewBorder, _height, frame.size.width-kAlertViewBorder*2, size.height)];
|
||||||
|
labelView.font = titleFont;
|
||||||
|
labelView.numberOfLines = 0;
|
||||||
|
labelView.lineBreakMode = NSLineBreakByWordWrapping;
|
||||||
|
labelView.textColor = kAlertViewTitleTextColor;
|
||||||
|
labelView.backgroundColor = [UIColor clearColor];
|
||||||
|
labelView.textAlignment = NSTextAlignmentCenter;
|
||||||
|
labelView.shadowColor = kAlertViewTitleShadowColor;
|
||||||
|
labelView.shadowOffset = kAlertViewTitleShadowOffset;
|
||||||
|
labelView.text = _title;
|
||||||
|
[_view addSubview:labelView];
|
||||||
|
[labelView release];
|
||||||
|
|
||||||
|
_height += size.height + kAlertViewBorder;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_message)
|
||||||
|
{
|
||||||
|
CGSize size = [_message sizeWithFont:messageFont
|
||||||
|
constrainedToSize:CGSizeMake(frame.size.width-kAlertViewBorder*2, 1000)
|
||||||
|
lineBreakMode:NSLineBreakByWordWrapping];
|
||||||
|
|
||||||
|
UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(kAlertViewBorder, _height, frame.size.width-kAlertViewBorder*2, size.height)];
|
||||||
|
labelView.font = messageFont;
|
||||||
|
labelView.numberOfLines = 0;
|
||||||
|
labelView.lineBreakMode = NSLineBreakByWordWrapping;
|
||||||
|
labelView.textColor = kAlertViewMessageTextColor;
|
||||||
|
labelView.backgroundColor = [UIColor clearColor];
|
||||||
|
labelView.textAlignment = NSTextAlignmentCenter;
|
||||||
|
labelView.shadowColor = kAlertViewMessageShadowColor;
|
||||||
|
labelView.shadowOffset = kAlertViewMessageShadowOffset;
|
||||||
|
labelView.text = _message;
|
||||||
|
[_view addSubview:labelView];
|
||||||
|
[labelView release];
|
||||||
|
|
||||||
|
_height += size.height + kAlertViewBorder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setupDisplay
|
||||||
|
{
|
||||||
|
[[_view subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||||
|
[obj removeFromSuperview];
|
||||||
|
}];
|
||||||
|
|
||||||
|
UIWindow *parentView = [BlockBackground sharedInstance];
|
||||||
|
CGRect frame = parentView.bounds;
|
||||||
|
frame.origin.x = floorf((frame.size.width - background.size.width) * 0.5);
|
||||||
|
frame.size.width = background.size.width;
|
||||||
|
|
||||||
|
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
|
||||||
|
if (UIInterfaceOrientationIsLandscape(orientation)) {
|
||||||
|
frame.size.width += 150;
|
||||||
|
frame.origin.x -= 75;
|
||||||
|
}
|
||||||
|
|
||||||
|
_view.frame = frame;
|
||||||
|
|
||||||
|
_height = kAlertViewBorder + 15;
|
||||||
|
|
||||||
|
if (NeedsLandscapePhoneTweaks) {
|
||||||
|
_height -= 15; // landscape phones need to trimmed a bit
|
||||||
|
}
|
||||||
|
|
||||||
|
[self addComponents:frame];
|
||||||
|
|
||||||
|
if (_shown)
|
||||||
|
[self show];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithTitle:(NSString *)title message:(NSString *)message
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
|
||||||
|
if (self)
|
||||||
|
{
|
||||||
|
_title = [title copy];
|
||||||
|
_message = [message copy];
|
||||||
|
|
||||||
|
_view = [[UIView alloc] init];
|
||||||
|
|
||||||
|
_view.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
|
||||||
|
|
||||||
|
_blocks = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
|
selector:@selector(setupDisplay)
|
||||||
|
name:UIApplicationDidChangeStatusBarOrientationNotification
|
||||||
|
object:nil];
|
||||||
|
|
||||||
|
if ([self class] == [BlockAlertView class])
|
||||||
|
[self setupDisplay];
|
||||||
|
|
||||||
|
_vignetteBackground = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[_title release];
|
||||||
|
[_message release];
|
||||||
|
[_backgroundImage release];
|
||||||
|
[_view release];
|
||||||
|
[_blocks release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#pragma mark - Public
|
||||||
|
|
||||||
|
- (void)addButtonWithTitle:(NSString *)title color:(NSString*)color block:(void (^)())block
|
||||||
|
{
|
||||||
|
[_blocks addObject:[NSArray arrayWithObjects:
|
||||||
|
block ? [[block copy] autorelease] : [NSNull null],
|
||||||
|
title,
|
||||||
|
color,
|
||||||
|
nil]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)addButtonWithTitle:(NSString *)title block:(void (^)())block
|
||||||
|
{
|
||||||
|
[self addButtonWithTitle:title color:@"gray" block:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setCancelButtonWithTitle:(NSString *)title block:(void (^)())block
|
||||||
|
{
|
||||||
|
[self addButtonWithTitle:title color:@"black" block:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setDestructiveButtonWithTitle:(NSString *)title block:(void (^)())block
|
||||||
|
{
|
||||||
|
[self addButtonWithTitle:title color:@"red" block:block];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)show
|
||||||
|
{
|
||||||
|
_shown = YES;
|
||||||
|
|
||||||
|
BOOL isSecondButton = NO;
|
||||||
|
NSUInteger index = 0;
|
||||||
|
for (NSUInteger i = 0; i < _blocks.count; i++)
|
||||||
|
{
|
||||||
|
NSArray *block = [_blocks objectAtIndex:i];
|
||||||
|
NSString *title = [block objectAtIndex:1];
|
||||||
|
NSString *color = [block objectAtIndex:2];
|
||||||
|
|
||||||
|
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"alert-%@-button.png", color]];
|
||||||
|
image = [image stretchableImageWithLeftCapWidth:(int)(image.size.width+1)>>1 topCapHeight:0];
|
||||||
|
|
||||||
|
CGFloat maxHalfWidth = floorf((_view.bounds.size.width-kAlertViewBorder*3)*0.5);
|
||||||
|
CGFloat width = _view.bounds.size.width-kAlertViewBorder*2;
|
||||||
|
CGFloat xOffset = kAlertViewBorder;
|
||||||
|
if (isSecondButton)
|
||||||
|
{
|
||||||
|
width = maxHalfWidth;
|
||||||
|
xOffset = width + kAlertViewBorder * 2;
|
||||||
|
isSecondButton = NO;
|
||||||
|
}
|
||||||
|
else if (i + 1 < _blocks.count)
|
||||||
|
{
|
||||||
|
// In this case there's another button.
|
||||||
|
// Let's check if they fit on the same line.
|
||||||
|
CGSize size = [title sizeWithFont:buttonFont
|
||||||
|
minFontSize:10
|
||||||
|
actualFontSize:nil
|
||||||
|
forWidth:_view.bounds.size.width-kAlertViewBorder*2
|
||||||
|
lineBreakMode:NSLineBreakByClipping];
|
||||||
|
|
||||||
|
if (size.width < maxHalfWidth - kAlertViewBorder)
|
||||||
|
{
|
||||||
|
// It might fit. Check the next Button
|
||||||
|
NSArray *block2 = [_blocks objectAtIndex:i+1];
|
||||||
|
NSString *title2 = [block2 objectAtIndex:1];
|
||||||
|
size = [title2 sizeWithFont:buttonFont
|
||||||
|
minFontSize:10
|
||||||
|
actualFontSize:nil
|
||||||
|
forWidth:_view.bounds.size.width-kAlertViewBorder*2
|
||||||
|
lineBreakMode:NSLineBreakByClipping];
|
||||||
|
|
||||||
|
if (size.width < maxHalfWidth - kAlertViewBorder)
|
||||||
|
{
|
||||||
|
// They'll fit!
|
||||||
|
isSecondButton = YES; // For the next iteration
|
||||||
|
width = maxHalfWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (_blocks.count == 1)
|
||||||
|
{
|
||||||
|
// In this case this is the ony button. We'll size according to the text
|
||||||
|
CGSize size = [title sizeWithFont:buttonFont
|
||||||
|
minFontSize:10
|
||||||
|
actualFontSize:nil
|
||||||
|
forWidth:_view.bounds.size.width-kAlertViewBorder*2
|
||||||
|
lineBreakMode:UILineBreakModeClip];
|
||||||
|
|
||||||
|
size.width = MAX(size.width, 80);
|
||||||
|
if (size.width + 2 * kAlertViewBorder < width)
|
||||||
|
{
|
||||||
|
width = size.width + 2 * kAlertViewBorder;
|
||||||
|
xOffset = floorf((_view.bounds.size.width - width) * 0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
button.frame = CGRectMake(xOffset, _height, width, kAlertButtonHeight);
|
||||||
|
button.titleLabel.font = buttonFont;
|
||||||
|
if (IOS_LESS_THAN_6) {
|
||||||
|
#pragma clan diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
button.titleLabel.minimumFontSize = 10;
|
||||||
|
#pragma clan diagnostic pop
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button.titleLabel.adjustsFontSizeToFitWidth = YES;
|
||||||
|
button.titleLabel.adjustsLetterSpacingToFitWidth = YES;
|
||||||
|
button.titleLabel.minimumScaleFactor = 0.1;
|
||||||
|
}
|
||||||
|
button.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
button.titleLabel.shadowOffset = kAlertViewButtonShadowOffset;
|
||||||
|
button.backgroundColor = [UIColor clearColor];
|
||||||
|
button.tag = i+1;
|
||||||
|
|
||||||
|
[button setBackgroundImage:image forState:UIControlStateNormal];
|
||||||
|
[button setTitleColor:kAlertViewButtonTextColor forState:UIControlStateNormal];
|
||||||
|
[button setTitleShadowColor:kAlertViewButtonShadowColor forState:UIControlStateNormal];
|
||||||
|
[button setTitle:title forState:UIControlStateNormal];
|
||||||
|
button.accessibilityLabel = title;
|
||||||
|
|
||||||
|
[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
|
||||||
|
[_view addSubview:button];
|
||||||
|
|
||||||
|
if (!isSecondButton)
|
||||||
|
_height += kAlertButtonHeight + kAlertViewBorder;
|
||||||
|
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
_height += 10; // Margin for the shadow
|
||||||
|
|
||||||
|
if (_height < background.size.height)
|
||||||
|
{
|
||||||
|
CGFloat offset = background.size.height - _height;
|
||||||
|
_height = background.size.height;
|
||||||
|
CGRect frame;
|
||||||
|
for (NSUInteger i = 0; i < _blocks.count; i++)
|
||||||
|
{
|
||||||
|
UIButton *btn = (UIButton *)[_view viewWithTag:i+1];
|
||||||
|
frame = btn.frame;
|
||||||
|
frame.origin.y += offset;
|
||||||
|
btn.frame = frame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CGRect frame = _view.frame;
|
||||||
|
frame.origin.y = - _height;
|
||||||
|
frame.size.height = _height;
|
||||||
|
_view.frame = frame;
|
||||||
|
|
||||||
|
UIImageView *modalBackground = [[UIImageView alloc] initWithFrame:_view.bounds];
|
||||||
|
|
||||||
|
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
|
||||||
|
modalBackground.image = backgroundlandscape;
|
||||||
|
else
|
||||||
|
modalBackground.image = background;
|
||||||
|
|
||||||
|
modalBackground.contentMode = UIViewContentModeScaleToFill;
|
||||||
|
modalBackground.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
[_view insertSubview:modalBackground atIndex:0];
|
||||||
|
[modalBackground release];
|
||||||
|
|
||||||
|
if (_backgroundImage)
|
||||||
|
{
|
||||||
|
[BlockBackground sharedInstance].backgroundImage = _backgroundImage;
|
||||||
|
[_backgroundImage release];
|
||||||
|
_backgroundImage = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BlockBackground sharedInstance].vignetteBackground = _vignetteBackground;
|
||||||
|
[[BlockBackground sharedInstance] addToMainWindow:_view];
|
||||||
|
|
||||||
|
__block CGPoint center = _view.center;
|
||||||
|
center.y = floorf([BlockBackground sharedInstance].bounds.size.height * 0.5) + kAlertViewBounce;
|
||||||
|
|
||||||
|
_cancelBounce = NO;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.4
|
||||||
|
delay:0.0
|
||||||
|
options:UIViewAnimationCurveEaseOut
|
||||||
|
animations:^{
|
||||||
|
[BlockBackground sharedInstance].alpha = 1.0f;
|
||||||
|
_view.center = center;
|
||||||
|
}
|
||||||
|
completion:^(BOOL finished) {
|
||||||
|
if (_cancelBounce) return;
|
||||||
|
|
||||||
|
[UIView animateWithDuration:0.1
|
||||||
|
delay:0.0
|
||||||
|
options:0
|
||||||
|
animations:^{
|
||||||
|
center.y -= kAlertViewBounce;
|
||||||
|
_view.center = center;
|
||||||
|
}
|
||||||
|
completion:^(BOOL finished) {
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"AlertViewFinishedAnimations" object:nil];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
|
||||||
|
[self retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
|
||||||
|
{
|
||||||
|
_shown = NO;
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
|
||||||
|
if (buttonIndex >= 0 && buttonIndex < [_blocks count])
|
||||||
|
{
|
||||||
|
id obj = [[_blocks objectAtIndex: buttonIndex] objectAtIndex:0];
|
||||||
|
if (![obj isEqual:[NSNull null]])
|
||||||
|
{
|
||||||
|
((void (^)())obj)();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (animated)
|
||||||
|
{
|
||||||
|
[UIView animateWithDuration:0.1
|
||||||
|
delay:0.0
|
||||||
|
options:0
|
||||||
|
animations:^{
|
||||||
|
CGPoint center = _view.center;
|
||||||
|
center.y += 20;
|
||||||
|
_view.center = center;
|
||||||
|
}
|
||||||
|
completion:^(BOOL finished) {
|
||||||
|
[UIView animateWithDuration:0.4
|
||||||
|
delay:0.0
|
||||||
|
options:UIViewAnimationCurveEaseIn
|
||||||
|
animations:^{
|
||||||
|
CGRect frame = _view.frame;
|
||||||
|
frame.origin.y = -frame.size.height;
|
||||||
|
_view.frame = frame;
|
||||||
|
[[BlockBackground sharedInstance] reduceAlphaIfEmpty];
|
||||||
|
}
|
||||||
|
completion:^(BOOL finished) {
|
||||||
|
[[BlockBackground sharedInstance] removeView:_view];
|
||||||
|
[_view release]; _view = nil;
|
||||||
|
[self autorelease];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[[BlockBackground sharedInstance] removeView:_view];
|
||||||
|
[_view release]; _view = nil;
|
||||||
|
[self autorelease];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#pragma mark - Action
|
||||||
|
|
||||||
|
- (void)buttonClicked:(id)sender
|
||||||
|
{
|
||||||
|
/* Run the button's block */
|
||||||
|
int buttonIndex = [sender tag] - 1;
|
||||||
|
[self dismissWithClickedButtonIndex:buttonIndex animated:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
25
client/iOS/Views/BlockBackground.h
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// BlockBackground.h
|
||||||
|
// arrived
|
||||||
|
//
|
||||||
|
// Created by Gustavo Ambrozio on 29/11/11.
|
||||||
|
// Copyright (c) 2011 N/A. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface BlockBackground : UIWindow {
|
||||||
|
@private
|
||||||
|
UIWindow *_previousKeyWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BlockBackground *) sharedInstance;
|
||||||
|
|
||||||
|
- (void)addToMainWindow:(UIView *)view;
|
||||||
|
- (void)reduceAlphaIfEmpty;
|
||||||
|
- (void)removeView:(UIView *)view;
|
||||||
|
|
||||||
|
@property (nonatomic, retain) UIImage *backgroundImage;
|
||||||
|
@property (nonatomic, readwrite) BOOL vignetteBackground;
|
||||||
|
|
||||||
|
@end
|
||||||
227
client/iOS/Views/BlockBackground.m
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
//
|
||||||
|
// BlockBackground.m
|
||||||
|
// arrived
|
||||||
|
//
|
||||||
|
// Created by Gustavo Ambrozio on 29/11/11.
|
||||||
|
// Copyright (c) 2011 N/A. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "BlockBackground.h"
|
||||||
|
|
||||||
|
@implementation BlockBackground
|
||||||
|
|
||||||
|
@synthesize backgroundImage = _backgroundImage;
|
||||||
|
@synthesize vignetteBackground = _vignetteBackground;
|
||||||
|
|
||||||
|
static BlockBackground *_sharedInstance = nil;
|
||||||
|
|
||||||
|
+ (BlockBackground*)sharedInstance
|
||||||
|
{
|
||||||
|
if (_sharedInstance != nil) {
|
||||||
|
return _sharedInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@synchronized(self) {
|
||||||
|
if (_sharedInstance == nil) {
|
||||||
|
[[[self alloc] init] autorelease];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return _sharedInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (id)allocWithZone:(NSZone*)zone
|
||||||
|
{
|
||||||
|
@synchronized(self) {
|
||||||
|
if (_sharedInstance == nil) {
|
||||||
|
_sharedInstance = [super allocWithZone:zone];
|
||||||
|
return _sharedInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NSAssert(NO, @ "[BlockBackground alloc] explicitly called on singleton class.");
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)copyWithZone:(NSZone*)zone
|
||||||
|
{
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)retain
|
||||||
|
{
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (unsigned)retainCount
|
||||||
|
{
|
||||||
|
return UINT_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (oneway void)release
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)autorelease
|
||||||
|
{
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setRotation:(NSNotification*)notification
|
||||||
|
{
|
||||||
|
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
|
||||||
|
|
||||||
|
CGRect orientationFrame = [UIScreen mainScreen].bounds;
|
||||||
|
|
||||||
|
if(
|
||||||
|
(UIInterfaceOrientationIsLandscape(orientation) && orientationFrame.size.height > orientationFrame.size.width) ||
|
||||||
|
(UIInterfaceOrientationIsPortrait(orientation) && orientationFrame.size.width > orientationFrame.size.height)
|
||||||
|
) {
|
||||||
|
float temp = orientationFrame.size.width;
|
||||||
|
orientationFrame.size.width = orientationFrame.size.height;
|
||||||
|
orientationFrame.size.height = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.transform = CGAffineTransformIdentity;
|
||||||
|
self.frame = orientationFrame;
|
||||||
|
|
||||||
|
CGFloat posY = orientationFrame.size.height/2;
|
||||||
|
CGFloat posX = orientationFrame.size.width/2;
|
||||||
|
|
||||||
|
CGPoint newCenter;
|
||||||
|
CGFloat rotateAngle;
|
||||||
|
|
||||||
|
switch (orientation) {
|
||||||
|
case UIInterfaceOrientationPortraitUpsideDown:
|
||||||
|
rotateAngle = M_PI;
|
||||||
|
newCenter = CGPointMake(posX, orientationFrame.size.height-posY);
|
||||||
|
break;
|
||||||
|
case UIInterfaceOrientationLandscapeLeft:
|
||||||
|
rotateAngle = -M_PI/2.0f;
|
||||||
|
newCenter = CGPointMake(posY, posX);
|
||||||
|
break;
|
||||||
|
case UIInterfaceOrientationLandscapeRight:
|
||||||
|
rotateAngle = M_PI/2.0f;
|
||||||
|
newCenter = CGPointMake(orientationFrame.size.height-posY, posX);
|
||||||
|
break;
|
||||||
|
default: // UIInterfaceOrientationPortrait
|
||||||
|
rotateAngle = 0.0;
|
||||||
|
newCenter = CGPointMake(posX, posY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.transform = CGAffineTransformMakeRotation(rotateAngle);
|
||||||
|
self.center = newCenter;
|
||||||
|
|
||||||
|
[self setNeedsLayout];
|
||||||
|
[self layoutSubviews];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
|
if (self) {
|
||||||
|
self.windowLevel = UIWindowLevelStatusBar;
|
||||||
|
self.hidden = YES;
|
||||||
|
self.userInteractionEnabled = NO;
|
||||||
|
self.backgroundColor = [UIColor colorWithWhite:0.4 alpha:0.5f];
|
||||||
|
self.vignetteBackground = NO;
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
|
selector:@selector(setRotation:)
|
||||||
|
name:UIApplicationDidChangeStatusBarOrientationNotification
|
||||||
|
object:nil];
|
||||||
|
[self setRotation:nil];
|
||||||
|
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)addToMainWindow:(UIView *)view
|
||||||
|
{
|
||||||
|
[self setRotation:nil];
|
||||||
|
|
||||||
|
if ([self.subviews containsObject:view]) return;
|
||||||
|
|
||||||
|
if (self.hidden)
|
||||||
|
{
|
||||||
|
_previousKeyWindow = [[[UIApplication sharedApplication] keyWindow] retain];
|
||||||
|
self.alpha = 0.0f;
|
||||||
|
self.hidden = NO;
|
||||||
|
self.userInteractionEnabled = YES;
|
||||||
|
[self makeKeyWindow];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.subviews.count > 0)
|
||||||
|
{
|
||||||
|
((UIView*)[self.subviews lastObject]).userInteractionEnabled = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_backgroundImage)
|
||||||
|
{
|
||||||
|
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:_backgroundImage];
|
||||||
|
backgroundView.frame = self.bounds;
|
||||||
|
backgroundView.contentMode = UIViewContentModeScaleToFill;
|
||||||
|
[self addSubview:backgroundView];
|
||||||
|
[backgroundView release];
|
||||||
|
[_backgroundImage release];
|
||||||
|
_backgroundImage = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
[self addSubview:view];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)reduceAlphaIfEmpty
|
||||||
|
{
|
||||||
|
if (self.subviews.count == 1 || (self.subviews.count == 2 && [[self.subviews objectAtIndex:0] isKindOfClass:[UIImageView class]]))
|
||||||
|
{
|
||||||
|
self.alpha = 0.0f;
|
||||||
|
self.userInteractionEnabled = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeView:(UIView *)view
|
||||||
|
{
|
||||||
|
[view removeFromSuperview];
|
||||||
|
|
||||||
|
UIView *topView = [self.subviews lastObject];
|
||||||
|
if ([topView isKindOfClass:[UIImageView class]])
|
||||||
|
{
|
||||||
|
// It's a background. Remove it too
|
||||||
|
[topView removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.subviews.count == 0)
|
||||||
|
{
|
||||||
|
self.hidden = YES;
|
||||||
|
[_previousKeyWindow makeKeyWindow];
|
||||||
|
[_previousKeyWindow release];
|
||||||
|
_previousKeyWindow = nil;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
((UIView*)[self.subviews lastObject]).userInteractionEnabled = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawRect:(CGRect)rect
|
||||||
|
{
|
||||||
|
if (_backgroundImage || !_vignetteBackground) return;
|
||||||
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||||
|
|
||||||
|
size_t locationsCount = 2;
|
||||||
|
CGFloat locations[2] = {0.0f, 1.0f};
|
||||||
|
CGFloat colors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.75f};
|
||||||
|
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||||
|
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount);
|
||||||
|
CGColorSpaceRelease(colorSpace);
|
||||||
|
|
||||||
|
CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
|
||||||
|
float radius = MIN(self.bounds.size.width , self.bounds.size.height) ;
|
||||||
|
CGContextDrawRadialGradient (context, gradient, center, 0, center, radius, kCGGradientDrawsAfterEndLocation);
|
||||||
|
CGGradientRelease(gradient);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
72
client/iOS/Views/BlockUI.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
//
|
||||||
|
// BlockUI.h
|
||||||
|
//
|
||||||
|
// Created by Gustavo Ambrozio on 14/2/12.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BlockUI_h
|
||||||
|
#define BlockUI_h
|
||||||
|
|
||||||
|
#if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000
|
||||||
|
#define NSTextAlignmentCenter UITextAlignmentCenter
|
||||||
|
#define NSLineBreakByWordWrapping UILineBreakModeWordWrap
|
||||||
|
#define NSLineBreakByClipping UILineBreakModeClip
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef IOS_LESS_THAN_6
|
||||||
|
#define IOS_LESS_THAN_6 !([[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NeedsLandscapePhoneTweaks (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
|
||||||
|
|
||||||
|
|
||||||
|
// Action Sheet constants
|
||||||
|
|
||||||
|
#define kActionSheetBounce 10
|
||||||
|
#define kActionSheetBorder 10
|
||||||
|
#define kActionSheetButtonHeight 45
|
||||||
|
#define kActionSheetTopMargin 15
|
||||||
|
|
||||||
|
#define kActionSheetTitleFont [UIFont systemFontOfSize:18]
|
||||||
|
#define kActionSheetTitleTextColor [UIColor whiteColor]
|
||||||
|
#define kActionSheetTitleShadowColor [UIColor blackColor]
|
||||||
|
#define kActionSheetTitleShadowOffset CGSizeMake(0, -1)
|
||||||
|
|
||||||
|
#define kActionSheetButtonFont [UIFont boldSystemFontOfSize:20]
|
||||||
|
#define kActionSheetButtonTextColor [UIColor whiteColor]
|
||||||
|
#define kActionSheetButtonShadowColor [UIColor blackColor]
|
||||||
|
#define kActionSheetButtonShadowOffset CGSizeMake(0, -1)
|
||||||
|
|
||||||
|
#define kActionSheetBackground @"action-sheet-panel.png"
|
||||||
|
#define kActionSheetBackgroundCapHeight 30
|
||||||
|
|
||||||
|
|
||||||
|
// Alert View constants
|
||||||
|
|
||||||
|
#define kAlertViewBounce 20
|
||||||
|
#define kAlertViewBorder (NeedsLandscapePhoneTweaks ? 5 : 10)
|
||||||
|
#define kAlertButtonHeight (NeedsLandscapePhoneTweaks ? 35 : 44)
|
||||||
|
|
||||||
|
|
||||||
|
#define kAlertViewTitleFont [UIFont boldSystemFontOfSize:20]
|
||||||
|
#define kAlertViewTitleTextColor [UIColor colorWithWhite:244.0/255.0 alpha:1.0]
|
||||||
|
#define kAlertViewTitleShadowColor [UIColor blackColor]
|
||||||
|
#define kAlertViewTitleShadowOffset CGSizeMake(0, -1)
|
||||||
|
|
||||||
|
#define kAlertViewMessageFont [UIFont systemFontOfSize:18]
|
||||||
|
#define kAlertViewMessageTextColor [UIColor colorWithWhite:244.0/255.0 alpha:1.0]
|
||||||
|
#define kAlertViewMessageShadowColor [UIColor blackColor]
|
||||||
|
#define kAlertViewMessageShadowOffset CGSizeMake(0, -1)
|
||||||
|
|
||||||
|
#define kAlertViewButtonFont [UIFont boldSystemFontOfSize:18]
|
||||||
|
#define kAlertViewButtonTextColor [UIColor whiteColor]
|
||||||
|
#define kAlertViewButtonShadowColor [UIColor blackColor]
|
||||||
|
#define kAlertViewButtonShadowOffset CGSizeMake(0, -1)
|
||||||
|
|
||||||
|
#define kAlertViewBackground @"alert-window.png"
|
||||||
|
#define kAlertViewBackgroundLandscape @"alert-window-landscape.png"
|
||||||
|
#define kAlertViewBackgroundCapHeight 38
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,865 +0,0 @@
|
|||||||
// !$*UTF8*$!
|
|
||||||
{
|
|
||||||
archiveVersion = 1;
|
|
||||||
classes = {
|
|
||||||
};
|
|
||||||
objectVersion = 46;
|
|
||||||
objects = {
|
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
|
||||||
C495EE3416B8372D0041304E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C495EE3316B8372D0041304E /* UIKit.framework */; };
|
|
||||||
C495EE3616B8372D0041304E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C495EE3516B8372D0041304E /* Foundation.framework */; };
|
|
||||||
C495EE3816B8372D0041304E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C495EE3716B8372D0041304E /* CoreGraphics.framework */; };
|
|
||||||
C495EE7016B9107D0041304E /* Defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = C495EE6F16B9107D0041304E /* Defaults.plist */; };
|
|
||||||
C495EE7716B910BC0041304E /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE7216B910BC0041304E /* OrderedDictionary.m */; };
|
|
||||||
C495EE7816B910BC0041304E /* Toast+UIView.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE7416B910BC0041304E /* Toast+UIView.m */; };
|
|
||||||
C495EE7916B910BC0041304E /* TSXAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE7616B910BC0041304E /* TSXAdditions.m */; };
|
|
||||||
C495EE9B16B910DE0041304E /* AboutController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE7C16B910DE0041304E /* AboutController.m */; };
|
|
||||||
C495EE9C16B910DE0041304E /* AdvancedBookmarkEditorController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE7E16B910DE0041304E /* AdvancedBookmarkEditorController.m */; };
|
|
||||||
C495EE9D16B910DE0041304E /* AppSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8016B910DE0041304E /* AppSettingsController.m */; };
|
|
||||||
C495EE9E16B910DE0041304E /* BookmarkEditorController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8216B910DE0041304E /* BookmarkEditorController.m */; };
|
|
||||||
C495EE9F16B910DE0041304E /* BookmarkListController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8416B910DE0041304E /* BookmarkListController.m */; };
|
|
||||||
C495EEA016B910DE0041304E /* CredentialsEditorController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8616B910DE0041304E /* CredentialsEditorController.m */; };
|
|
||||||
C495EEA116B910DE0041304E /* CredentialsInputController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8816B910DE0041304E /* CredentialsInputController.m */; };
|
|
||||||
C495EEA216B910DE0041304E /* EditorBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8A16B910DE0041304E /* EditorBaseController.m */; };
|
|
||||||
C495EEA316B910DE0041304E /* EditorSelectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8C16B910DE0041304E /* EditorSelectionController.m */; };
|
|
||||||
C495EEA416B910DE0041304E /* EncryptionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE8E16B910DE0041304E /* EncryptionController.m */; };
|
|
||||||
C495EEA516B910DE0041304E /* HelpController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9016B910DE0041304E /* HelpController.m */; };
|
|
||||||
C495EEA616B910DE0041304E /* MainTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9216B910DE0041304E /* MainTabBarController.m */; };
|
|
||||||
C495EEA716B910DE0041304E /* PerformanceEditorController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9416B910DE0041304E /* PerformanceEditorController.m */; };
|
|
||||||
C495EEA816B910DE0041304E /* RDPSessionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9616B910DE0041304E /* RDPSessionViewController.m */; };
|
|
||||||
C495EEA916B910DE0041304E /* ScreenSelectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9816B910DE0041304E /* ScreenSelectionController.m */; };
|
|
||||||
C495EEAA16B910DE0041304E /* VerifyCertificateController.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EE9A16B910DE0041304E /* VerifyCertificateController.m */; };
|
|
||||||
C495EEB216B910F60041304E /* ios_freerdp_events.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEAD16B910F60041304E /* ios_freerdp_events.m */; };
|
|
||||||
C495EEB316B910F60041304E /* ios_freerdp_ui.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEAF16B910F60041304E /* ios_freerdp_ui.m */; };
|
|
||||||
C495EEB416B910F60041304E /* ios_freerdp.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEB116B910F60041304E /* ios_freerdp.m */; };
|
|
||||||
C495EEBD16B9111A0041304E /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEB716B9111A0041304E /* Reachability.m */; };
|
|
||||||
C495EEBE16B9111A0041304E /* SFHFKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEB916B9111A0041304E /* SFHFKeychainUtils.m */; };
|
|
||||||
C495EEBF16B9111A0041304E /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEBC16B9111A0041304E /* Utils.m */; };
|
|
||||||
C495EECD16B911290041304E /* Bookmark.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEC216B911290041304E /* Bookmark.m */; };
|
|
||||||
C495EECE16B911290041304E /* ConnectionParams.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEC416B911290041304E /* ConnectionParams.m */; };
|
|
||||||
C495EECF16B911290041304E /* Encryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEC616B911290041304E /* Encryptor.m */; };
|
|
||||||
C495EED016B911290041304E /* GlobalDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EEC816B911290041304E /* GlobalDefaults.m */; };
|
|
||||||
C495EED116B911290041304E /* RDPKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EECA16B911290041304E /* RDPKeyboard.m */; };
|
|
||||||
C495EED216B911290041304E /* RDPSession.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EECC16B911290041304E /* RDPSession.m */; };
|
|
||||||
C495EF3216B911450041304E /* BookmarkListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDA16B911450041304E /* BookmarkListView.xib */; };
|
|
||||||
C495EF3316B911450041304E /* BookmarkTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDB16B911450041304E /* BookmarkTableViewCell.xib */; };
|
|
||||||
C495EF3416B911450041304E /* cancel_button_background.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDC16B911450041304E /* cancel_button_background.png */; };
|
|
||||||
C495EF3516B911450041304E /* CredentialsInputView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDD16B911450041304E /* CredentialsInputView.xib */; };
|
|
||||||
C495EF3616B911450041304E /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDE16B911450041304E /* Default-Landscape@2x~ipad.png */; };
|
|
||||||
C495EF3716B911450041304E /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEDF16B911450041304E /* Default-Landscape~ipad.png */; };
|
|
||||||
C495EF3816B911450041304E /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE016B911450041304E /* Default-Portrait@2x~ipad.png */; };
|
|
||||||
C495EF3916B911450041304E /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE116B911450041304E /* Default-Portrait~ipad.png */; };
|
|
||||||
C495EF3A16B911450041304E /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE216B911450041304E /* Default.png */; };
|
|
||||||
C495EF3B16B911450041304E /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE316B911450041304E /* Default@2x.png */; };
|
|
||||||
C495EF3C16B911450041304E /* EditButtonTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE416B911450041304E /* EditButtonTableViewCell.xib */; };
|
|
||||||
C495EF3D16B911450041304E /* EditFlagTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE516B911450041304E /* EditFlagTableViewCell.xib */; };
|
|
||||||
C495EF3E16B911450041304E /* EditSecretTextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE616B911450041304E /* EditSecretTextTableViewCell.xib */; };
|
|
||||||
C495EF3F16B911450041304E /* EditSelectionTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE716B911450041304E /* EditSelectionTableViewCell.xib */; };
|
|
||||||
C495EF4016B911450041304E /* EditSubEditTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE816B911450041304E /* EditSubEditTableViewCell.xib */; };
|
|
||||||
C495EF4116B911450041304E /* EditTextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EEE916B911450041304E /* EditTextTableViewCell.xib */; };
|
|
||||||
C495EF5316B911450041304E /* icon_accessory_star_off.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEFE16B911450041304E /* icon_accessory_star_off.png */; };
|
|
||||||
C495EF5416B911450041304E /* icon_accessory_star_on.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EEFF16B911450041304E /* icon_accessory_star_on.png */; };
|
|
||||||
C495EF5516B911450041304E /* icon_key_arrow_down.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0016B911450041304E /* icon_key_arrow_down.png */; };
|
|
||||||
C495EF5616B911450041304E /* icon_key_arrow_left.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0116B911450041304E /* icon_key_arrow_left.png */; };
|
|
||||||
C495EF5716B911450041304E /* icon_key_arrow_right.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0216B911450041304E /* icon_key_arrow_right.png */; };
|
|
||||||
C495EF5816B911450041304E /* icon_key_arrow_up.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0316B911450041304E /* icon_key_arrow_up.png */; };
|
|
||||||
C495EF5916B911450041304E /* icon_key_arrows.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0416B911450041304E /* icon_key_arrows.png */; };
|
|
||||||
C495EF5A16B911450041304E /* icon_key_backspace.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0516B911450041304E /* icon_key_backspace.png */; };
|
|
||||||
C495EF5B16B911450041304E /* icon_key_menu.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0616B911450041304E /* icon_key_menu.png */; };
|
|
||||||
C495EF5C16B911450041304E /* icon_key_return.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0716B911450041304E /* icon_key_return.png */; };
|
|
||||||
C495EF5D16B911450041304E /* icon_key_win.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0816B911450041304E /* icon_key_win.png */; };
|
|
||||||
C495EF5E16B911450041304E /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0916B911450041304E /* Icon-72.png */; };
|
|
||||||
C495EF5F16B911450041304E /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0A16B911450041304E /* Icon-72@2x.png */; };
|
|
||||||
C495EF6016B911450041304E /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0B16B911450041304E /* Icon.png */; };
|
|
||||||
C495EF6116B911450041304E /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0C16B911450041304E /* Icon@2x.png */; };
|
|
||||||
C495EF6216B911450041304E /* keyboard_button_background.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0D16B911450041304E /* keyboard_button_background.png */; };
|
|
||||||
C495EF6316B911450041304E /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0E16B911450041304E /* MainWindow.xib */; };
|
|
||||||
C495EF6416B911450041304E /* RDPConnectingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EF0F16B911450041304E /* RDPConnectingView.xib */; };
|
|
||||||
C495EF6516B911450041304E /* RDPSessionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1016B911450041304E /* RDPSessionView.xib */; };
|
|
||||||
C495EF6616B911450041304E /* SessionTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1116B911450041304E /* SessionTableViewCell.xib */; };
|
|
||||||
C495EF6716B911450041304E /* tabbar_icon_about.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1216B911450041304E /* tabbar_icon_about.png */; };
|
|
||||||
C495EF6816B911450041304E /* tabbar_icon_help.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1316B911450041304E /* tabbar_icon_help.png */; };
|
|
||||||
C495EF6916B911450041304E /* tabbar_icon_settings.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1416B911450041304E /* tabbar_icon_settings.png */; };
|
|
||||||
C495EF6A16B911450041304E /* toolbar_icon_disconnect.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1516B911450041304E /* toolbar_icon_disconnect.png */; };
|
|
||||||
C495EF6B16B911450041304E /* toolbar_icon_extkeyboad.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1616B911450041304E /* toolbar_icon_extkeyboad.png */; };
|
|
||||||
C495EF6C16B911450041304E /* toolbar_icon_home.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1716B911450041304E /* toolbar_icon_home.png */; };
|
|
||||||
C495EF6D16B911450041304E /* toolbar_icon_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1816B911450041304E /* toolbar_icon_keyboard.png */; };
|
|
||||||
C495EF6E16B911450041304E /* toolbar_icon_touchpointer.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1916B911450041304E /* toolbar_icon_touchpointer.png */; };
|
|
||||||
C495EF6F16B911450041304E /* toolbar_icon_win.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1A16B911450041304E /* toolbar_icon_win.png */; };
|
|
||||||
C495EF7016B911450041304E /* touch_pointer_active.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1B16B911450041304E /* touch_pointer_active.png */; };
|
|
||||||
C495EF7116B911450041304E /* touch_pointer_default.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1C16B911450041304E /* touch_pointer_default.png */; };
|
|
||||||
C495EF7216B911450041304E /* touch_pointer_extkeyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1D16B911450041304E /* touch_pointer_extkeyboard.png */; };
|
|
||||||
C495EF7316B911450041304E /* touch_pointer_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1E16B911450041304E /* touch_pointer_keyboard.png */; };
|
|
||||||
C495EF7416B911450041304E /* touch_pointer_lclick.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF1F16B911450041304E /* touch_pointer_lclick.png */; };
|
|
||||||
C495EF7516B911450041304E /* touch_pointer_rclick.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF2016B911450041304E /* touch_pointer_rclick.png */; };
|
|
||||||
C495EF7616B911450041304E /* touch_pointer_reset.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF2116B911450041304E /* touch_pointer_reset.png */; };
|
|
||||||
C495EF7716B911450041304E /* touch_pointer_scroll.png in Resources */ = {isa = PBXBuildFile; fileRef = C495EF2216B911450041304E /* touch_pointer_scroll.png */; };
|
|
||||||
C495EF7816B911450041304E /* VerifyCertificateView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C495EF2316B911450041304E /* VerifyCertificateView.xib */; };
|
|
||||||
C495EF9A16B911AC0041304E /* AdvancedKeyboardView.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8316B911AB0041304E /* AdvancedKeyboardView.m */; };
|
|
||||||
C495EF9B16B911AC0041304E /* BookmarkTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8516B911AB0041304E /* BookmarkTableCell.m */; };
|
|
||||||
C495EF9C16B911AC0041304E /* EditButtonTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8716B911AB0041304E /* EditButtonTableViewCell.m */; };
|
|
||||||
C495EF9D16B911AC0041304E /* EditFlagTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8916B911AB0041304E /* EditFlagTableViewCell.m */; };
|
|
||||||
C495EF9E16B911AC0041304E /* EditSecretTextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8B16B911AB0041304E /* EditSecretTextTableViewCell.m */; };
|
|
||||||
C495EF9F16B911AC0041304E /* EditSelectionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8D16B911AB0041304E /* EditSelectionTableViewCell.m */; };
|
|
||||||
C495EFA016B911AC0041304E /* EditSubEditTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF8F16B911AB0041304E /* EditSubEditTableViewCell.m */; };
|
|
||||||
C495EFA116B911AC0041304E /* EditTextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF9116B911AB0041304E /* EditTextTableViewCell.m */; };
|
|
||||||
C495EFA216B911AC0041304E /* RDPSessionView.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF9316B911AB0041304E /* RDPSessionView.m */; };
|
|
||||||
C495EFA316B911AC0041304E /* SessionTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF9516B911AB0041304E /* SessionTableCell.m */; };
|
|
||||||
C495EFA416B911AC0041304E /* TouchPointerView.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EF9716B911AB0041304E /* TouchPointerView.m */; };
|
|
||||||
C495EFAB16B912C40041304E /* libfreerdp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C495EFAA16B912C40041304E /* libfreerdp.a */; };
|
|
||||||
C495EFAE16B913980041304E /* libwinpr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C495EFAD16B913980041304E /* libwinpr.a */; };
|
|
||||||
C495EFBB16B92E170041304E /* about_page in Resources */ = {isa = PBXBuildFile; fileRef = C495EFBA16B92E170041304E /* about_page */; };
|
|
||||||
C495EFBD16B92E270041304E /* help_page in Resources */ = {isa = PBXBuildFile; fileRef = C495EFBC16B92E270041304E /* help_page */; };
|
|
||||||
C495EFC216B92EA20041304E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C495EFC016B92EA20041304E /* Localizable.strings */; };
|
|
||||||
C495EFCB16B933230041304E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EFC916B933230041304E /* AppDelegate.m */; };
|
|
||||||
C495EFCC16B933230041304E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C495EFCA16B933230041304E /* main.m */; };
|
|
||||||
C495F01716B937F90041304E /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C495F01516B937F80041304E /* libcrypto.a */; };
|
|
||||||
C495F01816B937F90041304E /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C495F01616B937F90041304E /* libssl.a */; };
|
|
||||||
C495F01A16B938210041304E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C495F01916B938210041304E /* Security.framework */; };
|
|
||||||
C495F01E16B938CB0041304E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C495F01D16B938CA0041304E /* SystemConfiguration.framework */; };
|
|
||||||
C4B6A8821701979900AA836E /* libfreerdp-client-combined.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4B6A8811701979900AA836E /* libfreerdp-client-combined.a */; };
|
|
||||||
C4C31C6F16BAD1890087BB12 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C4C31C6E16BAD1890087BB12 /* Default-568h@2x.png */; };
|
|
||||||
/* End PBXBuildFile section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
|
||||||
C495EE2F16B8372D0041304E /* iFreeRDP.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iFreeRDP.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
C495EE3316B8372D0041304E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
|
||||||
C495EE3516B8372D0041304E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
|
||||||
C495EE3716B8372D0041304E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
|
||||||
C495EE4116B8372D0041304E /* iFreeRDP-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iFreeRDP-Prefix.pch"; sourceTree = "<group>"; };
|
|
||||||
C495EE6D16B910510041304E /* iFreeRDP.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = iFreeRDP.plist; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE6F16B9107D0041304E /* Defaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Defaults.plist; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7116B910BC0041304E /* OrderedDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderedDictionary.h; path = Additions/OrderedDictionary.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7216B910BC0041304E /* OrderedDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderedDictionary.m; path = Additions/OrderedDictionary.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7316B910BC0041304E /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Toast+UIView.h"; path = "Additions/Toast+UIView.h"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7416B910BC0041304E /* Toast+UIView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "Toast+UIView.m"; path = "Additions/Toast+UIView.m"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7516B910BC0041304E /* TSXAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSXAdditions.h; path = Additions/TSXAdditions.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7616B910BC0041304E /* TSXAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSXAdditions.m; path = Additions/TSXAdditions.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7B16B910DE0041304E /* AboutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AboutController.h; path = Controllers/AboutController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7C16B910DE0041304E /* AboutController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AboutController.m; path = Controllers/AboutController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7D16B910DE0041304E /* AdvancedBookmarkEditorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AdvancedBookmarkEditorController.h; path = Controllers/AdvancedBookmarkEditorController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7E16B910DE0041304E /* AdvancedBookmarkEditorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AdvancedBookmarkEditorController.m; path = Controllers/AdvancedBookmarkEditorController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE7F16B910DE0041304E /* AppSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppSettingsController.h; path = Controllers/AppSettingsController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8016B910DE0041304E /* AppSettingsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppSettingsController.m; path = Controllers/AppSettingsController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8116B910DE0041304E /* BookmarkEditorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BookmarkEditorController.h; path = Controllers/BookmarkEditorController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8216B910DE0041304E /* BookmarkEditorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BookmarkEditorController.m; path = Controllers/BookmarkEditorController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8316B910DE0041304E /* BookmarkListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BookmarkListController.h; path = Controllers/BookmarkListController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8416B910DE0041304E /* BookmarkListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BookmarkListController.m; path = Controllers/BookmarkListController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8516B910DE0041304E /* CredentialsEditorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CredentialsEditorController.h; path = Controllers/CredentialsEditorController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8616B910DE0041304E /* CredentialsEditorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CredentialsEditorController.m; path = Controllers/CredentialsEditorController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8716B910DE0041304E /* CredentialsInputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CredentialsInputController.h; path = Controllers/CredentialsInputController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8816B910DE0041304E /* CredentialsInputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CredentialsInputController.m; path = Controllers/CredentialsInputController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8916B910DE0041304E /* EditorBaseController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditorBaseController.h; path = Controllers/EditorBaseController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8A16B910DE0041304E /* EditorBaseController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditorBaseController.m; path = Controllers/EditorBaseController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8B16B910DE0041304E /* EditorSelectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditorSelectionController.h; path = Controllers/EditorSelectionController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8C16B910DE0041304E /* EditorSelectionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditorSelectionController.m; path = Controllers/EditorSelectionController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8D16B910DE0041304E /* EncryptionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EncryptionController.h; path = Controllers/EncryptionController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8E16B910DE0041304E /* EncryptionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EncryptionController.m; path = Controllers/EncryptionController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE8F16B910DE0041304E /* HelpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelpController.h; path = Controllers/HelpController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9016B910DE0041304E /* HelpController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HelpController.m; path = Controllers/HelpController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9116B910DE0041304E /* MainTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainTabBarController.h; path = Controllers/MainTabBarController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9216B910DE0041304E /* MainTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MainTabBarController.m; path = Controllers/MainTabBarController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9316B910DE0041304E /* PerformanceEditorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PerformanceEditorController.h; path = Controllers/PerformanceEditorController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9416B910DE0041304E /* PerformanceEditorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PerformanceEditorController.m; path = Controllers/PerformanceEditorController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9516B910DE0041304E /* RDPSessionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RDPSessionViewController.h; path = Controllers/RDPSessionViewController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9616B910DE0041304E /* RDPSessionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RDPSessionViewController.m; path = Controllers/RDPSessionViewController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9716B910DE0041304E /* ScreenSelectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScreenSelectionController.h; path = Controllers/ScreenSelectionController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9816B910DE0041304E /* ScreenSelectionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ScreenSelectionController.m; path = Controllers/ScreenSelectionController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9916B910DE0041304E /* VerifyCertificateController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VerifyCertificateController.h; path = Controllers/VerifyCertificateController.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EE9A16B910DE0041304E /* VerifyCertificateController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VerifyCertificateController.m; path = Controllers/VerifyCertificateController.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEAC16B910F60041304E /* ios_freerdp_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ios_freerdp_events.h; path = FreeRDP/ios_freerdp_events.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEAD16B910F60041304E /* ios_freerdp_events.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ios_freerdp_events.m; path = FreeRDP/ios_freerdp_events.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEAE16B910F60041304E /* ios_freerdp_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ios_freerdp_ui.h; path = FreeRDP/ios_freerdp_ui.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEAF16B910F60041304E /* ios_freerdp_ui.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ios_freerdp_ui.m; path = FreeRDP/ios_freerdp_ui.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB016B910F60041304E /* ios_freerdp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ios_freerdp.h; path = FreeRDP/ios_freerdp.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB116B910F60041304E /* ios_freerdp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ios_freerdp.m; path = FreeRDP/ios_freerdp.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB616B9111A0041304E /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reachability.h; path = Misc/Reachability.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB716B9111A0041304E /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Reachability.m; path = Misc/Reachability.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB816B9111A0041304E /* SFHFKeychainUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SFHFKeychainUtils.h; path = Misc/SFHFKeychainUtils.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEB916B9111A0041304E /* SFHFKeychainUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SFHFKeychainUtils.m; path = Misc/SFHFKeychainUtils.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEBA16B9111A0041304E /* TSXTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSXTypes.h; path = Misc/TSXTypes.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEBB16B9111A0041304E /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Misc/Utils.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEBC16B9111A0041304E /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = Misc/Utils.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC116B911290041304E /* Bookmark.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bookmark.h; path = Models/Bookmark.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC216B911290041304E /* Bookmark.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Bookmark.m; path = Models/Bookmark.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC316B911290041304E /* ConnectionParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConnectionParams.h; path = Models/ConnectionParams.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC416B911290041304E /* ConnectionParams.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConnectionParams.m; path = Models/ConnectionParams.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC516B911290041304E /* Encryptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Encryptor.h; path = Models/Encryptor.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC616B911290041304E /* Encryptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Encryptor.m; path = Models/Encryptor.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC716B911290041304E /* GlobalDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GlobalDefaults.h; path = Models/GlobalDefaults.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC816B911290041304E /* GlobalDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GlobalDefaults.m; path = Models/GlobalDefaults.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEC916B911290041304E /* RDPKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RDPKeyboard.h; path = Models/RDPKeyboard.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EECA16B911290041304E /* RDPKeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RDPKeyboard.m; path = Models/RDPKeyboard.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EECB16B911290041304E /* RDPSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RDPSession.h; path = Models/RDPSession.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EECC16B911290041304E /* RDPSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RDPSession.m; path = Models/RDPSession.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDA16B911450041304E /* BookmarkListView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = BookmarkListView.xib; path = Resources/BookmarkListView.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDB16B911450041304E /* BookmarkTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = BookmarkTableViewCell.xib; path = Resources/BookmarkTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDC16B911450041304E /* cancel_button_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cancel_button_background.png; path = Resources/cancel_button_background.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDD16B911450041304E /* CredentialsInputView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CredentialsInputView.xib; path = Resources/CredentialsInputView.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDE16B911450041304E /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "Resources/Default-Landscape@2x~ipad.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEDF16B911450041304E /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "Resources/Default-Landscape~ipad.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE016B911450041304E /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "Resources/Default-Portrait@2x~ipad.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE116B911450041304E /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "Resources/Default-Portrait~ipad.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE216B911450041304E /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Default.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE316B911450041304E /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Resources/Default@2x.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE416B911450041304E /* EditButtonTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditButtonTableViewCell.xib; path = Resources/EditButtonTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE516B911450041304E /* EditFlagTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditFlagTableViewCell.xib; path = Resources/EditFlagTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE616B911450041304E /* EditSecretTextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditSecretTextTableViewCell.xib; path = Resources/EditSecretTextTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE716B911450041304E /* EditSelectionTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditSelectionTableViewCell.xib; path = Resources/EditSelectionTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE816B911450041304E /* EditSubEditTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditSubEditTableViewCell.xib; path = Resources/EditSubEditTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEE916B911450041304E /* EditTextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditTextTableViewCell.xib; path = Resources/EditTextTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEFE16B911450041304E /* icon_accessory_star_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_accessory_star_off.png; path = Resources/icon_accessory_star_off.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EEFF16B911450041304E /* icon_accessory_star_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_accessory_star_on.png; path = Resources/icon_accessory_star_on.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0016B911450041304E /* icon_key_arrow_down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_arrow_down.png; path = Resources/icon_key_arrow_down.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0116B911450041304E /* icon_key_arrow_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_arrow_left.png; path = Resources/icon_key_arrow_left.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0216B911450041304E /* icon_key_arrow_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_arrow_right.png; path = Resources/icon_key_arrow_right.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0316B911450041304E /* icon_key_arrow_up.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_arrow_up.png; path = Resources/icon_key_arrow_up.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0416B911450041304E /* icon_key_arrows.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_arrows.png; path = Resources/icon_key_arrows.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0516B911450041304E /* icon_key_backspace.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_backspace.png; path = Resources/icon_key_backspace.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0616B911450041304E /* icon_key_menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_menu.png; path = Resources/icon_key_menu.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0716B911450041304E /* icon_key_return.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_return.png; path = Resources/icon_key_return.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0816B911450041304E /* icon_key_win.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_key_win.png; path = Resources/icon_key_win.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0916B911450041304E /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources/Icon-72.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0A16B911450041304E /* Icon-72@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72@2x.png"; path = "Resources/Icon-72@2x.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0B16B911450041304E /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icon.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0C16B911450041304E /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources/Icon@2x.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0D16B911450041304E /* keyboard_button_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = keyboard_button_background.png; path = Resources/keyboard_button_background.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0E16B911450041304E /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainWindow.xib; path = Resources/MainWindow.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF0F16B911450041304E /* RDPConnectingView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RDPConnectingView.xib; path = Resources/RDPConnectingView.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1016B911450041304E /* RDPSessionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RDPSessionView.xib; path = Resources/RDPSessionView.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1116B911450041304E /* SessionTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = SessionTableViewCell.xib; path = Resources/SessionTableViewCell.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1216B911450041304E /* tabbar_icon_about.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tabbar_icon_about.png; path = Resources/tabbar_icon_about.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1316B911450041304E /* tabbar_icon_help.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tabbar_icon_help.png; path = Resources/tabbar_icon_help.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1416B911450041304E /* tabbar_icon_settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tabbar_icon_settings.png; path = Resources/tabbar_icon_settings.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1516B911450041304E /* toolbar_icon_disconnect.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_disconnect.png; path = Resources/toolbar_icon_disconnect.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1616B911450041304E /* toolbar_icon_extkeyboad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_extkeyboad.png; path = Resources/toolbar_icon_extkeyboad.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1716B911450041304E /* toolbar_icon_home.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_home.png; path = Resources/toolbar_icon_home.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1816B911450041304E /* toolbar_icon_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_keyboard.png; path = Resources/toolbar_icon_keyboard.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1916B911450041304E /* toolbar_icon_touchpointer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_touchpointer.png; path = Resources/toolbar_icon_touchpointer.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1A16B911450041304E /* toolbar_icon_win.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_icon_win.png; path = Resources/toolbar_icon_win.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1B16B911450041304E /* touch_pointer_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_active.png; path = Resources/touch_pointer_active.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1C16B911450041304E /* touch_pointer_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_default.png; path = Resources/touch_pointer_default.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1D16B911450041304E /* touch_pointer_extkeyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_extkeyboard.png; path = Resources/touch_pointer_extkeyboard.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1E16B911450041304E /* touch_pointer_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_keyboard.png; path = Resources/touch_pointer_keyboard.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF1F16B911450041304E /* touch_pointer_lclick.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_lclick.png; path = Resources/touch_pointer_lclick.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF2016B911450041304E /* touch_pointer_rclick.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_rclick.png; path = Resources/touch_pointer_rclick.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF2116B911450041304E /* touch_pointer_reset.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_reset.png; path = Resources/touch_pointer_reset.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF2216B911450041304E /* touch_pointer_scroll.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = touch_pointer_scroll.png; path = Resources/touch_pointer_scroll.png; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF2316B911450041304E /* VerifyCertificateView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VerifyCertificateView.xib; path = Resources/VerifyCertificateView.xib; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8216B911AB0041304E /* AdvancedKeyboardView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AdvancedKeyboardView.h; path = Views/AdvancedKeyboardView.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8316B911AB0041304E /* AdvancedKeyboardView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AdvancedKeyboardView.m; path = Views/AdvancedKeyboardView.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8416B911AB0041304E /* BookmarkTableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BookmarkTableCell.h; path = Views/BookmarkTableCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8516B911AB0041304E /* BookmarkTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BookmarkTableCell.m; path = Views/BookmarkTableCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8616B911AB0041304E /* EditButtonTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditButtonTableViewCell.h; path = Views/EditButtonTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8716B911AB0041304E /* EditButtonTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditButtonTableViewCell.m; path = Views/EditButtonTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8816B911AB0041304E /* EditFlagTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditFlagTableViewCell.h; path = Views/EditFlagTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8916B911AB0041304E /* EditFlagTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditFlagTableViewCell.m; path = Views/EditFlagTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8A16B911AB0041304E /* EditSecretTextTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditSecretTextTableViewCell.h; path = Views/EditSecretTextTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8B16B911AB0041304E /* EditSecretTextTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditSecretTextTableViewCell.m; path = Views/EditSecretTextTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8C16B911AB0041304E /* EditSelectionTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditSelectionTableViewCell.h; path = Views/EditSelectionTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8D16B911AB0041304E /* EditSelectionTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditSelectionTableViewCell.m; path = Views/EditSelectionTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8E16B911AB0041304E /* EditSubEditTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditSubEditTableViewCell.h; path = Views/EditSubEditTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF8F16B911AB0041304E /* EditSubEditTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditSubEditTableViewCell.m; path = Views/EditSubEditTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9016B911AB0041304E /* EditTextTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditTextTableViewCell.h; path = Views/EditTextTableViewCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9116B911AB0041304E /* EditTextTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditTextTableViewCell.m; path = Views/EditTextTableViewCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9216B911AB0041304E /* RDPSessionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RDPSessionView.h; path = Views/RDPSessionView.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9316B911AB0041304E /* RDPSessionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RDPSessionView.m; path = Views/RDPSessionView.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9416B911AB0041304E /* SessionTableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SessionTableCell.h; path = Views/SessionTableCell.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9516B911AB0041304E /* SessionTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SessionTableCell.m; path = Views/SessionTableCell.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9616B911AB0041304E /* TouchPointerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchPointerView.h; path = Views/TouchPointerView.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EF9716B911AB0041304E /* TouchPointerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchPointerView.m; path = Views/TouchPointerView.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFAA16B912C40041304E /* libfreerdp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreerdp.a; path = ../../libfreerdp/libfreerdp.a; sourceTree = "<group>"; };
|
|
||||||
C495EFAD16B913980041304E /* libwinpr.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwinpr.a; path = ../../winpr/libwinpr/libwinpr.a; sourceTree = "<group>"; };
|
|
||||||
C495EFBA16B92E170041304E /* about_page */ = {isa = PBXFileReference; lastKnownFileType = folder; name = about_page; path = Resources/about_page; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFBC16B92E270041304E /* help_page */ = {isa = PBXFileReference; lastKnownFileType = folder; name = help_page; path = Resources/help_page; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFC116B92EA20041304E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Resources/en.lproj/Localizable.strings; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFC816B933220041304E /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFC916B933230041304E /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495EFCA16B933230041304E /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
|
|
||||||
C495F01516B937F80041304E /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = @FREERDP_IOS_EXTERNAL_SSL_PATH@/lib/libcrypto.a; sourceTree = "<group>"; };
|
|
||||||
C495F01616B937F90041304E /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = @FREERDP_IOS_EXTERNAL_SSL_PATH@/lib/libssl.a; sourceTree = "<group>"; };
|
|
||||||
C495F01916B938210041304E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
|
||||||
C495F01D16B938CA0041304E /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
|
||||||
C4B6A8811701979900AA836E /* libfreerdp-client-combined.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libfreerdp-client-combined.a"; path = "../common/libfreerdp-client-combined.a"; sourceTree = "<group>"; };
|
|
||||||
C4C31C6E16BAD1890087BB12 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "Resources/Default-568h@2x.png"; sourceTree = SOURCE_ROOT; };
|
|
||||||
/* End PBXFileReference section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
|
||||||
C495EE2C16B8372D0041304E /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
C495F01716B937F90041304E /* libcrypto.a in Frameworks */,
|
|
||||||
C495F01816B937F90041304E /* libssl.a in Frameworks */,
|
|
||||||
C495EFAE16B913980041304E /* libwinpr.a in Frameworks */,
|
|
||||||
C495EFAB16B912C40041304E /* libfreerdp.a in Frameworks */,
|
|
||||||
C495EE3416B8372D0041304E /* UIKit.framework in Frameworks */,
|
|
||||||
C495EE3616B8372D0041304E /* Foundation.framework in Frameworks */,
|
|
||||||
C495EE3816B8372D0041304E /* CoreGraphics.framework in Frameworks */,
|
|
||||||
C495F01A16B938210041304E /* Security.framework in Frameworks */,
|
|
||||||
C495F01E16B938CB0041304E /* SystemConfiguration.framework in Frameworks */,
|
|
||||||
C4B6A8821701979900AA836E /* libfreerdp-client-combined.a in Frameworks */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
|
||||||
C495EE2416B8372D0041304E = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EE3916B8372D0041304E /* iFreeRDP */,
|
|
||||||
C495EE3216B8372D0041304E /* Frameworks */,
|
|
||||||
C495EE3016B8372D0041304E /* Products */,
|
|
||||||
);
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EE3016B8372D0041304E /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EE2F16B8372D0041304E /* iFreeRDP.app */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EE3216B8372D0041304E /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C4B6A8811701979900AA836E /* libfreerdp-client-combined.a */,
|
|
||||||
C495EFAA16B912C40041304E /* libfreerdp.a */,
|
|
||||||
C495EFAD16B913980041304E /* libwinpr.a */,
|
|
||||||
C495F01516B937F80041304E /* libcrypto.a */,
|
|
||||||
C495F01616B937F90041304E /* libssl.a */,
|
|
||||||
C495F01D16B938CA0041304E /* SystemConfiguration.framework */,
|
|
||||||
C495F01916B938210041304E /* Security.framework */,
|
|
||||||
C495EE3316B8372D0041304E /* UIKit.framework */,
|
|
||||||
C495EE3516B8372D0041304E /* Foundation.framework */,
|
|
||||||
C495EE3716B8372D0041304E /* CoreGraphics.framework */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EE3916B8372D0041304E /* iFreeRDP */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EE3A16B8372D0041304E /* Cocoa and Foundation Additions */,
|
|
||||||
C495EE7A16B910CB0041304E /* Controllers */,
|
|
||||||
C495EEAB16B910E90041304E /* FreeRDP */,
|
|
||||||
C495EEB516B910FA0041304E /* Misc */,
|
|
||||||
C495EEC016B9111E0041304E /* Models */,
|
|
||||||
C495EED316B9112E0041304E /* Resources */,
|
|
||||||
C495EF8116B911940041304E /* Views */,
|
|
||||||
C495EFC816B933220041304E /* AppDelegate.h */,
|
|
||||||
C495EFC916B933230041304E /* AppDelegate.m */,
|
|
||||||
C495EFCA16B933230041304E /* main.m */,
|
|
||||||
C495EE6F16B9107D0041304E /* Defaults.plist */,
|
|
||||||
C495EE6D16B910510041304E /* iFreeRDP.plist */,
|
|
||||||
C495EE4116B8372D0041304E /* iFreeRDP-Prefix.pch */,
|
|
||||||
);
|
|
||||||
path = iFreeRDP;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EE3A16B8372D0041304E /* Cocoa and Foundation Additions */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EE7116B910BC0041304E /* OrderedDictionary.h */,
|
|
||||||
C495EE7216B910BC0041304E /* OrderedDictionary.m */,
|
|
||||||
C495EE7316B910BC0041304E /* Toast+UIView.h */,
|
|
||||||
C495EE7416B910BC0041304E /* Toast+UIView.m */,
|
|
||||||
C495EE7516B910BC0041304E /* TSXAdditions.h */,
|
|
||||||
C495EE7616B910BC0041304E /* TSXAdditions.m */,
|
|
||||||
);
|
|
||||||
name = "Cocoa and Foundation Additions";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EE7A16B910CB0041304E /* Controllers */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EE7B16B910DE0041304E /* AboutController.h */,
|
|
||||||
C495EE7C16B910DE0041304E /* AboutController.m */,
|
|
||||||
C495EE7D16B910DE0041304E /* AdvancedBookmarkEditorController.h */,
|
|
||||||
C495EE7E16B910DE0041304E /* AdvancedBookmarkEditorController.m */,
|
|
||||||
C495EE7F16B910DE0041304E /* AppSettingsController.h */,
|
|
||||||
C495EE8016B910DE0041304E /* AppSettingsController.m */,
|
|
||||||
C495EE8116B910DE0041304E /* BookmarkEditorController.h */,
|
|
||||||
C495EE8216B910DE0041304E /* BookmarkEditorController.m */,
|
|
||||||
C495EE8316B910DE0041304E /* BookmarkListController.h */,
|
|
||||||
C495EE8416B910DE0041304E /* BookmarkListController.m */,
|
|
||||||
C495EE8516B910DE0041304E /* CredentialsEditorController.h */,
|
|
||||||
C495EE8616B910DE0041304E /* CredentialsEditorController.m */,
|
|
||||||
C495EE8716B910DE0041304E /* CredentialsInputController.h */,
|
|
||||||
C495EE8816B910DE0041304E /* CredentialsInputController.m */,
|
|
||||||
C495EE8916B910DE0041304E /* EditorBaseController.h */,
|
|
||||||
C495EE8A16B910DE0041304E /* EditorBaseController.m */,
|
|
||||||
C495EE8B16B910DE0041304E /* EditorSelectionController.h */,
|
|
||||||
C495EE8C16B910DE0041304E /* EditorSelectionController.m */,
|
|
||||||
C495EE8D16B910DE0041304E /* EncryptionController.h */,
|
|
||||||
C495EE8E16B910DE0041304E /* EncryptionController.m */,
|
|
||||||
C495EE8F16B910DE0041304E /* HelpController.h */,
|
|
||||||
C495EE9016B910DE0041304E /* HelpController.m */,
|
|
||||||
C495EE9116B910DE0041304E /* MainTabBarController.h */,
|
|
||||||
C495EE9216B910DE0041304E /* MainTabBarController.m */,
|
|
||||||
C495EE9316B910DE0041304E /* PerformanceEditorController.h */,
|
|
||||||
C495EE9416B910DE0041304E /* PerformanceEditorController.m */,
|
|
||||||
C495EE9516B910DE0041304E /* RDPSessionViewController.h */,
|
|
||||||
C495EE9616B910DE0041304E /* RDPSessionViewController.m */,
|
|
||||||
C495EE9716B910DE0041304E /* ScreenSelectionController.h */,
|
|
||||||
C495EE9816B910DE0041304E /* ScreenSelectionController.m */,
|
|
||||||
C495EE9916B910DE0041304E /* VerifyCertificateController.h */,
|
|
||||||
C495EE9A16B910DE0041304E /* VerifyCertificateController.m */,
|
|
||||||
);
|
|
||||||
name = Controllers;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EEAB16B910E90041304E /* FreeRDP */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EEAC16B910F60041304E /* ios_freerdp_events.h */,
|
|
||||||
C495EEAD16B910F60041304E /* ios_freerdp_events.m */,
|
|
||||||
C495EEAE16B910F60041304E /* ios_freerdp_ui.h */,
|
|
||||||
C495EEAF16B910F60041304E /* ios_freerdp_ui.m */,
|
|
||||||
C495EEB016B910F60041304E /* ios_freerdp.h */,
|
|
||||||
C495EEB116B910F60041304E /* ios_freerdp.m */,
|
|
||||||
);
|
|
||||||
name = FreeRDP;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EEB516B910FA0041304E /* Misc */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EEB616B9111A0041304E /* Reachability.h */,
|
|
||||||
C495EEB716B9111A0041304E /* Reachability.m */,
|
|
||||||
C495EEB816B9111A0041304E /* SFHFKeychainUtils.h */,
|
|
||||||
C495EEB916B9111A0041304E /* SFHFKeychainUtils.m */,
|
|
||||||
C495EEBA16B9111A0041304E /* TSXTypes.h */,
|
|
||||||
C495EEBB16B9111A0041304E /* Utils.h */,
|
|
||||||
C495EEBC16B9111A0041304E /* Utils.m */,
|
|
||||||
);
|
|
||||||
name = Misc;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EEC016B9111E0041304E /* Models */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EEC116B911290041304E /* Bookmark.h */,
|
|
||||||
C495EEC216B911290041304E /* Bookmark.m */,
|
|
||||||
C495EEC316B911290041304E /* ConnectionParams.h */,
|
|
||||||
C495EEC416B911290041304E /* ConnectionParams.m */,
|
|
||||||
C495EEC516B911290041304E /* Encryptor.h */,
|
|
||||||
C495EEC616B911290041304E /* Encryptor.m */,
|
|
||||||
C495EEC716B911290041304E /* GlobalDefaults.h */,
|
|
||||||
C495EEC816B911290041304E /* GlobalDefaults.m */,
|
|
||||||
C495EEC916B911290041304E /* RDPKeyboard.h */,
|
|
||||||
C495EECA16B911290041304E /* RDPKeyboard.m */,
|
|
||||||
C495EECB16B911290041304E /* RDPSession.h */,
|
|
||||||
C495EECC16B911290041304E /* RDPSession.m */,
|
|
||||||
);
|
|
||||||
name = Models;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EED316B9112E0041304E /* Resources */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C4C31C6E16BAD1890087BB12 /* Default-568h@2x.png */,
|
|
||||||
C495EFC016B92EA20041304E /* Localizable.strings */,
|
|
||||||
C495EFBC16B92E270041304E /* help_page */,
|
|
||||||
C495EFBA16B92E170041304E /* about_page */,
|
|
||||||
C495EEDC16B911450041304E /* cancel_button_background.png */,
|
|
||||||
C495EEDE16B911450041304E /* Default-Landscape@2x~ipad.png */,
|
|
||||||
C495EEDF16B911450041304E /* Default-Landscape~ipad.png */,
|
|
||||||
C495EEE016B911450041304E /* Default-Portrait@2x~ipad.png */,
|
|
||||||
C495EEE116B911450041304E /* Default-Portrait~ipad.png */,
|
|
||||||
C495EEE216B911450041304E /* Default.png */,
|
|
||||||
C495EEE316B911450041304E /* Default@2x.png */,
|
|
||||||
C495EEFE16B911450041304E /* icon_accessory_star_off.png */,
|
|
||||||
C495EEFF16B911450041304E /* icon_accessory_star_on.png */,
|
|
||||||
C495EF0016B911450041304E /* icon_key_arrow_down.png */,
|
|
||||||
C495EF0116B911450041304E /* icon_key_arrow_left.png */,
|
|
||||||
C495EF0216B911450041304E /* icon_key_arrow_right.png */,
|
|
||||||
C495EF0316B911450041304E /* icon_key_arrow_up.png */,
|
|
||||||
C495EF0416B911450041304E /* icon_key_arrows.png */,
|
|
||||||
C495EF0516B911450041304E /* icon_key_backspace.png */,
|
|
||||||
C495EF0616B911450041304E /* icon_key_menu.png */,
|
|
||||||
C495EF0716B911450041304E /* icon_key_return.png */,
|
|
||||||
C495EF0816B911450041304E /* icon_key_win.png */,
|
|
||||||
C495EF0916B911450041304E /* Icon-72.png */,
|
|
||||||
C495EF0A16B911450041304E /* Icon-72@2x.png */,
|
|
||||||
C495EF0B16B911450041304E /* Icon.png */,
|
|
||||||
C495EF0C16B911450041304E /* Icon@2x.png */,
|
|
||||||
C495EF0D16B911450041304E /* keyboard_button_background.png */,
|
|
||||||
C495EF1216B911450041304E /* tabbar_icon_about.png */,
|
|
||||||
C495EF1316B911450041304E /* tabbar_icon_help.png */,
|
|
||||||
C495EF1416B911450041304E /* tabbar_icon_settings.png */,
|
|
||||||
C495EF1516B911450041304E /* toolbar_icon_disconnect.png */,
|
|
||||||
C495EF1616B911450041304E /* toolbar_icon_extkeyboad.png */,
|
|
||||||
C495EF1716B911450041304E /* toolbar_icon_home.png */,
|
|
||||||
C495EF1816B911450041304E /* toolbar_icon_keyboard.png */,
|
|
||||||
C495EF1916B911450041304E /* toolbar_icon_touchpointer.png */,
|
|
||||||
C495EF1A16B911450041304E /* toolbar_icon_win.png */,
|
|
||||||
C495EF1B16B911450041304E /* touch_pointer_active.png */,
|
|
||||||
C495EF1C16B911450041304E /* touch_pointer_default.png */,
|
|
||||||
C495EF1D16B911450041304E /* touch_pointer_extkeyboard.png */,
|
|
||||||
C495EF1E16B911450041304E /* touch_pointer_keyboard.png */,
|
|
||||||
C495EF1F16B911450041304E /* touch_pointer_lclick.png */,
|
|
||||||
C495EF2016B911450041304E /* touch_pointer_rclick.png */,
|
|
||||||
C495EF2116B911450041304E /* touch_pointer_reset.png */,
|
|
||||||
C495EF2216B911450041304E /* touch_pointer_scroll.png */,
|
|
||||||
);
|
|
||||||
name = Resources;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
C495EF8116B911940041304E /* Views */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
C495EEDA16B911450041304E /* BookmarkListView.xib */,
|
|
||||||
C495EEDB16B911450041304E /* BookmarkTableViewCell.xib */,
|
|
||||||
C495EEDD16B911450041304E /* CredentialsInputView.xib */,
|
|
||||||
C495EEE416B911450041304E /* EditButtonTableViewCell.xib */,
|
|
||||||
C495EEE516B911450041304E /* EditFlagTableViewCell.xib */,
|
|
||||||
C495EEE616B911450041304E /* EditSecretTextTableViewCell.xib */,
|
|
||||||
C495EEE716B911450041304E /* EditSelectionTableViewCell.xib */,
|
|
||||||
C495EEE816B911450041304E /* EditSubEditTableViewCell.xib */,
|
|
||||||
C495EEE916B911450041304E /* EditTextTableViewCell.xib */,
|
|
||||||
C495EF0E16B911450041304E /* MainWindow.xib */,
|
|
||||||
C495EF0F16B911450041304E /* RDPConnectingView.xib */,
|
|
||||||
C495EF1016B911450041304E /* RDPSessionView.xib */,
|
|
||||||
C495EF1116B911450041304E /* SessionTableViewCell.xib */,
|
|
||||||
C495EF2316B911450041304E /* VerifyCertificateView.xib */,
|
|
||||||
C495EF8216B911AB0041304E /* AdvancedKeyboardView.h */,
|
|
||||||
C495EF8316B911AB0041304E /* AdvancedKeyboardView.m */,
|
|
||||||
C495EF8416B911AB0041304E /* BookmarkTableCell.h */,
|
|
||||||
C495EF8516B911AB0041304E /* BookmarkTableCell.m */,
|
|
||||||
C495EF8616B911AB0041304E /* EditButtonTableViewCell.h */,
|
|
||||||
C495EF8716B911AB0041304E /* EditButtonTableViewCell.m */,
|
|
||||||
C495EF8816B911AB0041304E /* EditFlagTableViewCell.h */,
|
|
||||||
C495EF8916B911AB0041304E /* EditFlagTableViewCell.m */,
|
|
||||||
C495EF8A16B911AB0041304E /* EditSecretTextTableViewCell.h */,
|
|
||||||
C495EF8B16B911AB0041304E /* EditSecretTextTableViewCell.m */,
|
|
||||||
C495EF8C16B911AB0041304E /* EditSelectionTableViewCell.h */,
|
|
||||||
C495EF8D16B911AB0041304E /* EditSelectionTableViewCell.m */,
|
|
||||||
C495EF8E16B911AB0041304E /* EditSubEditTableViewCell.h */,
|
|
||||||
C495EF8F16B911AB0041304E /* EditSubEditTableViewCell.m */,
|
|
||||||
C495EF9016B911AB0041304E /* EditTextTableViewCell.h */,
|
|
||||||
C495EF9116B911AB0041304E /* EditTextTableViewCell.m */,
|
|
||||||
C495EF9216B911AB0041304E /* RDPSessionView.h */,
|
|
||||||
C495EF9316B911AB0041304E /* RDPSessionView.m */,
|
|
||||||
C495EF9416B911AB0041304E /* SessionTableCell.h */,
|
|
||||||
C495EF9516B911AB0041304E /* SessionTableCell.m */,
|
|
||||||
C495EF9616B911AB0041304E /* TouchPointerView.h */,
|
|
||||||
C495EF9716B911AB0041304E /* TouchPointerView.m */,
|
|
||||||
);
|
|
||||||
name = Views;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
|
||||||
C495EE2E16B8372D0041304E /* iFreeRDP */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = C495EE6216B8372D0041304E /* Build configuration list for PBXNativeTarget "iFreeRDP" */;
|
|
||||||
buildPhases = (
|
|
||||||
C495EE2B16B8372D0041304E /* Sources */,
|
|
||||||
C495EE2C16B8372D0041304E /* Frameworks */,
|
|
||||||
C495EE2D16B8372D0041304E /* Resources */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
);
|
|
||||||
name = iFreeRDP;
|
|
||||||
productName = iFreeRDP;
|
|
||||||
productReference = C495EE2F16B8372D0041304E /* iFreeRDP.app */;
|
|
||||||
productType = "com.apple.product-type.application";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
|
||||||
C495EE2616B8372D0041304E /* Project object */ = {
|
|
||||||
isa = PBXProject;
|
|
||||||
attributes = {
|
|
||||||
LastUpgradeCheck = 0450;
|
|
||||||
ORGANIZATIONNAME = freerdp;
|
|
||||||
};
|
|
||||||
buildConfigurationList = C495EE2916B8372D0041304E /* Build configuration list for PBXProject "iFreeRDP" */;
|
|
||||||
compatibilityVersion = "Xcode 3.2";
|
|
||||||
developmentRegion = English;
|
|
||||||
hasScannedForEncodings = 0;
|
|
||||||
knownRegions = (
|
|
||||||
en,
|
|
||||||
);
|
|
||||||
mainGroup = C495EE2416B8372D0041304E;
|
|
||||||
productRefGroup = C495EE3016B8372D0041304E /* Products */;
|
|
||||||
projectDirPath = "";
|
|
||||||
projectRoot = "";
|
|
||||||
targets = (
|
|
||||||
C495EE2E16B8372D0041304E /* iFreeRDP */,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
/* End PBXProject section */
|
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
|
||||||
C495EE2D16B8372D0041304E /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
C495EE7016B9107D0041304E /* Defaults.plist in Resources */,
|
|
||||||
C495EF3216B911450041304E /* BookmarkListView.xib in Resources */,
|
|
||||||
C495EF3316B911450041304E /* BookmarkTableViewCell.xib in Resources */,
|
|
||||||
C495EF3416B911450041304E /* cancel_button_background.png in Resources */,
|
|
||||||
C495EF3516B911450041304E /* CredentialsInputView.xib in Resources */,
|
|
||||||
C495EF3616B911450041304E /* Default-Landscape@2x~ipad.png in Resources */,
|
|
||||||
C495EF3716B911450041304E /* Default-Landscape~ipad.png in Resources */,
|
|
||||||
C495EF3816B911450041304E /* Default-Portrait@2x~ipad.png in Resources */,
|
|
||||||
C495EF3916B911450041304E /* Default-Portrait~ipad.png in Resources */,
|
|
||||||
C495EF3A16B911450041304E /* Default.png in Resources */,
|
|
||||||
C495EF3B16B911450041304E /* Default@2x.png in Resources */,
|
|
||||||
C495EF3C16B911450041304E /* EditButtonTableViewCell.xib in Resources */,
|
|
||||||
C495EF3D16B911450041304E /* EditFlagTableViewCell.xib in Resources */,
|
|
||||||
C495EF3E16B911450041304E /* EditSecretTextTableViewCell.xib in Resources */,
|
|
||||||
C495EF3F16B911450041304E /* EditSelectionTableViewCell.xib in Resources */,
|
|
||||||
C495EF4016B911450041304E /* EditSubEditTableViewCell.xib in Resources */,
|
|
||||||
C495EF4116B911450041304E /* EditTextTableViewCell.xib in Resources */,
|
|
||||||
C495EF5316B911450041304E /* icon_accessory_star_off.png in Resources */,
|
|
||||||
C495EF5416B911450041304E /* icon_accessory_star_on.png in Resources */,
|
|
||||||
C495EF5516B911450041304E /* icon_key_arrow_down.png in Resources */,
|
|
||||||
C495EF5616B911450041304E /* icon_key_arrow_left.png in Resources */,
|
|
||||||
C495EF5716B911450041304E /* icon_key_arrow_right.png in Resources */,
|
|
||||||
C495EF5816B911450041304E /* icon_key_arrow_up.png in Resources */,
|
|
||||||
C495EF5916B911450041304E /* icon_key_arrows.png in Resources */,
|
|
||||||
C495EF5A16B911450041304E /* icon_key_backspace.png in Resources */,
|
|
||||||
C495EF5B16B911450041304E /* icon_key_menu.png in Resources */,
|
|
||||||
C495EF5C16B911450041304E /* icon_key_return.png in Resources */,
|
|
||||||
C495EF5D16B911450041304E /* icon_key_win.png in Resources */,
|
|
||||||
C495EF5E16B911450041304E /* Icon-72.png in Resources */,
|
|
||||||
C495EF5F16B911450041304E /* Icon-72@2x.png in Resources */,
|
|
||||||
C495EF6016B911450041304E /* Icon.png in Resources */,
|
|
||||||
C495EF6116B911450041304E /* Icon@2x.png in Resources */,
|
|
||||||
C495EF6216B911450041304E /* keyboard_button_background.png in Resources */,
|
|
||||||
C495EF6316B911450041304E /* MainWindow.xib in Resources */,
|
|
||||||
C495EF6416B911450041304E /* RDPConnectingView.xib in Resources */,
|
|
||||||
C495EF6516B911450041304E /* RDPSessionView.xib in Resources */,
|
|
||||||
C495EF6616B911450041304E /* SessionTableViewCell.xib in Resources */,
|
|
||||||
C495EF6716B911450041304E /* tabbar_icon_about.png in Resources */,
|
|
||||||
C495EF6816B911450041304E /* tabbar_icon_help.png in Resources */,
|
|
||||||
C495EF6916B911450041304E /* tabbar_icon_settings.png in Resources */,
|
|
||||||
C495EF6A16B911450041304E /* toolbar_icon_disconnect.png in Resources */,
|
|
||||||
C495EF6B16B911450041304E /* toolbar_icon_extkeyboad.png in Resources */,
|
|
||||||
C495EF6C16B911450041304E /* toolbar_icon_home.png in Resources */,
|
|
||||||
C495EF6D16B911450041304E /* toolbar_icon_keyboard.png in Resources */,
|
|
||||||
C495EF6E16B911450041304E /* toolbar_icon_touchpointer.png in Resources */,
|
|
||||||
C495EF6F16B911450041304E /* toolbar_icon_win.png in Resources */,
|
|
||||||
C495EF7016B911450041304E /* touch_pointer_active.png in Resources */,
|
|
||||||
C495EF7116B911450041304E /* touch_pointer_default.png in Resources */,
|
|
||||||
C495EF7216B911450041304E /* touch_pointer_extkeyboard.png in Resources */,
|
|
||||||
C495EF7316B911450041304E /* touch_pointer_keyboard.png in Resources */,
|
|
||||||
C495EF7416B911450041304E /* touch_pointer_lclick.png in Resources */,
|
|
||||||
C495EF7516B911450041304E /* touch_pointer_rclick.png in Resources */,
|
|
||||||
C495EF7616B911450041304E /* touch_pointer_reset.png in Resources */,
|
|
||||||
C495EF7716B911450041304E /* touch_pointer_scroll.png in Resources */,
|
|
||||||
C495EF7816B911450041304E /* VerifyCertificateView.xib in Resources */,
|
|
||||||
C495EFBB16B92E170041304E /* about_page in Resources */,
|
|
||||||
C495EFBD16B92E270041304E /* help_page in Resources */,
|
|
||||||
C495EFC216B92EA20041304E /* Localizable.strings in Resources */,
|
|
||||||
C4C31C6F16BAD1890087BB12 /* Default-568h@2x.png in Resources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXResourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
|
||||||
C495EE2B16B8372D0041304E /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
C495EE7716B910BC0041304E /* OrderedDictionary.m in Sources */,
|
|
||||||
C495EE7816B910BC0041304E /* Toast+UIView.m in Sources */,
|
|
||||||
C495EE7916B910BC0041304E /* TSXAdditions.m in Sources */,
|
|
||||||
C495EE9B16B910DE0041304E /* AboutController.m in Sources */,
|
|
||||||
C495EE9C16B910DE0041304E /* AdvancedBookmarkEditorController.m in Sources */,
|
|
||||||
C495EE9D16B910DE0041304E /* AppSettingsController.m in Sources */,
|
|
||||||
C495EE9E16B910DE0041304E /* BookmarkEditorController.m in Sources */,
|
|
||||||
C495EE9F16B910DE0041304E /* BookmarkListController.m in Sources */,
|
|
||||||
C495EEA016B910DE0041304E /* CredentialsEditorController.m in Sources */,
|
|
||||||
C495EEA116B910DE0041304E /* CredentialsInputController.m in Sources */,
|
|
||||||
C495EEA216B910DE0041304E /* EditorBaseController.m in Sources */,
|
|
||||||
C495EEA316B910DE0041304E /* EditorSelectionController.m in Sources */,
|
|
||||||
C495EEA416B910DE0041304E /* EncryptionController.m in Sources */,
|
|
||||||
C495EEA516B910DE0041304E /* HelpController.m in Sources */,
|
|
||||||
C495EEA616B910DE0041304E /* MainTabBarController.m in Sources */,
|
|
||||||
C495EEA716B910DE0041304E /* PerformanceEditorController.m in Sources */,
|
|
||||||
C495EEA816B910DE0041304E /* RDPSessionViewController.m in Sources */,
|
|
||||||
C495EEA916B910DE0041304E /* ScreenSelectionController.m in Sources */,
|
|
||||||
C495EEAA16B910DE0041304E /* VerifyCertificateController.m in Sources */,
|
|
||||||
C495EEB216B910F60041304E /* ios_freerdp_events.m in Sources */,
|
|
||||||
C495EEB316B910F60041304E /* ios_freerdp_ui.m in Sources */,
|
|
||||||
C495EEB416B910F60041304E /* ios_freerdp.m in Sources */,
|
|
||||||
C495EEBD16B9111A0041304E /* Reachability.m in Sources */,
|
|
||||||
C495EEBE16B9111A0041304E /* SFHFKeychainUtils.m in Sources */,
|
|
||||||
C495EEBF16B9111A0041304E /* Utils.m in Sources */,
|
|
||||||
C495EECD16B911290041304E /* Bookmark.m in Sources */,
|
|
||||||
C495EECE16B911290041304E /* ConnectionParams.m in Sources */,
|
|
||||||
C495EECF16B911290041304E /* Encryptor.m in Sources */,
|
|
||||||
C495EED016B911290041304E /* GlobalDefaults.m in Sources */,
|
|
||||||
C495EED116B911290041304E /* RDPKeyboard.m in Sources */,
|
|
||||||
C495EED216B911290041304E /* RDPSession.m in Sources */,
|
|
||||||
C495EF9A16B911AC0041304E /* AdvancedKeyboardView.m in Sources */,
|
|
||||||
C495EF9B16B911AC0041304E /* BookmarkTableCell.m in Sources */,
|
|
||||||
C495EF9C16B911AC0041304E /* EditButtonTableViewCell.m in Sources */,
|
|
||||||
C495EF9D16B911AC0041304E /* EditFlagTableViewCell.m in Sources */,
|
|
||||||
C495EF9E16B911AC0041304E /* EditSecretTextTableViewCell.m in Sources */,
|
|
||||||
C495EF9F16B911AC0041304E /* EditSelectionTableViewCell.m in Sources */,
|
|
||||||
C495EFA016B911AC0041304E /* EditSubEditTableViewCell.m in Sources */,
|
|
||||||
C495EFA116B911AC0041304E /* EditTextTableViewCell.m in Sources */,
|
|
||||||
C495EFA216B911AC0041304E /* RDPSessionView.m in Sources */,
|
|
||||||
C495EFA316B911AC0041304E /* SessionTableCell.m in Sources */,
|
|
||||||
C495EFA416B911AC0041304E /* TouchPointerView.m in Sources */,
|
|
||||||
C495EFCB16B933230041304E /* AppDelegate.m in Sources */,
|
|
||||||
C495EFCC16B933230041304E /* main.m in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
|
||||||
C495EFC016B92EA20041304E /* Localizable.strings */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
C495EFC116B92EA20041304E /* en */,
|
|
||||||
);
|
|
||||||
name = Localizable.strings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXVariantGroup section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
|
||||||
C495EE6016B8372D0041304E /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_OBJC_ARC = NO;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
|
||||||
PROVISIONING_PROFILE = "";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
C495EE6116B8372D0041304E /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
|
||||||
CLANG_ENABLE_OBJC_ARC = NO;
|
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
||||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
|
||||||
COPY_PHASE_STRIP = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
|
||||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
|
||||||
PROVISIONING_PROFILE = "";
|
|
||||||
SDKROOT = iphoneos;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
VALIDATE_PRODUCT = YES;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
C495EE6316B8372D0041304E /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = "$(INHERIT)";
|
|
||||||
DEAD_CODE_STRIPPING = "$(INHERIT)";
|
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
|
||||||
GCC_PREFIX_HEADER = "$(SRCROOT)/iFreeRDP-Prefix.pch";
|
|
||||||
HEADER_SEARCH_PATHS = (
|
|
||||||
"\"$(SRCROOT)/../../include\"",
|
|
||||||
"\"$(SRCROOT)/../../winpr/include\"",
|
|
||||||
"\"$(SRCROOT)/../../\"",
|
|
||||||
"\"@FREERDP_IOS_EXTERNAL_SSL_PATH@/include\"",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/iFreeRDP.plist";
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"\"$(SRCROOT)/../../libfreerdp\"",
|
|
||||||
"\"$(SRCROOT)/../../winpr/libwinpr\"",
|
|
||||||
"\"@FREERDP_IOS_EXTERNAL_SSL_PATH@/lib\"",
|
|
||||||
"\"$(SRCROOT)/../common\"",
|
|
||||||
);
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
WRAPPER_EXTENSION = app;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
C495EE6416B8372D0041304E /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
CLANG_ENABLE_OBJC_ARC = "$(INHERIT)";
|
|
||||||
DEAD_CODE_STRIPPING = "$(INHERIT)";
|
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
|
||||||
GCC_PREFIX_HEADER = "$(SRCROOT)/iFreeRDP-Prefix.pch";
|
|
||||||
HEADER_SEARCH_PATHS = (
|
|
||||||
"\"$(SRCROOT)/../../include\"",
|
|
||||||
"\"$(SRCROOT)/../../winpr/include\"",
|
|
||||||
"\"$(SRCROOT)/../../\"",
|
|
||||||
"\"@FREERDP_IOS_EXTERNAL_SSL_PATH@/include\"",
|
|
||||||
);
|
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/iFreeRDP.plist";
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
|
|
||||||
LIBRARY_SEARCH_PATHS = (
|
|
||||||
"\"$(SRCROOT)/../../libfreerdp\"",
|
|
||||||
"\"$(SRCROOT)/../../winpr/libwinpr\"",
|
|
||||||
"\"@FREERDP_IOS_EXTERNAL_SSL_PATH@/lib\"",
|
|
||||||
"\"$(SRCROOT)/../common\"",
|
|
||||||
);
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
WRAPPER_EXTENSION = app;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
|
||||||
C495EE2916B8372D0041304E /* Build configuration list for PBXProject "iFreeRDP" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
C495EE6016B8372D0041304E /* Debug */,
|
|
||||||
C495EE6116B8372D0041304E /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
C495EE6216B8372D0041304E /* Build configuration list for PBXNativeTarget "iFreeRDP" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
C495EE6316B8372D0041304E /* Debug */,
|
|
||||||
C495EE6416B8372D0041304E /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
|
||||||
};
|
|
||||||
rootObject = C495EE2616B8372D0041304E /* Project object */;
|
|
||||||
}
|
|
||||||
@@ -52,7 +52,7 @@ option(BUILD_TESTING "Build unit tests" OFF)
|
|||||||
option(WITH_SAMPLE "Build sample code" OFF)
|
option(WITH_SAMPLE "Build sample code" OFF)
|
||||||
|
|
||||||
if(${CMAKE_VERSION} VERSION_GREATER 2.8.8)
|
if(${CMAKE_VERSION} VERSION_GREATER 2.8.8)
|
||||||
if(ANDROID OR IOS)
|
if(ANDROID)
|
||||||
option(MONOLITHIC_BUILD "Use monolithic build" ON)
|
option(MONOLITHIC_BUILD "Use monolithic build" ON)
|
||||||
else()
|
else()
|
||||||
option(MONOLITHIC_BUILD "Use monolithic build" OFF)
|
option(MONOLITHIC_BUILD "Use monolithic build" OFF)
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
option(IOS_BUILD_OBJC "Automatically build iOS objective-c code - build type depends on CMAKE_BUILD_TYPE" ON)
|
|
||||||
option(IOS_BUILD_OBJC_DEBUG "Create an iOS debug package" ON)
|
|
||||||
if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
|
if (NOT FREERDP_IOS_EXTERNAL_SSL_PATH)
|
||||||
set(FREERDP_IOS_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
|
set(FREERDP_IOS_EXTERNAL_SSL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/openssl")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -1,20 +1,12 @@
|
|||||||
|
|
||||||
include(FindPkgConfig)
|
include(FindPkgConfig)
|
||||||
|
|
||||||
pkg_check_modules(PC_GSTREAMER_0_10 gstreamer-0.10)
|
pkg_check_modules(PC_GSTREAMER_0_10 gstreamer-0.10)
|
||||||
pkg_check_modules(PC_GSTREAMER_PLUGINS_BASE_0_10 gstreamer-plugins-base-0.10)
|
pkg_check_modules(PC_GSTREAMER_PLUGINS_BASE_0_10 gstreamer-plugins-base-0.10)
|
||||||
|
|
||||||
if(PC_GSTREAMER_0_10_FOUND AND PC_GSTREAMER_PLUGINS_BASE_0_10_FOUND)
|
if(PC_GSTREAMER_0_10_FOUND AND PC_GSTREAMER_PLUGINS_BASE_0_10_FOUND)
|
||||||
set(GSTREAMER_FOUND TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GSTREAMER DEFAULT_MSG GSTREAMER_FOUND)
|
|
||||||
|
|
||||||
if(GSTREAMER_FOUND)
|
|
||||||
set(GSTREAMER_INCLUDE_DIRS ${PC_GSTREAMER_0_10_INCLUDE_DIRS} ${PC_GSTREAMER_PLUGINS_BASE_0_10_INCLUDE_DIRS})
|
set(GSTREAMER_INCLUDE_DIRS ${PC_GSTREAMER_0_10_INCLUDE_DIRS} ${PC_GSTREAMER_PLUGINS_BASE_0_10_INCLUDE_DIRS})
|
||||||
set(GSTREAMER_LIBRARIES ${PC_GSTREAMER_0_10_LIBRARIES} ${PC_GSTREAMER_PLUGINS_BASE_0_10_LIBRARIES})
|
set(GSTREAMER_LIBRARIES ${PC_GSTREAMER_0_10_LIBRARIES} ${PC_GSTREAMER_PLUGINS_BASE_0_10_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
mark_as_advanced(GSTREAMER_FOUND GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES)
|
include(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GSTREAMER DEFAULT_MSG GSTREAMER_LIBRARIES GSTREAMER_INCLUDE_DIRS)
|
||||||
|
|||||||
@@ -2,15 +2,7 @@ Overview
|
|||||||
========
|
========
|
||||||
|
|
||||||
The FreeRDP iOS port allows users to enjoy FreeRDP features on Apple iOS devices.
|
The FreeRDP iOS port allows users to enjoy FreeRDP features on Apple iOS devices.
|
||||||
The application was written to be compatible with devices running iOS 3.2 or higher.
|
The application was written to be compatible with devices running iOS 4.3 or higher.
|
||||||
Please note that Apple dropped armv6 support in their latest Xcode releases.
|
|
||||||
If you want to compile for armv6 devices you will have to use an older Xcode version and build the OpenSSL libraries for armv6 as well.
|
|
||||||
|
|
||||||
For building the GUI part there are two possibilities:
|
|
||||||
* integrated build - have cmake to operate Xcode and build everything
|
|
||||||
* manual build - build FreeRDP libraries and invoke xcodebuild or Xcode manually for the frontend
|
|
||||||
|
|
||||||
Manual builds should be used for development.
|
|
||||||
|
|
||||||
|
|
||||||
Build requirements
|
Build requirements
|
||||||
@@ -20,7 +12,6 @@ The following prerequisites are required in order to build the iOS port:
|
|||||||
|
|
||||||
- cmake version >= 2.8.9
|
- cmake version >= 2.8.9
|
||||||
- latest Xcode installed (>= 4.6)
|
- latest Xcode installed (>= 4.6)
|
||||||
- installed "Command Line Tools" component
|
|
||||||
- installed Provisioning Profile and iOS Developer Certificate for code signing
|
- installed Provisioning Profile and iOS Developer Certificate for code signing
|
||||||
- pre-build static OpenSSL libraries (see below)
|
- pre-build static OpenSSL libraries (see below)
|
||||||
|
|
||||||
@@ -43,35 +34,23 @@ If you build OpenSSL youself you need to set FREERDP_IOS_EXTERNAL_SSL_PATH when
|
|||||||
Building
|
Building
|
||||||
========
|
========
|
||||||
|
|
||||||
Integrated build
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Run the following commands in the top level FreeRDP directory:
|
Run the following commands in the top level FreeRDP directory:
|
||||||
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/iOSToolchain.cmake
|
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/iOSToolchain.cmake -GXcode
|
||||||
make
|
|
||||||
|
|
||||||
After that you should have a client/iOS/bin/<Debug or Release>/iFreeRDP.app application package.
|
This command will create a XCode project in the FreeRDP root folder called FreeRDP.xcodeproj.
|
||||||
|
Open the project in XCode and modify, build or run the app.
|
||||||
|
|
||||||
Manual iOS builds
|
Alternatively you can also build the project from the command line using xcodebuild:
|
||||||
-----------------
|
|
||||||
|
|
||||||
First run cmake to prepare the build:
|
xcodebuild -project FreeRDP.xcodeproj -configuration Debug -sdk iphoneos6.1
|
||||||
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/iOSToolchain.cmake -DIOS_BUILD_OBJC=OFF
|
|
||||||
make
|
|
||||||
|
|
||||||
Now you can run your favourite xcodebuild command in client/iOS like this:
|
|
||||||
|
|
||||||
cd client/iOS
|
|
||||||
xcodebuild -project iFreeRDP.xcodeproj -configuration Debug -sdk iphoneos6.1 install
|
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
* XCode, by default will build the application into its derived data location (usually in ~/Library/Developer/...).
|
* XCode, by default will build the application into its derived data location (usually in ~/Library/Developer/...).
|
||||||
If you want to specify an output directory add CONFIGURATION_BUILD_DIR=<output-path-here> to the end of above command line.
|
If you want to specify an output directory add CONFIGURATION_BUILD_DIR=<output-path-here> to the end of above command line.
|
||||||
|
|
||||||
* If using XCode choose "Open Other" from the welcome screen, browse to the client/iOS directory in your FreeRDP folder and select iFreeRDP.xcodeproj.
|
* If using XCode choose "Open Other" from the welcome screen, browse to the FreeRDP root directory and select FreeRDP.xcodeproj.
|
||||||
|
|
||||||
|
|
||||||
cmake variables
|
cmake variables
|
||||||
@@ -92,8 +71,3 @@ CMAKE_IOS_SDK_ROOT (used by toolchain file)
|
|||||||
FREERDP_IOS_EXTERNAL_SSL_PATH (used by FindOpenSSL)
|
FREERDP_IOS_EXTERNAL_SSL_PATH (used by FindOpenSSL)
|
||||||
* absolut root path to the pre-built static OpenSSL libraries
|
* absolut root path to the pre-built static OpenSSL libraries
|
||||||
|
|
||||||
IOS_BUILD_OBJC (used by client/iOS/CMakeLists.txt)
|
|
||||||
* can be ON/OFF (default ON) whether or not to build the objective-c UI with cmake
|
|
||||||
|
|
||||||
IOS_BUILD_OBJC_DEBUG (used by client/iOS/CMakeLists.txt)
|
|
||||||
* can be ON/OFF (default ON) whether or not to build a debug version of the objective-c UI
|
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ Description: A free remote desktop protocol client
|
|||||||
URL: http://www.freerdp.com/
|
URL: http://www.freerdp.com/
|
||||||
Version: @FREERDP_VERSION_FULL@
|
Version: @FREERDP_VERSION_FULL@
|
||||||
Requires:
|
Requires:
|
||||||
Libs: -L${libdir} -lfreerdp-cache -lfreerdp-codec -lfreerdp-core -lfreerdp-crypto -lfreerdp-gdi -lfreerdp-locale -lfreerdp-rail -lfreerdp-utils -lwinpr-sspi -lwinpr-rpc
|
Libs: -L${libdir} -lfreerdp-cache -lfreerdp-codec -lfreerdp-core -lfreerdp-crypto -lfreerdp-gdi -lfreerdp-locale -lfreerdp-rail -lfreerdp-utils -lwinpr-sspi -lwinpr-rpc -lwinpr-utils
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
|
||||||
|
|||||||
@@ -483,7 +483,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
|
|||||||
#define FreeRDP_ClientBuild 133
|
#define FreeRDP_ClientBuild 133
|
||||||
#define FreeRDP_ClientHostname 134
|
#define FreeRDP_ClientHostname 134
|
||||||
#define FreeRDP_ClientProductId 135
|
#define FreeRDP_ClientProductId 135
|
||||||
#define FreeRDP_EarlyCapabilitiesFlag 136
|
#define FreeRDP_EarlyCapabilityFlags 136
|
||||||
#define FreeRDP_NetworkAutoDetect 137
|
#define FreeRDP_NetworkAutoDetect 137
|
||||||
#define FreeRDP_SupportAsymetricKeys 138
|
#define FreeRDP_SupportAsymetricKeys 138
|
||||||
#define FreeRDP_SupportErrorInfoPdu 139
|
#define FreeRDP_SupportErrorInfoPdu 139
|
||||||
@@ -689,6 +689,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
|
|||||||
#define FreeRDP_RemoteFxCodecId 3650
|
#define FreeRDP_RemoteFxCodecId 3650
|
||||||
#define FreeRDP_RemoteFxCodecMode 3651
|
#define FreeRDP_RemoteFxCodecMode 3651
|
||||||
#define FreeRDP_RemoteFxImageCodec 3652
|
#define FreeRDP_RemoteFxImageCodec 3652
|
||||||
|
#define FreeRDP_RemoteFxCaptureFlags 3653
|
||||||
#define FreeRDP_NSCodec 3712
|
#define FreeRDP_NSCodec 3712
|
||||||
#define FreeRDP_NSCodecId 3713
|
#define FreeRDP_NSCodecId 3713
|
||||||
#define FreeRDP_FrameAcknowledge 3714
|
#define FreeRDP_FrameAcknowledge 3714
|
||||||
@@ -762,7 +763,7 @@ struct rdp_settings
|
|||||||
ALIGN64 UINT32 ClientBuild; /* 133 */
|
ALIGN64 UINT32 ClientBuild; /* 133 */
|
||||||
ALIGN64 char* ClientHostname; /* 134 */
|
ALIGN64 char* ClientHostname; /* 134 */
|
||||||
ALIGN64 char* ClientProductId; /* 135 */
|
ALIGN64 char* ClientProductId; /* 135 */
|
||||||
ALIGN64 UINT32 EarlyCapabilitiesFlag; /* 136 */
|
ALIGN64 UINT32 EarlyCapabilityFlags; /* 136 */
|
||||||
ALIGN64 BOOL NetworkAutoDetect; /* 137 */
|
ALIGN64 BOOL NetworkAutoDetect; /* 137 */
|
||||||
ALIGN64 BOOL SupportAsymetricKeys; /* 138 */
|
ALIGN64 BOOL SupportAsymetricKeys; /* 138 */
|
||||||
ALIGN64 BOOL SupportErrorInfoPdu; /* 139 */
|
ALIGN64 BOOL SupportErrorInfoPdu; /* 139 */
|
||||||
@@ -1155,7 +1156,8 @@ struct rdp_settings
|
|||||||
ALIGN64 UINT32 RemoteFxCodecId; /* 3650 */
|
ALIGN64 UINT32 RemoteFxCodecId; /* 3650 */
|
||||||
ALIGN64 UINT32 RemoteFxCodecMode; /* 3651 */
|
ALIGN64 UINT32 RemoteFxCodecMode; /* 3651 */
|
||||||
ALIGN64 BOOL RemoteFxImageCodec; /* 3652 */
|
ALIGN64 BOOL RemoteFxImageCodec; /* 3652 */
|
||||||
UINT64 padding3712[3712 - 3653]; /* 3653 */
|
ALIGN64 UINT32 RemoteFxCaptureFlags; /* 3653 */
|
||||||
|
UINT64 padding3712[3712 - 3654]; /* 3654 */
|
||||||
|
|
||||||
/* NSCodec */
|
/* NSCodec */
|
||||||
ALIGN64 BOOL NSCodec; /* 3712 */
|
ALIGN64 BOOL NSCodec; /* 3712 */
|
||||||
|
|||||||
@@ -1209,8 +1209,8 @@ UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id)
|
|||||||
return settings->ClientBuild;
|
return settings->ClientBuild;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FreeRDP_EarlyCapabilitiesFlag:
|
case FreeRDP_EarlyCapabilityFlags:
|
||||||
return settings->EarlyCapabilitiesFlag;
|
return settings->EarlyCapabilityFlags;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FreeRDP_EncryptionMethods:
|
case FreeRDP_EncryptionMethods:
|
||||||
@@ -1517,8 +1517,8 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)
|
|||||||
settings->ClientBuild = param;
|
settings->ClientBuild = param;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FreeRDP_EarlyCapabilitiesFlag:
|
case FreeRDP_EarlyCapabilityFlags:
|
||||||
settings->EarlyCapabilitiesFlag = param;
|
settings->EarlyCapabilityFlags = param;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FreeRDP_EncryptionMethods:
|
case FreeRDP_EncryptionMethods:
|
||||||
|
|||||||
@@ -2487,6 +2487,21 @@ BOOL rdp_read_bitmap_codecs_capability_set(wStream* s, UINT16 length, rdpSetting
|
|||||||
if (remainingLength < codecPropertiesLength)
|
if (remainingLength < codecPropertiesLength)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (settings->ServerMode)
|
||||||
|
{
|
||||||
|
if (UuidEqual(&codecGuid, &CODEC_GUID_REMOTEFX, &rpc_status))
|
||||||
|
{
|
||||||
|
stream_seek_UINT32(s); /* length */
|
||||||
|
stream_read_UINT32(s, settings->RemoteFxCaptureFlags); /* captureFlags */
|
||||||
|
stream_rewind(s, 8);
|
||||||
|
|
||||||
|
if (settings->RemoteFxCaptureFlags & CARDP_CAPS_CAPTURE_NON_CAC)
|
||||||
|
{
|
||||||
|
settings->RemoteFxOnly = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stream_seek(s, codecPropertiesLength); /* codecProperties */
|
stream_seek(s, codecPropertiesLength); /* codecProperties */
|
||||||
remainingLength -= codecPropertiesLength;
|
remainingLength -= codecPropertiesLength;
|
||||||
|
|
||||||
@@ -2506,7 +2521,7 @@ void rdp_write_rfx_client_capability_container(wStream* s, rdpSettings* settings
|
|||||||
UINT32 captureFlags;
|
UINT32 captureFlags;
|
||||||
BYTE codecMode;
|
BYTE codecMode;
|
||||||
|
|
||||||
captureFlags = settings->RemoteFxOnly ? CARDP_CAPS_CAPTURE_NON_CAC : 0;
|
captureFlags = settings->RemoteFxOnly ? 0 : CARDP_CAPS_CAPTURE_NON_CAC;
|
||||||
codecMode = settings->RemoteFxCodecMode;
|
codecMode = settings->RemoteFxCodecMode;
|
||||||
|
|
||||||
stream_write_UINT16(s, 49); /* codecPropertiesLength */
|
stream_write_UINT16(s, 49); /* codecPropertiesLength */
|
||||||
@@ -3222,19 +3237,12 @@ BOOL rdp_read_capability_sets(wStream* s, rdpSettings* settings, UINT16 numberCa
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s)
|
BOOL rdp_recv_get_active_header(rdpRdp* rdp, wStream* s, UINT16* pChannelId)
|
||||||
{
|
{
|
||||||
UINT16 length;
|
UINT16 length;
|
||||||
UINT16 channelId;
|
|
||||||
UINT16 pduType;
|
|
||||||
UINT16 pduLength;
|
|
||||||
UINT16 pduSource;
|
|
||||||
UINT16 numberCapabilities;
|
|
||||||
UINT16 lengthSourceDescriptor;
|
|
||||||
UINT16 lengthCombinedCapabilities;
|
|
||||||
UINT16 securityFlags;
|
UINT16 securityFlags;
|
||||||
|
|
||||||
if (!rdp_read_header(rdp, s, &length, &channelId))
|
if (!rdp_read_header(rdp, s, &length, pChannelId))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (rdp->disconnect)
|
if (rdp->disconnect)
|
||||||
@@ -3255,12 +3263,31 @@ BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelId != MCS_GLOBAL_CHANNEL_ID)
|
if (*pChannelId != MCS_GLOBAL_CHANNEL_ID)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "expected MCS_GLOBAL_CHANNEL_ID %04x, got %04x\n", MCS_GLOBAL_CHANNEL_ID, channelId);
|
fprintf(stderr, "expected MCS_GLOBAL_CHANNEL_ID %04x, got %04x\n", MCS_GLOBAL_CHANNEL_ID, *pChannelId);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s)
|
||||||
|
{
|
||||||
|
UINT16 channelId;
|
||||||
|
UINT16 pduType;
|
||||||
|
UINT16 pduLength;
|
||||||
|
UINT16 pduSource;
|
||||||
|
UINT16 numberCapabilities;
|
||||||
|
UINT16 lengthSourceDescriptor;
|
||||||
|
UINT16 lengthCombinedCapabilities;
|
||||||
|
|
||||||
|
if (!rdp_recv_get_active_header(rdp, s, &channelId))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (rdp->disconnect)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
|
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "rdp_read_share_control_header failed\n");
|
fprintf(stderr, "rdp_read_share_control_header failed\n");
|
||||||
@@ -3375,7 +3402,6 @@ BOOL rdp_send_demand_active(rdpRdp* rdp)
|
|||||||
|
|
||||||
BOOL rdp_recv_confirm_active(rdpRdp* rdp, wStream* s)
|
BOOL rdp_recv_confirm_active(rdpRdp* rdp, wStream* s)
|
||||||
{
|
{
|
||||||
UINT16 length;
|
|
||||||
UINT16 channelId;
|
UINT16 channelId;
|
||||||
UINT16 pduType;
|
UINT16 pduType;
|
||||||
UINT16 pduLength;
|
UINT16 pduLength;
|
||||||
@@ -3383,27 +3409,8 @@ BOOL rdp_recv_confirm_active(rdpRdp* rdp, wStream* s)
|
|||||||
UINT16 lengthSourceDescriptor;
|
UINT16 lengthSourceDescriptor;
|
||||||
UINT16 lengthCombinedCapabilities;
|
UINT16 lengthCombinedCapabilities;
|
||||||
UINT16 numberCapabilities;
|
UINT16 numberCapabilities;
|
||||||
UINT16 securityFlags;
|
|
||||||
|
|
||||||
if (!rdp_read_header(rdp, s, &length, &channelId))
|
if (!rdp_recv_get_active_header(rdp, s, &channelId))
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (rdp->settings->DisableEncryption)
|
|
||||||
{
|
|
||||||
if (!rdp_read_security_header(s, &securityFlags))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (securityFlags & SEC_ENCRYPT)
|
|
||||||
{
|
|
||||||
if (!rdp_decrypt(rdp, s, length - 4, securityFlags))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "rdp_decrypt failed\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channelId != MCS_GLOBAL_CHANNEL_ID)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
|
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
|
||||||
|
|||||||
@@ -165,6 +165,7 @@
|
|||||||
#define CLW_ENTROPY_RLGR1 0x01
|
#define CLW_ENTROPY_RLGR1 0x01
|
||||||
#define CLW_ENTROPY_RLGR3 0x04
|
#define CLW_ENTROPY_RLGR3 0x04
|
||||||
|
|
||||||
|
BOOL rdp_recv_get_active_header(rdpRdp* rdp, wStream* s, UINT16* pChannelId);
|
||||||
BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s);
|
BOOL rdp_recv_demand_active(rdpRdp* rdp, wStream* s);
|
||||||
void rdp_write_demand_active(wStream* s, rdpSettings* settings);
|
void rdp_write_demand_active(wStream* s, rdpSettings* settings);
|
||||||
BOOL rdp_send_demand_active(rdpRdp* rdp);
|
BOOL rdp_send_demand_active(rdpRdp* rdp);
|
||||||
|
|||||||
@@ -529,8 +529,13 @@ BOOL rdp_client_connect_demand_active(rdpRdp* rdp, wStream* s)
|
|||||||
|
|
||||||
if (!rdp_recv_demand_active(rdp, s))
|
if (!rdp_recv_demand_active(rdp, s))
|
||||||
{
|
{
|
||||||
|
UINT16 channelId;
|
||||||
stream_set_mark(s, mark);
|
stream_set_mark(s, mark);
|
||||||
stream_seek(s, RDP_PACKET_HEADER_MAX_LENGTH);
|
rdp_recv_get_active_header(rdp, s, &channelId);
|
||||||
|
/* Was stream_seek(s, RDP_PACKET_HEADER_MAX_LENGTH);
|
||||||
|
* but the headers aren't always that length,
|
||||||
|
* so that could result in a bad offset.
|
||||||
|
*/
|
||||||
|
|
||||||
if (rdp_recv_out_of_sequence_pdu(rdp, s) != TRUE)
|
if (rdp_recv_out_of_sequence_pdu(rdp, s) != TRUE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -495,7 +495,6 @@ BOOL gcc_read_client_core_data(wStream* s, rdpSettings* settings, UINT16 blockLe
|
|||||||
UINT16 postBeta2ColorDepth = 0;
|
UINT16 postBeta2ColorDepth = 0;
|
||||||
UINT16 highColorDepth = 0;
|
UINT16 highColorDepth = 0;
|
||||||
UINT16 supportedColorDepths = 0;
|
UINT16 supportedColorDepths = 0;
|
||||||
UINT16 earlyCapabilityFlags = 0;
|
|
||||||
UINT32 serverSelectedProtocol = 0;
|
UINT32 serverSelectedProtocol = 0;
|
||||||
|
|
||||||
/* Length of all required fields, until imeFileName */
|
/* Length of all required fields, until imeFileName */
|
||||||
@@ -564,7 +563,7 @@ BOOL gcc_read_client_core_data(wStream* s, rdpSettings* settings, UINT16 blockLe
|
|||||||
|
|
||||||
if (blockLength < 2)
|
if (blockLength < 2)
|
||||||
break;
|
break;
|
||||||
stream_read_UINT16(s, earlyCapabilityFlags); /* earlyCapabilityFlags */
|
stream_read_UINT16(s, settings->EarlyCapabilityFlags); /* earlyCapabilityFlags */
|
||||||
blockLength -= 2;
|
blockLength -= 2;
|
||||||
|
|
||||||
if (blockLength < 64)
|
if (blockLength < 64)
|
||||||
@@ -597,7 +596,7 @@ BOOL gcc_read_client_core_data(wStream* s, rdpSettings* settings, UINT16 blockLe
|
|||||||
|
|
||||||
if (highColorDepth > 0)
|
if (highColorDepth > 0)
|
||||||
{
|
{
|
||||||
if (earlyCapabilityFlags & RNS_UD_CS_WANT_32BPP_SESSION)
|
if (settings->EarlyCapabilityFlags & RNS_UD_CS_WANT_32BPP_SESSION)
|
||||||
color_depth = 32;
|
color_depth = 32;
|
||||||
else
|
else
|
||||||
color_depth = highColorDepth;
|
color_depth = highColorDepth;
|
||||||
|
|||||||
@@ -117,9 +117,6 @@ BOOL rdp_read_client_time_zone(wStream* s, rdpSettings* settings)
|
|||||||
|
|
||||||
void rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
|
void rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
|
||||||
{
|
{
|
||||||
UINT32 bias;
|
|
||||||
INT32 sbias;
|
|
||||||
UINT32 bias2c;
|
|
||||||
WCHAR* standardName = NULL;
|
WCHAR* standardName = NULL;
|
||||||
WCHAR* daylightName = NULL;
|
WCHAR* daylightName = NULL;
|
||||||
int standardNameLength;
|
int standardNameLength;
|
||||||
@@ -138,57 +135,34 @@ void rdp_write_client_time_zone(wStream* s, rdpSettings* settings)
|
|||||||
if (daylightNameLength > 62)
|
if (daylightNameLength > 62)
|
||||||
daylightNameLength = 62;
|
daylightNameLength = 62;
|
||||||
|
|
||||||
/* UTC = LocalTime + Bias <-> Bias = UTC - LocalTime */
|
/* Bias */
|
||||||
|
stream_write_UINT32(s, clientTimeZone->bias);
|
||||||
/* Translate from biases used throughout libfreerdp-locale/timezone.c
|
|
||||||
* to what RDP expects, which is minutes *west* of UTC.
|
|
||||||
* Though MS-RDPBCGR specifies bias as unsigned, two's complement
|
|
||||||
* (a negative integer) works fine for zones east of UTC.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (clientTimeZone->bias <= 720)
|
|
||||||
bias = -1 * clientTimeZone->bias;
|
|
||||||
else
|
|
||||||
bias = 1440 - clientTimeZone->bias;
|
|
||||||
|
|
||||||
stream_write_UINT32(s, bias); /* Bias */
|
|
||||||
|
|
||||||
/* standardName (64 bytes) */
|
/* standardName (64 bytes) */
|
||||||
stream_write(s, standardName, standardNameLength);
|
stream_write(s, standardName, standardNameLength);
|
||||||
stream_write_zero(s, 64 - standardNameLength);
|
stream_write_zero(s, 64 - standardNameLength);
|
||||||
|
|
||||||
rdp_write_system_time(s, &clientTimeZone->standardDate); /* StandardDate */
|
/* StandardDate */
|
||||||
|
rdp_write_system_time(s, &clientTimeZone->standardDate);
|
||||||
|
|
||||||
DEBUG_TIMEZONE("bias=%d stdName='%s' dlName='%s'",
|
DEBUG_TIMEZONE("bias=%d stdName='%s' dlName='%s'", clientTimeZone->bias, clientTimeZone->standardName, clientTimeZone->daylightName);
|
||||||
bias, clientTimeZone->standardName, clientTimeZone->daylightName);
|
|
||||||
|
|
||||||
sbias = clientTimeZone->standardBias - clientTimeZone->bias;
|
|
||||||
|
|
||||||
if (sbias < 0)
|
|
||||||
bias2c = (UINT32) sbias;
|
|
||||||
else
|
|
||||||
bias2c = ~((UINT32) sbias) + 1;
|
|
||||||
|
|
||||||
/* Note that StandardBias is ignored if no valid standardDate is provided. */
|
/* Note that StandardBias is ignored if no valid standardDate is provided. */
|
||||||
stream_write_UINT32(s, bias2c); /* StandardBias */
|
/* StandardBias */
|
||||||
DEBUG_TIMEZONE("StandardBias=%d", bias2c);
|
stream_write_UINT32(s, clientTimeZone->standardBias);
|
||||||
|
DEBUG_TIMEZONE("StandardBias=%d", clientTimeZone->standardBias);
|
||||||
|
|
||||||
/* daylightName (64 bytes) */
|
/* daylightName (64 bytes) */
|
||||||
stream_write(s, daylightName, daylightNameLength);
|
stream_write(s, daylightName, daylightNameLength);
|
||||||
stream_write_zero(s, 64 - daylightNameLength);
|
stream_write_zero(s, 64 - daylightNameLength);
|
||||||
|
|
||||||
rdp_write_system_time(s, &clientTimeZone->daylightDate); /* DaylightDate */
|
/* DaylightDate */
|
||||||
|
rdp_write_system_time(s, &clientTimeZone->daylightDate);
|
||||||
sbias = clientTimeZone->daylightBias - clientTimeZone->bias;
|
|
||||||
|
|
||||||
if (sbias < 0)
|
|
||||||
bias2c = (UINT32) sbias;
|
|
||||||
else
|
|
||||||
bias2c = ~((UINT32) sbias) + 1;
|
|
||||||
|
|
||||||
/* Note that DaylightBias is ignored if no valid daylightDate is provided. */
|
/* Note that DaylightBias is ignored if no valid daylightDate is provided. */
|
||||||
stream_write_UINT32(s, bias2c); /* DaylightBias */
|
/* DaylightBias */
|
||||||
DEBUG_TIMEZONE("DaylightBias=%d", bias2c);
|
stream_write_UINT32(s, clientTimeZone->daylightBias);
|
||||||
|
DEBUG_TIMEZONE("DaylightBias=%d", clientTimeZone->daylightBias);
|
||||||
|
|
||||||
free(standardName);
|
free(standardName);
|
||||||
free(daylightName);
|
free(daylightName);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <freerdp/gdi/bitmap.h>
|
#include <freerdp/gdi/bitmap.h>
|
||||||
#include <freerdp/codec/jpeg.h>
|
#include <freerdp/codec/jpeg.h>
|
||||||
#include <freerdp/codec/rfx.h>
|
#include <freerdp/codec/rfx.h>
|
||||||
|
#include <freerdp/codec/nsc.h>
|
||||||
#include <freerdp/gdi/drawing.h>
|
#include <freerdp/gdi/drawing.h>
|
||||||
#include <freerdp/gdi/clipping.h>
|
#include <freerdp/gdi/clipping.h>
|
||||||
#include <freerdp/codec/color.h>
|
#include <freerdp/codec/color.h>
|
||||||
@@ -116,7 +117,9 @@ void gdi_Bitmap_Decompress(rdpContext* context, rdpBitmap* bitmap,
|
|||||||
switch (codec_id)
|
switch (codec_id)
|
||||||
{
|
{
|
||||||
case RDP_CODEC_ID_NSCODEC:
|
case RDP_CODEC_ID_NSCODEC:
|
||||||
fprintf(stderr, "gdi_Bitmap_Decompress: nsc not done\n");
|
gdi = context->gdi;
|
||||||
|
nsc_process_message(gdi->nsc_context, bpp, width, height, data, length);
|
||||||
|
freerdp_image_flip(((NSC_CONTEXT*)gdi->nsc_context)->bmpdata, bitmap->data, width, height, bpp);
|
||||||
break;
|
break;
|
||||||
case RDP_CODEC_ID_REMOTEFX:
|
case RDP_CODEC_ID_REMOTEFX:
|
||||||
gdi = context->gdi;
|
gdi = context->gdi;
|
||||||
|
|||||||
@@ -1640,7 +1640,7 @@ TIME_ZONE_RULE_ENTRY* freerdp_get_current_time_zone_rule(TIME_ZONE_RULE_ENTRY* r
|
|||||||
|
|
||||||
for (i = 0; i < (int) count; i++)
|
for (i = 0; i < (int) count; i++)
|
||||||
{
|
{
|
||||||
if ((rules[i].TicksStart <= windows_time) && (windows_time >= rules[i].TicksEnd))
|
if ((rules[i].TicksStart >= windows_time) && (windows_time >= rules[i].TicksEnd))
|
||||||
{
|
{
|
||||||
/*fprintf(stderr, "Got rule %d from table at %p with count %u\n", i, rules, count);*/
|
/*fprintf(stderr, "Got rule %d from table at %p with count %u\n", i, rules, count);*/
|
||||||
return &rules[i];
|
return &rules[i];
|
||||||
@@ -1657,14 +1657,14 @@ void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone)
|
|||||||
TIME_ZONE_ENTRY* tz;
|
TIME_ZONE_ENTRY* tz;
|
||||||
struct tm* local_time;
|
struct tm* local_time;
|
||||||
|
|
||||||
|
clientTimeZone->standardBias = 0;
|
||||||
|
|
||||||
time(&t);
|
time(&t);
|
||||||
local_time = localtime(&t);
|
local_time = localtime(&t);
|
||||||
|
|
||||||
#ifdef HAVE_TM_GMTOFF
|
#ifdef HAVE_TM_GMTOFF
|
||||||
if (local_time->tm_gmtoff >= 0)
|
clientTimeZone->bias = timezone / 60;
|
||||||
clientTimeZone->bias = (UINT32) (local_time->tm_gmtoff / 60);
|
DEBUG_TIMEZONE("tzname[std]: %s, tzname[dst]: %s, timezone: %ld, Daylight: %d", tzname[0], tzname[1], timezone, daylight);
|
||||||
else
|
|
||||||
clientTimeZone->bias = (UINT32) (1440 + (INT32) (local_time->tm_gmtoff / 60));
|
|
||||||
#elif defined(sun)
|
#elif defined(sun)
|
||||||
if (local_time->tm_isdst > 0)
|
if (local_time->tm_isdst > 0)
|
||||||
clientTimeZone->bias = (UINT32) (altzone / 3600);
|
clientTimeZone->bias = (UINT32) (altzone / 3600);
|
||||||
@@ -1673,19 +1673,6 @@ void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone)
|
|||||||
#else
|
#else
|
||||||
clientTimeZone->bias = 0;
|
clientTimeZone->bias = 0;
|
||||||
#endif
|
#endif
|
||||||
if (local_time->tm_isdst > 0)
|
|
||||||
{
|
|
||||||
clientTimeZone->standardBias = clientTimeZone->bias - 60;
|
|
||||||
clientTimeZone->daylightBias = clientTimeZone->bias;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
clientTimeZone->standardBias = clientTimeZone->bias;
|
|
||||||
clientTimeZone->daylightBias = clientTimeZone->bias + 60;
|
|
||||||
}
|
|
||||||
DEBUG_TIMEZONE("Bias: %d, StandardBias: %d, DaylightBias: %d",
|
|
||||||
clientTimeZone->bias, clientTimeZone->standardBias,
|
|
||||||
clientTimeZone->daylightBias);
|
|
||||||
|
|
||||||
tz = freerdp_detect_windows_time_zone(clientTimeZone->bias);
|
tz = freerdp_detect_windows_time_zone(clientTimeZone->bias);
|
||||||
|
|
||||||
@@ -1694,8 +1681,7 @@ void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone)
|
|||||||
DEBUG_TIMEZONE("tz: Id='%s' Bias=%d DST=%d dn='%s' sn='%s' dln='%s'",
|
DEBUG_TIMEZONE("tz: Id='%s' Bias=%d DST=%d dn='%s' sn='%s' dln='%s'",
|
||||||
tz->Id, tz->Bias, tz->SupportsDST, tz->DisplayName,
|
tz->Id, tz->Bias, tz->SupportsDST, tz->DisplayName,
|
||||||
tz->StandardName, tz->DaylightName);
|
tz->StandardName, tz->DaylightName);
|
||||||
/* Not printed: RuleTable, RuleTableCount */
|
|
||||||
clientTimeZone->bias = tz->Bias;
|
|
||||||
sprintf(clientTimeZone->standardName, "%s", tz->StandardName);
|
sprintf(clientTimeZone->standardName, "%s", tz->StandardName);
|
||||||
sprintf(clientTimeZone->daylightName, "%s", tz->DaylightName);
|
sprintf(clientTimeZone->daylightName, "%s", tz->DaylightName);
|
||||||
|
|
||||||
@@ -1704,11 +1690,9 @@ void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone)
|
|||||||
TIME_ZONE_RULE_ENTRY* rule;
|
TIME_ZONE_RULE_ENTRY* rule;
|
||||||
rule = freerdp_get_current_time_zone_rule(tz->RuleTable, tz->RuleTableCount);
|
rule = freerdp_get_current_time_zone_rule(tz->RuleTable, tz->RuleTableCount);
|
||||||
|
|
||||||
/* issue #574 -- temporarily disabled this block as it seems to be setting the wrong time
|
|
||||||
if (rule != NULL)
|
if (rule != NULL)
|
||||||
{
|
{
|
||||||
clientTimeZone->standardBias = 0;
|
clientTimeZone->daylightBias = -rule->DaylightDelta;
|
||||||
clientTimeZone->daylightBias = rule->DaylightDelta;
|
|
||||||
|
|
||||||
clientTimeZone->standardDate.wYear = rule->StandardDate.wYear;
|
clientTimeZone->standardDate.wYear = rule->StandardDate.wYear;
|
||||||
clientTimeZone->standardDate.wMonth = rule->StandardDate.wMonth;
|
clientTimeZone->standardDate.wMonth = rule->StandardDate.wMonth;
|
||||||
@@ -1728,9 +1712,7 @@ void freerdp_time_zone_detect(TIME_ZONE_INFO* clientTimeZone)
|
|||||||
clientTimeZone->daylightDate.wSecond = rule->DaylightDate.wSecond;
|
clientTimeZone->daylightDate.wSecond = rule->DaylightDate.wSecond;
|
||||||
clientTimeZone->daylightDate.wMilliseconds = rule->DaylightDate.wMilliseconds;
|
clientTimeZone->daylightDate.wMilliseconds = rule->DaylightDate.wMilliseconds;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(tz);
|
free(tz);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ UINT64 freerdp_windows_gmtime()
|
|||||||
UINT64 freerdp_get_windows_time_from_unix_time(time_t unix_time)
|
UINT64 freerdp_get_windows_time_from_unix_time(time_t unix_time)
|
||||||
{
|
{
|
||||||
UINT64 windows_time;
|
UINT64 windows_time;
|
||||||
windows_time = (unix_time * 10000000) + 621355968000000000ULL;
|
windows_time = ((UINT64)unix_time * 10000000) + 621355968000000000ULL;
|
||||||
return windows_time;
|
return windows_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
third-party/CMakeLists.txt
vendored
@@ -29,3 +29,4 @@ foreach(dir ${all_valid_subdirs})
|
|||||||
endif()
|
endif()
|
||||||
endforeach(dir)
|
endforeach(dir)
|
||||||
|
|
||||||
|
set(THIRD_PARTY_INCLUDES ${THIRD_PARTY_INCLUDES} PARENT_SCOPE)
|
||||||
@@ -26,6 +26,10 @@
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <winpr/windows.h>
|
#include <winpr/windows.h>
|
||||||
|
|
||||||
|
#if defined(__OBJC__) && defined(__APPLE__)
|
||||||
|
#include <objc/objc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
|
||||||
#define __int8 char
|
#define __int8 char
|
||||||
|
|||||||
@@ -567,28 +567,25 @@ DWORD KBD7X[128] =
|
|||||||
|
|
||||||
DWORD GetVirtualKeyCodeFromVirtualScanCode(DWORD scancode, DWORD dwKeyboardType)
|
DWORD GetVirtualKeyCodeFromVirtualScanCode(DWORD scancode, DWORD dwKeyboardType)
|
||||||
{
|
{
|
||||||
DWORD vkcode;
|
DWORD code_index;
|
||||||
|
|
||||||
vkcode = VK_NONE;
|
code_index = scancode & 0xff;
|
||||||
|
if (code_index > 127)
|
||||||
|
return VK_NONE;
|
||||||
|
|
||||||
if ((dwKeyboardType != 4) && (dwKeyboardType != 7))
|
if ((dwKeyboardType != 4) && (dwKeyboardType != 7))
|
||||||
dwKeyboardType = 4;
|
dwKeyboardType = 4;
|
||||||
|
|
||||||
if (dwKeyboardType == 4)
|
if (dwKeyboardType == 4)
|
||||||
{
|
{
|
||||||
if (vkcode < 128)
|
return (scancode & KBDEXT) ? KBD4X[code_index] : KBD4T[code_index];
|
||||||
vkcode = (scancode & KBDEXT) ? KBD4X[scancode] : KBD4T[scancode];
|
|
||||||
}
|
}
|
||||||
else if (dwKeyboardType == 7)
|
else if (dwKeyboardType == 7)
|
||||||
{
|
{
|
||||||
if (vkcode < 128)
|
return (scancode & KBDEXT) ? KBD7X[code_index] : KBD7T[code_index];
|
||||||
vkcode = (scancode & KBDEXT) ? KBD7X[scancode] : KBD7T[scancode];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vkcode)
|
return VK_NONE;
|
||||||
vkcode = VK_NONE;
|
|
||||||
|
|
||||||
return vkcode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD GetVirtualScanCodeFromVirtualKeyCode(DWORD vkcode, DWORD dwKeyboardType)
|
DWORD GetVirtualScanCodeFromVirtualKeyCode(DWORD vkcode, DWORD dwKeyboardType)
|
||||||
|
|||||||
@@ -66,6 +66,9 @@ char* GetPath_HOME()
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
path = GetEnvAlloc("UserProfile");
|
path = GetEnvAlloc("UserProfile");
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
path = malloc(2);
|
||||||
|
strcpy(path, "/");
|
||||||
#else
|
#else
|
||||||
path = GetEnvAlloc("HOME");
|
path = GetEnvAlloc("HOME");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -39,15 +39,18 @@
|
|||||||
|
|
||||||
HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName)
|
HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName)
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle = NULL;
|
||||||
pthread_mutex_t* pMutex;
|
pthread_mutex_t* pMutex;
|
||||||
|
|
||||||
pMutex = (pthread_mutex_t*) malloc(sizeof(pthread_mutex_t));
|
pMutex = (pthread_mutex_t*) malloc(sizeof(pthread_mutex_t));
|
||||||
|
|
||||||
if (pMutex)
|
if (pMutex)
|
||||||
|
{
|
||||||
pthread_mutex_init(pMutex, 0);
|
pthread_mutex_init(pMutex, 0);
|
||||||
|
handle = winpr_Handle_Insert(HANDLE_TYPE_MUTEX, pMutex);
|
||||||
handle = winpr_Handle_Insert(HANDLE_TYPE_MUTEX, pMutex);
|
if (bInitialOwner)
|
||||||
|
pthread_mutex_lock(pMutex);
|
||||||
|
}
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|||||||