Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
dbfbc14a4e
@ -796,15 +796,15 @@ JNIEXPORT jboolean JNICALL jni_freerdp_update_graphics(
|
|||||||
JNIEXPORT void JNICALL jni_freerdp_send_key_event(
|
JNIEXPORT void JNICALL jni_freerdp_send_key_event(
|
||||||
JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down)
|
JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down)
|
||||||
{
|
{
|
||||||
RDP_SCANCODE scancode;
|
DWORD scancode;
|
||||||
ANDROID_EVENT* event;
|
ANDROID_EVENT* event;
|
||||||
|
|
||||||
freerdp* inst = (freerdp*)instance;
|
freerdp* inst = (freerdp*)instance;
|
||||||
|
|
||||||
scancode = freerdp_keyboard_get_rdp_scancode_from_virtual_key_code(keycode);
|
scancode = GetVirtualScanCodeFromVirtualKeyCode(keycode, 4);
|
||||||
int flags = (down == JNI_TRUE) ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE;
|
int flags = (down == JNI_TRUE) ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE;
|
||||||
flags |= (RDP_SCANCODE_EXTENDED(scancode)) ? KBD_FLAGS_EXTENDED : 0;
|
flags |= (scancode & KBDEXT) ? KBD_FLAGS_EXTENDED : 0;
|
||||||
event = (ANDROID_EVENT*) android_event_key_new(flags, RDP_SCANCODE_CODE(scancode));
|
event = (ANDROID_EVENT*) android_event_key_new(flags, scancode & 0xFF);
|
||||||
|
|
||||||
android_push_event(inst, event);
|
android_push_event(inst, event);
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ public class ConnectionReference
|
|||||||
public static final String PATH_MANUAL_BOOKMARK_ID = "MBMID/";
|
public static final String PATH_MANUAL_BOOKMARK_ID = "MBMID/";
|
||||||
public static final String PATH_HOSTNAME = "HOST/";
|
public static final String PATH_HOSTNAME = "HOST/";
|
||||||
public static final String PATH_PLACEHOLDER = "PLCHLD/";
|
public static final String PATH_PLACEHOLDER = "PLCHLD/";
|
||||||
|
public static final String PATH_FILE = "FILE/";
|
||||||
|
|
||||||
public static String getManualBookmarkReference(long bookmarkId) {
|
public static String getManualBookmarkReference(long bookmarkId) {
|
||||||
return (PATH_MANUAL_BOOKMARK_ID + bookmarkId);
|
return (PATH_MANUAL_BOOKMARK_ID + bookmarkId);
|
||||||
@ -27,6 +28,10 @@ public class ConnectionReference
|
|||||||
return (PATH_PLACEHOLDER + name);
|
return (PATH_PLACEHOLDER + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFileReference(String uri) {
|
||||||
|
return (PATH_FILE + uri);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isBookmarkReference(String refStr) {
|
public static boolean isBookmarkReference(String refStr) {
|
||||||
return refStr.startsWith(PATH_MANUAL_BOOKMARK_ID);
|
return refStr.startsWith(PATH_MANUAL_BOOKMARK_ID);
|
||||||
}
|
}
|
||||||
@ -43,6 +48,10 @@ public class ConnectionReference
|
|||||||
return refStr.startsWith(PATH_PLACEHOLDER);
|
return refStr.startsWith(PATH_PLACEHOLDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isFileReference(String refStr) {
|
||||||
|
return refStr.startsWith(PATH_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
public static long getManualBookmarkId(String refStr) {
|
public static long getManualBookmarkId(String refStr) {
|
||||||
return Integer.parseInt(refStr.substring(PATH_MANUAL_BOOKMARK_ID.length()));
|
return Integer.parseInt(refStr.substring(PATH_MANUAL_BOOKMARK_ID.length()));
|
||||||
}
|
}
|
||||||
@ -54,4 +63,8 @@ public class ConnectionReference
|
|||||||
public static String getPlaceholder(String refStr) {
|
public static String getPlaceholder(String refStr) {
|
||||||
return refStr.substring(PATH_PLACEHOLDER.length());
|
return refStr.substring(PATH_PLACEHOLDER.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFile(String refStr) {
|
||||||
|
return refStr.substring(PATH_FILE.length());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,16 @@
|
|||||||
|
|
||||||
package com.freerdp.freerdpcore.presentation;
|
package com.freerdp.freerdpcore.presentation;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import com.freerdp.freerdpcore.R;
|
import com.freerdp.freerdpcore.R;
|
||||||
import com.freerdp.freerdpcore.application.GlobalApp;
|
import com.freerdp.freerdpcore.application.GlobalApp;
|
||||||
import com.freerdp.freerdpcore.domain.BookmarkBase;
|
import com.freerdp.freerdpcore.domain.BookmarkBase;
|
||||||
import com.freerdp.freerdpcore.domain.ConnectionReference;
|
import com.freerdp.freerdpcore.domain.ConnectionReference;
|
||||||
import com.freerdp.freerdpcore.domain.ManualBookmark;
|
import com.freerdp.freerdpcore.domain.ManualBookmark;
|
||||||
import com.freerdp.freerdpcore.services.BookmarkBaseGateway;
|
import com.freerdp.freerdpcore.services.BookmarkBaseGateway;
|
||||||
|
import com.freerdp.freerdpcore.utils.RDPFileParser;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
@ -25,11 +29,14 @@ import android.os.Bundle;
|
|||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
public class BookmarkActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
|
public class BookmarkActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
|
||||||
{
|
{
|
||||||
public static final String PARAM_CONNECTION_REFERENCE = "conRef";
|
public static final String PARAM_CONNECTION_REFERENCE = "conRef";
|
||||||
|
|
||||||
|
private static final String TAG = "BookmarkActivity";
|
||||||
|
|
||||||
private int current_preferences;
|
private int current_preferences;
|
||||||
private static final int PREFERENCES_BOOKMARK = 1;
|
private static final int PREFERENCES_BOOKMARK = 1;
|
||||||
private static final int PREFERENCES_CREDENTIALS = 2;
|
private static final int PREFERENCES_CREDENTIALS = 2;
|
||||||
@ -78,6 +85,26 @@ public class BookmarkActivity extends PreferenceActivity implements OnSharedPref
|
|||||||
bookmark.<ManualBookmark>get().setHostname(ConnectionReference.getHostname(refStr));
|
bookmark.<ManualBookmark>get().setHostname(ConnectionReference.getHostname(refStr));
|
||||||
new_bookmark = true;
|
new_bookmark = true;
|
||||||
}
|
}
|
||||||
|
else if (ConnectionReference.isFileReference(refStr))
|
||||||
|
{
|
||||||
|
String file = ConnectionReference.getFile(refStr);
|
||||||
|
|
||||||
|
bookmark = new ManualBookmark();
|
||||||
|
bookmark.setLabel(file);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
RDPFileParser rdpFile = new RDPFileParser(file);
|
||||||
|
updateBookmarkFromFile((ManualBookmark)bookmark, rdpFile);
|
||||||
|
|
||||||
|
bookmark.setLabel(new File(file).getName());
|
||||||
|
new_bookmark = true;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
Log.e(TAG, "Failed reading RDP file", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,6 +171,54 @@ public class BookmarkActivity extends PreferenceActivity implements OnSharedPref
|
|||||||
setIntentComponentNames();
|
setIntentComponentNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateBookmarkFromFile(ManualBookmark bookmark, RDPFileParser rdpFile)
|
||||||
|
{
|
||||||
|
String s;
|
||||||
|
Integer i;
|
||||||
|
|
||||||
|
s = rdpFile.getString("full address");
|
||||||
|
if (s != null)
|
||||||
|
{
|
||||||
|
// this gets complicated as it can include port
|
||||||
|
if (s.lastIndexOf(":") > s.lastIndexOf("]"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String port = s.substring(s.lastIndexOf(":") + 1);
|
||||||
|
bookmark.setPort(Integer.parseInt(port));
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
Log.e(TAG, "Malformed address");
|
||||||
|
}
|
||||||
|
|
||||||
|
s = s.substring(0, s.lastIndexOf(":"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// or even be an ipv6 address
|
||||||
|
if (s.startsWith("[") && s.endsWith("]"))
|
||||||
|
s = s.substring(1, s.length() - 1);
|
||||||
|
|
||||||
|
bookmark.setHostname(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = rdpFile.getInteger("server port");
|
||||||
|
if (i != null)
|
||||||
|
bookmark.setPort(i);
|
||||||
|
|
||||||
|
s = rdpFile.getString("username");
|
||||||
|
if (s != null)
|
||||||
|
bookmark.setUsername(s);
|
||||||
|
|
||||||
|
s = rdpFile.getString("domain");
|
||||||
|
if (s != null)
|
||||||
|
bookmark.setDomain(s);
|
||||||
|
|
||||||
|
i = rdpFile.getInteger("connect to console");
|
||||||
|
if (i != null)
|
||||||
|
bookmark.getAdvancedSettings().setConsoleMode(i == 1);
|
||||||
|
}
|
||||||
|
|
||||||
private void setIntentComponentNames()
|
private void setIntentComponentNames()
|
||||||
{
|
{
|
||||||
// we set the component name for our sub-activity calls here because we don't know the package
|
// we set the component name for our sub-activity calls here because we don't know the package
|
||||||
|
@ -26,26 +26,27 @@ import android.app.AlertDialog;
|
|||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.ContextMenu;
|
||||||
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ContextMenu;
|
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ContextMenu.ContextMenuInfo;
|
|
||||||
import android.view.View.OnCreateContextMenuListener;
|
import android.view.View.OnCreateContextMenuListener;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.webkit.WebViewClient;
|
import android.webkit.WebViewClient;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.AdapterView.AdapterContextMenuInfo;
|
|
||||||
|
|
||||||
public class HomeActivity extends Activity
|
public class HomeActivity extends Activity
|
||||||
{
|
{
|
||||||
@ -87,6 +88,21 @@ public class HomeActivity extends Activity
|
|||||||
addBookmarkPlaceholder.setName(ADD_BOOKMARK_PLACEHOLDER);
|
addBookmarkPlaceholder.setName(ADD_BOOKMARK_PLACEHOLDER);
|
||||||
addBookmarkPlaceholder.setLabel(getResources().getString(R.string.list_placeholder_add_bookmark));
|
addBookmarkPlaceholder.setLabel(getResources().getString(R.string.list_placeholder_add_bookmark));
|
||||||
|
|
||||||
|
// check for passed .rdp file and open it in a new bookmark
|
||||||
|
Intent caller = getIntent();
|
||||||
|
Uri callParameter = caller.getData();
|
||||||
|
|
||||||
|
if (Intent.ACTION_VIEW.equals(caller.getAction()) && callParameter != null)
|
||||||
|
{
|
||||||
|
String refStr = ConnectionReference.getFileReference(callParameter.getPath());
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
|
||||||
|
|
||||||
|
Intent bookmarkIntent = new Intent(this.getApplicationContext(), BookmarkActivity.class);
|
||||||
|
bookmarkIntent.putExtras(bundle);
|
||||||
|
startActivity(bookmarkIntent);
|
||||||
|
}
|
||||||
|
|
||||||
// load views
|
// load views
|
||||||
clearTextButton = (Button) findViewById(R.id.clear_search_btn);
|
clearTextButton = (Button) findViewById(R.id.clear_search_btn);
|
||||||
superBarEditText = (EditText) findViewById(R.id.superBarEditText);
|
superBarEditText = (EditText) findViewById(R.id.superBarEditText);
|
||||||
|
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
Simple .RDP file parser
|
||||||
|
|
||||||
|
Copyright 2013 Blaz Bacnik
|
||||||
|
|
||||||
|
This Source Code Form is subject to the terms of the Mozilla Public License, v. 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.freerdp.freerdpcore.utils;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class RDPFileParser {
|
||||||
|
|
||||||
|
private static final int MAX_ERRORS = 20;
|
||||||
|
private static final int MAX_LINES = 500;
|
||||||
|
|
||||||
|
private HashMap<String, Object> options;
|
||||||
|
|
||||||
|
private void init()
|
||||||
|
{
|
||||||
|
options = new HashMap<String, Object>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RDPFileParser()
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RDPFileParser(String filename) throws IOException
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
parse(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void parse(String filename) throws IOException
|
||||||
|
{
|
||||||
|
BufferedReader br = new BufferedReader(new FileReader(filename));
|
||||||
|
String line = null;
|
||||||
|
|
||||||
|
int errors = 0;
|
||||||
|
int lines = 0;
|
||||||
|
boolean ok;
|
||||||
|
|
||||||
|
while ((line = br.readLine()) != null)
|
||||||
|
{
|
||||||
|
lines++; ok = false;
|
||||||
|
|
||||||
|
if (errors > MAX_ERRORS || lines > MAX_LINES)
|
||||||
|
throw new IOException("Parsing limits exceeded");
|
||||||
|
|
||||||
|
String[] fields = line.split(":", 3);
|
||||||
|
|
||||||
|
if (fields.length == 3)
|
||||||
|
{
|
||||||
|
if (fields[1].equals("s"))
|
||||||
|
{
|
||||||
|
options.put(fields[0].toLowerCase(Locale.ENGLISH), fields[2]);
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
else if (fields[1].equals("i"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer i = Integer.parseInt(fields[2]);
|
||||||
|
options.put(fields[0].toLowerCase(Locale.ENGLISH), i);
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e) { }
|
||||||
|
}
|
||||||
|
else if (fields[1].equals("b"))
|
||||||
|
{
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok) errors++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getString(String optionName)
|
||||||
|
{
|
||||||
|
if (options.get(optionName) instanceof String)
|
||||||
|
return (String) options.get(optionName);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getInteger(String optionName)
|
||||||
|
{
|
||||||
|
if (options.get(optionName) instanceof Integer)
|
||||||
|
return (Integer) options.get(optionName);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -23,6 +23,21 @@
|
|||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data
|
||||||
|
android:scheme="file"
|
||||||
|
android:mimeType="application/x-rdp" />
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data
|
||||||
|
android:scheme="file"
|
||||||
|
android:pathPattern=".*\\.rdp"
|
||||||
|
android:mimeType="*/*" />
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- Session request handler activity - used for search and internally to start sessions -->
|
<!-- Session request handler activity - used for search and internally to start sessions -->
|
||||||
|
@ -38,7 +38,7 @@ if(ANDROID_BUILD_JAVA)
|
|||||||
COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE}
|
COMMAND ${ANT_COMMAND} ${ANDROID_BUILD_TYPE}
|
||||||
WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}"
|
WORKING_DIRECTORY "${ANDROID_SOURCE_DIR}"
|
||||||
MAIN_DEPENDENCY AndroidManifest.xml
|
MAIN_DEPENDENCY AndroidManifest.xml
|
||||||
DEPENDS freerdp-android local.properties android-lib
|
DEPENDS freerdp-android local.properties #android-lib
|
||||||
)
|
)
|
||||||
add_custom_target(android-package ALL SOURCES "${APK}")
|
add_custom_target(android-package ALL SOURCES "${APK}")
|
||||||
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin")
|
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin")
|
||||||
|
@ -10,13 +10,14 @@ include_directories(${FRAMEWORK_HEADERS_PATH} /System/Library/Frameworks)
|
|||||||
# set(CMAKE_OSX_SYSROOT MacOSX10.7.sdk)
|
# set(CMAKE_OSX_SYSROOT MacOSX10.7.sdk)
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -mmacosx-version-min=10.4")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -mmacosx-version-min=10.4")
|
||||||
set(GUI_TYPE MACOSX_BUNDLE)
|
set(GUI_TYPE MACOSX_BUNDLE)
|
||||||
|
|
||||||
# Import libraries
|
# Import libraries
|
||||||
find_library(FOUNDATION_LIBRARY Foundation)
|
find_library(FOUNDATION_LIBRARY Foundation)
|
||||||
find_library(COCOA_LIBRARY Cocoa)
|
find_library(COCOA_LIBRARY Cocoa)
|
||||||
find_library(APPKIT_LIBRARY AppKit)
|
find_library(APPKIT_LIBRARY AppKit)
|
||||||
|
|
||||||
set(MACOSX_BUNDLE_INFO_STRING "MacFreeRDP")
|
set(MACOSX_BUNDLE_INFO_STRING "MacFreeRDP")
|
||||||
|
set(MACOSX_BUNDLE_ICON_FILE "FreeRDP.icns")
|
||||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.freerdp.mac")
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.freerdp.mac")
|
||||||
set(MACOSX_BUNDLE_BUNDLE_IDENTIFIER "FreeRDP.Mac")
|
set(MACOSX_BUNDLE_BUNDLE_IDENTIFIER "FreeRDP.Mac")
|
||||||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "MacFreeRDP Version 1.0.1")
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "MacFreeRDP Version 1.0.1")
|
||||||
@ -27,35 +28,37 @@ set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2012. All Rights Reserved.")
|
|||||||
|
|
||||||
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu")
|
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu")
|
||||||
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
|
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
|
||||||
|
|
||||||
mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY)
|
mark_as_advanced(COCOA_LIBRARY FOUNDATION_LIBRARY APPKIT_LIBRARY)
|
||||||
set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY})
|
set(EXTRA_LIBS ${COCOA_LIBRARY} ${FOUNDATION_LIBRARY} ${APPKIT_LIBRARY})
|
||||||
set(APP_TYPE MACOSX_BUNDLE)
|
set(APP_TYPE MACOSX_BUNDLE)
|
||||||
|
|
||||||
# OS X Interface Builder files
|
# OS X Interface Builder files
|
||||||
file(GLOB MacFreeRDP_XIBS *.xib)
|
file(GLOB ${MODULE_NAME}_XIBS *.xib)
|
||||||
|
|
||||||
|
set(${MODULE_NAME}_RESOURCES ${${MODULE_NAME}_XIBS} ${MACOSX_BUNDLE_ICON_FILE})
|
||||||
|
|
||||||
# Headers
|
# Headers
|
||||||
file(GLOB MacFreeRDP_Headers *.h)
|
file(GLOB ${MODULE_NAME}_HEADERS *.h)
|
||||||
|
|
||||||
# Source
|
# Source
|
||||||
file(GLOB MacFreeRDP_Source *.m)
|
file(GLOB ${MODULE_NAME}_SOURCES *.m)
|
||||||
|
|
||||||
add_executable(MacFreeRDP
|
add_executable(${MODULE_NAME}
|
||||||
${APP_TYPE}
|
${APP_TYPE}
|
||||||
${MacFreeRDP_Headers}
|
${${MODULE_NAME}_HEADERS}
|
||||||
${MacFreeRDP_Source}
|
${${MODULE_NAME}_SOURCES}
|
||||||
${MacFreeRDP_XIBS})
|
${${MODULE_NAME}_RESOURCES})
|
||||||
|
|
||||||
# This is necessary for the xib file part below
|
# This is necessary for the xib file part below
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
||||||
|
|
||||||
# This allows for automatic xib to nib ibitool
|
# This allows for automatic xib to nib ibitool
|
||||||
set_target_properties(MacFreeRDP PROPERTIES RESOURCE "${MacFreeRDP_XIBS}")
|
set_target_properties(${MODULE_NAME} PROPERTIES RESOURCE "${${MODULE_NAME}_RESOURCES}")
|
||||||
|
|
||||||
# Automatic ref counting
|
# Automatic ref counting
|
||||||
# temporary turn off for x86_64 build issue
|
# temporary turn off for x86_64 build issue
|
||||||
# set_target_properties(MacFreeRDP PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
|
# set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
|
||||||
|
|
||||||
# Support for automatic reference counting requires non-fragile abi.
|
# Support for automatic reference counting requires non-fragile abi.
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-nonfragile-abi")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-nonfragile-abi")
|
||||||
@ -67,10 +70,10 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-nonfragile-abi")
|
|||||||
# In the future the FreeRDP Xcode project should be pulled in for a couple of reasons:
|
# In the future the FreeRDP Xcode project should be pulled in for a couple of reasons:
|
||||||
# 1) better step-into debugging 2) automatic dependency compilation and multi-arch compilation + linkage
|
# 1) better step-into debugging 2) automatic dependency compilation and multi-arch compilation + linkage
|
||||||
# If you know the solutions for 1 and 2, please add below.
|
# If you know the solutions for 1 and 2, please add below.
|
||||||
set_target_properties(MacFreeRDP PROPERTIES XCODE_ATTRIBUTE_ARCHS "$(NATIVE_ARCH_ACTUAL)")
|
set_target_properties(${MODULE_NAME} PROPERTIES XCODE_ATTRIBUTE_ARCHS "$(NATIVE_ARCH_ACTUAL)")
|
||||||
|
|
||||||
# Set the info plist to the custom instance
|
# Set the info plist to the custom instance
|
||||||
set_target_properties(MacFreeRDP PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
set_target_properties(${MODULE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
||||||
|
|
||||||
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS})
|
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${EXTRA_LIBS})
|
||||||
|
|
||||||
@ -82,8 +85,8 @@ set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHI
|
|||||||
|
|
||||||
set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD}
|
set_complex_link_libraries(VARIABLE ${MODULE_PREFIX}_LIBS MONOLITHIC ${MONOLITHIC_BUILD}
|
||||||
MODULE winpr
|
MODULE winpr
|
||||||
MODULES winpr-crt)
|
MODULES winpr-input winpr-crt winpr-utils)
|
||||||
|
|
||||||
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
|
target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
|
||||||
|
|
||||||
set_property(TARGET MacFreeRDP PROPERTY FOLDER "Client/Mac")
|
set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Mac")
|
||||||
|
BIN
client/Mac/FreeRDP.icns
Normal file
BIN
client/Mac/FreeRDP.icns
Normal file
Binary file not shown.
@ -7,7 +7,7 @@
|
|||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
<string></string>
|
<string>FreeRDP</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>FreeRDP.Mac</string>
|
<string>FreeRDP.Mac</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
@ -24,11 +24,11 @@
|
|||||||
@interface MRDPCursor : NSObject
|
@interface MRDPCursor : NSObject
|
||||||
{
|
{
|
||||||
@public
|
@public
|
||||||
rdpPointer *pointer;
|
rdpPointer* pointer;
|
||||||
BYTE *cursor_data; // bitmapped pixel data
|
BYTE* cursor_data;
|
||||||
NSBitmapImageRep *bmiRep;
|
NSBitmapImageRep* bmiRep;
|
||||||
NSCursor *nsCursor;
|
NSCursor* nsCursor;
|
||||||
NSImage *nsImage;
|
NSImage* nsImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -20,4 +20,5 @@
|
|||||||
#import "MRDPCursor.h"
|
#import "MRDPCursor.h"
|
||||||
|
|
||||||
@implementation MRDPCursor
|
@implementation MRDPCursor
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -27,14 +27,6 @@
|
|||||||
|
|
||||||
MRDPRailView* g_mrdpRailView;
|
MRDPRailView* g_mrdpRailView;
|
||||||
|
|
||||||
struct kkey
|
|
||||||
{
|
|
||||||
int key_code;
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct kkey g_keys[];
|
|
||||||
|
|
||||||
- (void) updateDisplay
|
- (void) updateDisplay
|
||||||
{
|
{
|
||||||
BOOL moveWindow = NO;
|
BOOL moveWindow = NO;
|
||||||
@ -553,9 +545,17 @@ extern struct kkey g_keys[];
|
|||||||
- (void) keyDown:(NSEvent *) event
|
- (void) keyDown:(NSEvent *) event
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
BOOL extended;
|
||||||
|
DWORD vkcode;
|
||||||
|
DWORD scancode;
|
||||||
|
|
||||||
key = [event keyCode];
|
key = [event keyCode] + 8;
|
||||||
rdp_instance->input->KeyboardEvent(rdp_instance->input, g_keys[key].flags | KBD_FLAGS_DOWN, g_keys[key].key_code);
|
|
||||||
|
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||||
|
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||||
|
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||||
|
|
||||||
|
rdp_instance->input->KeyboardEvent(rdp_instance->input, extended | KBD_FLAGS_DOWN, scancode & 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
@ -565,9 +565,17 @@ extern struct kkey g_keys[];
|
|||||||
- (void) keyUp:(NSEvent *) event
|
- (void) keyUp:(NSEvent *) event
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
BOOL extended;
|
||||||
|
DWORD vkcode;
|
||||||
|
DWORD scancode;
|
||||||
|
|
||||||
key = [event keyCode];
|
key = [event keyCode] + 8;
|
||||||
rdp_instance->input->KeyboardEvent(rdp_instance->input, g_keys[key].flags | KBD_FLAGS_RELEASE, g_keys[key].key_code);
|
|
||||||
|
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||||
|
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||||
|
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||||
|
|
||||||
|
rdp_instance->input->KeyboardEvent(rdp_instance->input, extended | KBD_FLAGS_RELEASE, scancode & 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
|
@ -41,18 +41,18 @@
|
|||||||
NSMutableArray* cursors;
|
NSMutableArray* cursors;
|
||||||
NSMutableArray* windows;
|
NSMutableArray* windows;
|
||||||
NSTimer* pasteboard_timer;
|
NSTimer* pasteboard_timer;
|
||||||
NSRect rect;
|
|
||||||
NSRect prevWinPosition;
|
NSRect prevWinPosition;
|
||||||
int titleBarHeight;
|
int titleBarHeight;
|
||||||
freerdp* rdp_instance;
|
freerdp* rdp_instance;
|
||||||
rdpContext* rdp_context;
|
rdpContext* rdp_context;
|
||||||
|
CGContextRef bitmap_context;
|
||||||
char* pixel_data;
|
char* pixel_data;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
int argc;
|
int argc;
|
||||||
char** argv;
|
char** argv;
|
||||||
|
|
||||||
// RAIL stuff
|
/* RemoteApp */
|
||||||
MRDPWindow* currentWindow;
|
MRDPWindow* currentWindow;
|
||||||
NSPoint savedDragLocation;
|
NSPoint savedDragLocation;
|
||||||
BOOL mouseInClientArea;
|
BOOL mouseInClientArea;
|
||||||
@ -63,7 +63,7 @@
|
|||||||
BOOL saveInitialDragLoc;
|
BOOL saveInitialDragLoc;
|
||||||
BOOL skipMoveWindowOnce;
|
BOOL skipMoveWindowOnce;
|
||||||
|
|
||||||
// store state info for some keys
|
/* store state info for some keys */
|
||||||
int kdlshift;
|
int kdlshift;
|
||||||
int kdrshift;
|
int kdrshift;
|
||||||
int kdlctrl;
|
int kdlctrl;
|
||||||
@ -76,18 +76,17 @@
|
|||||||
|
|
||||||
@public
|
@public
|
||||||
NSWindow* ourMainWindow;
|
NSWindow* ourMainWindow;
|
||||||
NSPasteboard* pasteboard_rd; // for reading from clipboard
|
NSPasteboard* pasteboard_rd; /* for reading from clipboard */
|
||||||
NSPasteboard* pasteboard_wr; // for writing to clipboard
|
NSPasteboard* pasteboard_wr; /* for writing to clipboard */
|
||||||
int pasteboard_changecount;
|
int pasteboard_changecount;
|
||||||
int pasteboard_format;
|
int pasteboard_format;
|
||||||
int is_connected; // true when connected to RDP server
|
int is_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) rdpConnectError;
|
- (void) rdpConnectError;
|
||||||
- (void) rdpRemoteAppError;
|
- (void) rdpRemoteAppError;
|
||||||
- (void) saveStateInfo :(freerdp *) instance :(rdpContext *) context;
|
- (void) saveStateInfo :(freerdp *) instance :(rdpContext *) context;
|
||||||
- (void) onPasteboardTimerFired :(NSTimer *) timer;
|
- (void) onPasteboardTimerFired :(NSTimer *) timer;
|
||||||
- (void) my_draw_rect :(void *) context;
|
|
||||||
- (void) releaseResources;
|
- (void) releaseResources;
|
||||||
- (void) setViewSize : (int) width : (int) height;
|
- (void) setViewSize : (int) width : (int) height;
|
||||||
|
|
||||||
@ -113,6 +112,7 @@ void pointer_setDefault(rdpContext* context);
|
|||||||
int rdp_connect(void);
|
int rdp_connect(void);
|
||||||
BOOL mac_pre_connect(freerdp* instance);
|
BOOL mac_pre_connect(freerdp* instance);
|
||||||
BOOL mac_post_connect(freerdp* instance);
|
BOOL mac_post_connect(freerdp* instance);
|
||||||
|
BOOL mac_authenticate(freerdp* instance, char** username, char** password, char** domain);
|
||||||
void mac_context_new(freerdp* instance, rdpContext* context);
|
void mac_context_new(freerdp* instance, rdpContext* context);
|
||||||
void mac_context_free(freerdp* instance, rdpContext* context);
|
void mac_context_free(freerdp* instance, rdpContext* context);
|
||||||
void mac_set_bounds(rdpContext* context, rdpBounds* bounds);
|
void mac_set_bounds(rdpContext* context, rdpBounds* bounds);
|
||||||
@ -165,10 +165,10 @@ struct mac_context
|
|||||||
struct cursor
|
struct cursor
|
||||||
{
|
{
|
||||||
rdpPointer* pointer;
|
rdpPointer* pointer;
|
||||||
BYTE* cursor_data; // bitmapped pixel data
|
BYTE* cursor_data;
|
||||||
void* bmiRep; // NSBitmapImageRep
|
void* bmiRep; /* NSBitmapImageRep */
|
||||||
void* nsCursor; // NSCursor
|
void* nsCursor; /* NSCursor */
|
||||||
void* nsImage; // NSImage
|
void* nsImage; /* NSImage */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rgba_data
|
struct rgba_data
|
||||||
@ -179,9 +179,3 @@ struct rgba_data
|
|||||||
char alpha;
|
char alpha;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kkey
|
|
||||||
{
|
|
||||||
int key_code;
|
|
||||||
int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
@ -44,6 +44,12 @@
|
|||||||
|
|
||||||
#import "MRDPView.h"
|
#import "MRDPView.h"
|
||||||
#import "MRDPCursor.h"
|
#import "MRDPCursor.h"
|
||||||
|
#import "PasswordDialog.h"
|
||||||
|
|
||||||
|
#include <winpr/crt.h>
|
||||||
|
#include <winpr/input.h>
|
||||||
|
|
||||||
|
#include <freerdp/constants.h>
|
||||||
|
|
||||||
// RAIL_TODO DELETE WHEN DONE TESTING
|
// RAIL_TODO DELETE WHEN DONE TESTING
|
||||||
#define MRDP_DRAW_INDIVIDUAL_RECTS
|
#define MRDP_DRAW_INDIVIDUAL_RECTS
|
||||||
@ -54,10 +60,6 @@ MRDPView *g_mrdpview;
|
|||||||
|
|
||||||
@synthesize is_connected;
|
@synthesize is_connected;
|
||||||
|
|
||||||
struct kkey g_keys[];
|
|
||||||
|
|
||||||
void convert_color_space(char *dest, char *src, NSRect* drawRect, int width, int height);
|
|
||||||
|
|
||||||
const char* error_code_names[] =
|
const char* error_code_names[] =
|
||||||
{
|
{
|
||||||
"RAIL_EXEC_S_OK",
|
"RAIL_EXEC_S_OK",
|
||||||
@ -69,166 +71,6 @@ const char* error_code_names[] =
|
|||||||
"RAIL_EXEC_E_SESSION_LOCKED"
|
"RAIL_EXEC_E_SESSION_LOCKED"
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kkey g_keys[256] =
|
|
||||||
{
|
|
||||||
{ 0x1e, 0 }, // a 0
|
|
||||||
{ 0x1f, 0 }, // s
|
|
||||||
{ 0x20, 0 }, // d
|
|
||||||
{ 0x21, 0 }, // f
|
|
||||||
{ 0x23, 0 }, // h
|
|
||||||
{ 0x22, 0 }, // g
|
|
||||||
{ 0x2c, 0 }, // z
|
|
||||||
{ 0x2d, 0 }, // x
|
|
||||||
{ 0x2e, 0 }, // c
|
|
||||||
{ 0x2f, 0 }, // v
|
|
||||||
{ 0x00, 0 }, // 10
|
|
||||||
{ 0x30, 0 }, // b
|
|
||||||
{ 0x10, 0 }, // q
|
|
||||||
{ 0x11, 0 }, // w
|
|
||||||
{ 0x12, 0 }, // e
|
|
||||||
{ 0x13, 0 }, // r
|
|
||||||
{ 0x15, 0 }, // y
|
|
||||||
{ 0x14, 0 }, // t
|
|
||||||
{ 0x02, 0 }, // 1
|
|
||||||
{ 0x03, 0 }, // 2
|
|
||||||
{ 0x04, 0 }, // 3 20
|
|
||||||
{ 0x05, 0 }, // 4
|
|
||||||
{ 0x07, 0 }, // 6
|
|
||||||
{ 0x06, 0 }, // 5
|
|
||||||
{ 0x0d, 0 }, // = or +
|
|
||||||
{ 0x0a, 0 }, // 9
|
|
||||||
{ 0x08, 0 }, // 7
|
|
||||||
{ 0x0c, 0 }, // - or _
|
|
||||||
{ 0x09, 0 }, // 8
|
|
||||||
{ 0x0b, 0 }, // 0
|
|
||||||
{ 0x1b, 0 }, // ] or } 30
|
|
||||||
{ 0x18, 0 }, // o
|
|
||||||
{ 0x16, 0 }, // u
|
|
||||||
{ 0x1a, 0 }, // [ or {
|
|
||||||
{ 0x17, 0 }, // i
|
|
||||||
{ 0x19, 0 }, // p
|
|
||||||
{ 0x1c, 0 }, // enter
|
|
||||||
{ 0x26, 0 }, // l
|
|
||||||
{ 0x24, 0 }, // j
|
|
||||||
{ 0x28, 0 }, // ' or "
|
|
||||||
{ 0x25, 0 }, // k 40
|
|
||||||
{ 0x27, 0 }, // ; or :
|
|
||||||
{ 0x2b, 0 }, // \ or |
|
|
||||||
{ 0x33, 0 }, // , or <
|
|
||||||
{ 0x35, 0 }, // / or ?
|
|
||||||
{ 0x31, 0 }, // n
|
|
||||||
{ 0x32, 0 }, // m
|
|
||||||
{ 0x34, 0 }, // . or >
|
|
||||||
{ 0x0f, 0 }, // tab
|
|
||||||
{ 0x39, 0 }, // space
|
|
||||||
{ 0x29, 0 }, // ` or ~ 50
|
|
||||||
{ 0x0e, 0 }, // backspace
|
|
||||||
{ 0x00, 0 }, //
|
|
||||||
{ 0x01, 0 }, // esc
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 }, // 60
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x53, 0 }, // KP.
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x37, 0 }, // KP*
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x4e, 0 }, // KP+
|
|
||||||
{ 0x00, 0 }, // 70
|
|
||||||
{ 0x45, 0 }, // num lock
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x35, 1 }, // KP/
|
|
||||||
{ 0x1c, 1 }, // KPEnter
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x4a, 0 }, // KP-
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 }, // 80
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x52, 0 }, // KP0
|
|
||||||
{ 0x4f, 0 }, // KP1
|
|
||||||
{ 0x50, 0 }, // KP2
|
|
||||||
{ 0x51, 0 }, // KP3
|
|
||||||
{ 0x4b, 0 }, // KP4
|
|
||||||
{ 0x4c, 0 }, // KP5
|
|
||||||
{ 0x4d, 0 }, // KP6
|
|
||||||
{ 0x47, 0 }, // KP7
|
|
||||||
{ 0x00, 0 }, // 90
|
|
||||||
{ 0x48, 0 }, // KP8
|
|
||||||
{ 0x49, 0 }, // KP9
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 }, // 100
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x5d, 1 }, // menu 110
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x52, 1 }, // Insert
|
|
||||||
{ 0x47, 1 }, // Home
|
|
||||||
{ 0x49, 1 }, // PgUp
|
|
||||||
{ 0x53, 1 }, // Delete
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x4f, 1 }, // End
|
|
||||||
{ 0x00, 0 }, // 120
|
|
||||||
{ 0x51, 1 }, // PgDown
|
|
||||||
{ 0x3b, 0 }, // f1
|
|
||||||
{ 0x4b, 1 }, // left
|
|
||||||
{ 0x4d, 1 }, // right
|
|
||||||
{ 0x50, 1 }, // down
|
|
||||||
{ 0x48, 1 }, // up
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
{ 0x00, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
methods we override
|
methods we override
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
@ -528,12 +370,20 @@ struct kkey g_keys[256] =
|
|||||||
- (void) keyDown:(NSEvent *) event
|
- (void) keyDown:(NSEvent *) event
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
BOOL extended;
|
||||||
|
DWORD vkcode;
|
||||||
|
DWORD scancode;
|
||||||
|
|
||||||
if (!is_connected)
|
if (!is_connected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
key = [event keyCode];
|
key = [event keyCode] + 8;
|
||||||
rdp_instance->input->KeyboardEvent(rdp_instance->input, g_keys[key].flags | KBD_FLAGS_DOWN, g_keys[key].key_code);
|
|
||||||
|
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||||
|
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||||
|
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||||
|
|
||||||
|
rdp_instance->input->KeyboardEvent(rdp_instance->input, extended | KBD_FLAGS_DOWN, scancode & 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
@ -543,12 +393,20 @@ struct kkey g_keys[256] =
|
|||||||
- (void) keyUp:(NSEvent *) event
|
- (void) keyUp:(NSEvent *) event
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
BOOL extended;
|
||||||
|
DWORD vkcode;
|
||||||
|
DWORD scancode;
|
||||||
|
|
||||||
if (!is_connected)
|
if (!is_connected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
key = [event keyCode];
|
key = [event keyCode] + 8;
|
||||||
rdp_instance->input->KeyboardEvent(rdp_instance->input, g_keys[key].flags | KBD_FLAGS_RELEASE, g_keys[key].key_code);
|
|
||||||
|
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||||
|
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||||
|
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||||
|
|
||||||
|
rdp_instance->input->KeyboardEvent(rdp_instance->input, extended | KBD_FLAGS_RELEASE, scancode & 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
@ -703,96 +561,36 @@ struct kkey g_keys[256] =
|
|||||||
* called when our view needs refreshing
|
* called when our view needs refreshing
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
- (void) drawRect:(NSRect)dirtyRect
|
- (void) drawRect:(NSRect)rect
|
||||||
{
|
{
|
||||||
if (!rdp_context)
|
if (!rdp_context)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (g_mrdpview->isRemoteApp && g_mrdpview->currentWindow)
|
if (g_mrdpview->isRemoteApp && g_mrdpview->currentWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!bmiRep)
|
if(g_mrdpview->bitmap_context)
|
||||||
{
|
{
|
||||||
pixel_data = (char *) malloc(width * height * sizeof(struct rgba_data));
|
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
|
||||||
bmiRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:(unsigned char **) &pixel_data
|
CGImageRef cgImage = CGBitmapContextCreateImage(g_mrdpview->bitmap_context);
|
||||||
pixelsWide:width
|
|
||||||
pixelsHigh:height
|
CGContextClipToRect(context, CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height));
|
||||||
bitsPerSample:8
|
CGContextDrawImage(context, CGRectMake(0, 0, [self bounds].size.width, [self bounds].size.height), cgImage);
|
||||||
samplesPerPixel:sizeof(struct rgba_data)
|
|
||||||
hasAlpha:YES
|
CGImageRelease(cgImage);
|
||||||
isPlanar:NO
|
}
|
||||||
colorSpaceName:NSDeviceRGBColorSpace
|
else
|
||||||
bitmapFormat:0 //NSAlphaFirstBitmapFormat
|
{
|
||||||
bytesPerRow:width * sizeof(struct rgba_data)
|
// just clear the screen with black
|
||||||
bitsPerPixel:0];
|
[[NSColor redColor] set];
|
||||||
}
|
NSRectFill([self bounds]);
|
||||||
|
}
|
||||||
[bmiRep drawInRect:dirtyRect fromRect:dirtyRect operation:NSCompositeCopy fraction:1.0 respectFlipped:NO hints:nil];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
instance methods
|
instance methods
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
/** *********************************************************************
|
|
||||||
* called when RDP server wants us to update a rect with new data
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
- (void) my_draw_rect:(void*)context
|
|
||||||
{
|
|
||||||
int w;
|
|
||||||
int h;
|
|
||||||
|
|
||||||
rdpContext* ctx = (rdpContext*) context;
|
|
||||||
|
|
||||||
struct rgba_data
|
|
||||||
{
|
|
||||||
char red;
|
|
||||||
char green;
|
|
||||||
char blue;
|
|
||||||
char alpha;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isRemoteApp && currentWindow)
|
|
||||||
{
|
|
||||||
NSRect vrect = [ [currentWindow view] frame];
|
|
||||||
[[currentWindow view] setNeedsDisplayInRect:vrect];
|
|
||||||
// actual drawing will be done in MRDPRailView:drawRect()
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
w = width;
|
|
||||||
h = height;
|
|
||||||
rect.origin.x = 0;
|
|
||||||
rect.origin.y = 0;
|
|
||||||
rect.size.width = w;
|
|
||||||
rect.size.height = h;
|
|
||||||
|
|
||||||
if (!bmiRep)
|
|
||||||
{
|
|
||||||
pixel_data = (char *) malloc(w * h * sizeof(struct rgba_data));
|
|
||||||
bmiRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:(unsigned char **) &pixel_data
|
|
||||||
pixelsWide:w
|
|
||||||
pixelsHigh:h
|
|
||||||
bitsPerSample:8
|
|
||||||
samplesPerPixel:sizeof(struct rgba_data)
|
|
||||||
hasAlpha:YES
|
|
||||||
isPlanar:NO
|
|
||||||
colorSpaceName:NSDeviceRGBColorSpace
|
|
||||||
bitmapFormat:0 //NSAlphaFirstBitmapFormat
|
|
||||||
bytesPerRow:w * sizeof(struct rgba_data)
|
|
||||||
bitsPerPixel:0];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MRDP_DRAW_INDIVIDUAL_RECTS
|
|
||||||
[self setNeedsDisplayInRect:rect];
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
convert_color_space(pixel_data, (char *) ctx->gdi->primary_buffer, &rect, w, h);
|
|
||||||
[self setNeedsDisplayInRect:rect];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
* save state info for use by other methods later on
|
* save state info for use by other methods later on
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
@ -854,9 +652,14 @@ struct kkey g_keys[256] =
|
|||||||
|
|
||||||
- (void) rdpConnectError
|
- (void) rdpConnectError
|
||||||
{
|
{
|
||||||
|
NSString* message = @"Error connecting to server";
|
||||||
|
if (connectErrorCode == AUTHENTICATIONERROR)
|
||||||
|
{
|
||||||
|
message = [NSString stringWithFormat:@"%@:\n%@", message, @"Authentication failure, check credentials."];
|
||||||
|
}
|
||||||
|
|
||||||
NSAlert *alert = [[NSAlert alloc] init];
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
[alert setMessageText:@"Error connecting to server"];
|
[alert setMessageText:message];
|
||||||
[alert beginSheetModalForWindow:[g_mrdpview window]
|
[alert beginSheetModalForWindow:[g_mrdpview window]
|
||||||
modalDelegate:g_mrdpview
|
modalDelegate:g_mrdpview
|
||||||
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
|
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
|
||||||
@ -1012,6 +815,7 @@ int rdp_connect()
|
|||||||
instance->ContextNew = mac_context_new;
|
instance->ContextNew = mac_context_new;
|
||||||
instance->ContextFree = mac_context_free;
|
instance->ContextFree = mac_context_free;
|
||||||
instance->ReceiveChannelData = receive_channel_data;
|
instance->ReceiveChannelData = receive_channel_data;
|
||||||
|
instance->Authenticate = mac_authenticate;
|
||||||
freerdp_context_new(instance);
|
freerdp_context_new(instance);
|
||||||
|
|
||||||
status = freerdp_connect(instance);
|
status = freerdp_connect(instance);
|
||||||
@ -1044,45 +848,14 @@ BOOL mac_pre_connect(freerdp* instance)
|
|||||||
int len;
|
int len;
|
||||||
int status;
|
int status;
|
||||||
char* cptr;
|
char* cptr;
|
||||||
|
rdpSettings* settings;
|
||||||
instance->settings->OffscreenSupportLevel = FALSE;
|
BOOL bitmap_cache;
|
||||||
instance->settings->GlyphSupportLevel = GLYPH_SUPPORT_FULL;
|
|
||||||
instance->settings->OrderSupport[NEG_GLYPH_INDEX_INDEX] = TRUE;
|
|
||||||
instance->settings->OrderSupport[NEG_FAST_GLYPH_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_FAST_INDEX_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE;
|
|
||||||
instance->settings->OrderSupport[NEG_SAVEBITMAP_INDEX] = FALSE;
|
|
||||||
|
|
||||||
instance->settings->BitmapCacheEnabled = TRUE;
|
|
||||||
instance->settings->OrderSupport[NEG_MEMBLT_INDEX] = TRUE;
|
|
||||||
instance->settings->OrderSupport[NEG_MEMBLT_V2_INDEX] = TRUE;
|
|
||||||
instance->settings->OrderSupport[NEG_MEM3BLT_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_MEM3BLT_V2_INDEX] = FALSE;
|
|
||||||
instance->settings->BitmapCacheV2NumCells = 3; // 5;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[0].numEntries = 0x78; // 600;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[0].persistent = FALSE;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[1].numEntries = 0x78; // 600;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[1].persistent = FALSE;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[2].numEntries = 0x150; // 2048;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[2].persistent = FALSE;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[3].numEntries = 0; // 4096;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[3].persistent = FALSE;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[4].numEntries = 0; // 2048;
|
|
||||||
instance->settings->BitmapCacheV2CellInfo[4].persistent = FALSE;
|
|
||||||
|
|
||||||
instance->settings->OrderSupport[NEG_MULTIDSTBLT_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_MULTIPATBLT_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_MULTISCRBLT_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_MULTIOPAQUERECT_INDEX] = FALSE;
|
|
||||||
instance->settings->OrderSupport[NEG_POLYLINE_INDEX] = FALSE;
|
|
||||||
instance->settings->ColorDepth = 24;
|
|
||||||
instance->settings->SoftwareGdi = 1;
|
|
||||||
|
|
||||||
// setup callbacks
|
// setup callbacks
|
||||||
instance->update->BeginPaint = mac_begin_paint;
|
instance->update->BeginPaint = mac_begin_paint;
|
||||||
instance->update->EndPaint = mac_end_paint;
|
instance->update->EndPaint = mac_end_paint;
|
||||||
instance->update->SetBounds = mac_set_bounds;
|
instance->update->SetBounds = mac_set_bounds;
|
||||||
instance->update->BitmapUpdate = mac_bitmap_update;
|
//instance->update->BitmapUpdate = mac_bitmap_update;
|
||||||
|
|
||||||
NSArray *args = [[NSProcessInfo processInfo] arguments];
|
NSArray *args = [[NSProcessInfo processInfo] arguments];
|
||||||
|
|
||||||
@ -1153,12 +926,51 @@ BOOL mac_pre_connect(freerdp* instance)
|
|||||||
[NSApp terminate:nil];
|
[NSApp terminate:nil];
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||||
|
|
||||||
|
settings = instance->settings;
|
||||||
|
bitmap_cache = settings->BitmapCacheEnabled;
|
||||||
|
|
||||||
|
instance->settings->ColorDepth = 32;
|
||||||
|
instance->settings->SoftwareGdi = TRUE;
|
||||||
|
|
||||||
|
settings->OsMajorType = OSMAJORTYPE_UNIX;
|
||||||
|
settings->OsMinorType = OSMINORTYPE_NATIVE_XSERVER;
|
||||||
|
|
||||||
|
settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_OPAQUE_RECT_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_DRAWNINEGRID_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_MULTIDSTBLT_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_MULTIPATBLT_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_MULTISCRBLT_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_MULTIOPAQUERECT_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_MULTI_DRAWNINEGRID_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_LINETO_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_POLYLINE_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_MEMBLT_INDEX] = bitmap_cache;
|
||||||
|
|
||||||
|
settings->OrderSupport[NEG_MEM3BLT_INDEX] = (settings->SoftwareGdi) ? TRUE : FALSE;
|
||||||
|
|
||||||
|
settings->OrderSupport[NEG_MEMBLT_V2_INDEX] = bitmap_cache;
|
||||||
|
settings->OrderSupport[NEG_MEM3BLT_V2_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_SAVEBITMAP_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_GLYPH_INDEX_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_FAST_INDEX_INDEX] = TRUE;
|
||||||
|
settings->OrderSupport[NEG_FAST_GLYPH_INDEX] = TRUE;
|
||||||
|
|
||||||
|
settings->OrderSupport[NEG_POLYGON_SC_INDEX] = (settings->SoftwareGdi) ? FALSE : TRUE;
|
||||||
|
settings->OrderSupport[NEG_POLYGON_CB_INDEX] = (settings->SoftwareGdi) ? FALSE : TRUE;
|
||||||
|
|
||||||
|
settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE;
|
||||||
|
|
||||||
[g_mrdpview setViewSize:instance->settings->DesktopWidth :instance->settings->DesktopHeight];
|
[g_mrdpview setViewSize:instance->settings->DesktopWidth :instance->settings->DesktopHeight];
|
||||||
|
|
||||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1184,22 +996,25 @@ BOOL mac_post_connect(freerdp* instance)
|
|||||||
void* wr_fds[32];
|
void* wr_fds[32];
|
||||||
rdpPointer rdp_pointer;
|
rdpPointer rdp_pointer;
|
||||||
|
|
||||||
memset(&rdp_pointer, 0, sizeof(rdpPointer));
|
ZeroMemory(&rdp_pointer, sizeof(rdpPointer));
|
||||||
rdp_pointer.size = sizeof(rdpPointer);
|
rdp_pointer.size = sizeof(rdpPointer);
|
||||||
rdp_pointer.New = pointer_new;
|
rdp_pointer.New = mf_Pointer_New;
|
||||||
rdp_pointer.Free = pointer_free;
|
rdp_pointer.Free = mf_Pointer_Free;
|
||||||
rdp_pointer.Set = pointer_set;
|
rdp_pointer.Set = mf_Pointer_Set;
|
||||||
rdp_pointer.SetNull = pointer_setNull;
|
rdp_pointer.SetNull = mf_Pointer_SetNull;
|
||||||
rdp_pointer.SetDefault = pointer_setDefault;
|
rdp_pointer.SetDefault = mf_Pointer_SetDefault;
|
||||||
|
|
||||||
flags = CLRCONV_ALPHA;
|
flags = CLRBUF_32BPP;
|
||||||
flags |= CLRBUF_32BPP;
|
|
||||||
|
|
||||||
gdi_init(instance, flags, NULL);
|
gdi_init(instance, flags, NULL);
|
||||||
|
|
||||||
|
rdpGdi* gdi = instance->context->gdi;
|
||||||
|
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||||
|
g_mrdpview->bitmap_context = CGBitmapContextCreate(gdi->primary_buffer, gdi->width, gdi->height, 8, gdi->width * 4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);
|
||||||
|
|
||||||
pointer_cache_register_callbacks(instance->update);
|
pointer_cache_register_callbacks(instance->update);
|
||||||
graphics_register_pointer(instance->context->graphics, &rdp_pointer);
|
graphics_register_pointer(instance->context->graphics, &rdp_pointer);
|
||||||
|
|
||||||
// register file descriptors with the RunLoop
|
/* register file descriptors with the RunLoop */
|
||||||
if (!freerdp_get_fds(instance, rd_fds, &rd_count, 0, 0))
|
if (!freerdp_get_fds(instance, rd_fds, &rd_count, 0, 0))
|
||||||
{
|
{
|
||||||
printf("mac_post_connect: freerdp_get_fds() failed!\n");
|
printf("mac_post_connect: freerdp_get_fds() failed!\n");
|
||||||
@ -1211,7 +1026,7 @@ BOOL mac_post_connect(freerdp* instance)
|
|||||||
}
|
}
|
||||||
register_fds(fds, rd_count, instance);
|
register_fds(fds, rd_count, instance);
|
||||||
|
|
||||||
// register channel manager file descriptors with the RunLoop
|
/* register channel manager file descriptors with the RunLoop */
|
||||||
if (!freerdp_channels_get_fds(instance->context->channels, instance, rd_fds, &rd_count, wr_fds, &wr_count))
|
if (!freerdp_channels_get_fds(instance->context->channels, instance, rd_fds, &rd_count, wr_fds, &wr_count))
|
||||||
{
|
{
|
||||||
printf("ERROR: freerdp_channels_get_fds() failed\n");
|
printf("ERROR: freerdp_channels_get_fds() failed\n");
|
||||||
@ -1224,25 +1039,53 @@ BOOL mac_post_connect(freerdp* instance)
|
|||||||
register_channel_fds(fds, rd_count, instance);
|
register_channel_fds(fds, rd_count, instance);
|
||||||
freerdp_channels_post_connect(instance->context->channels, instance);
|
freerdp_channels_post_connect(instance->context->channels, instance);
|
||||||
|
|
||||||
// setup RAIL (remote app)
|
/* setup RemoteApp */
|
||||||
instance->context->rail = rail_new(instance->settings);
|
instance->context->rail = rail_new(instance->settings);
|
||||||
rail_register_update_callbacks(instance->context->rail, instance->update);
|
rail_register_update_callbacks(instance->context->rail, instance->update);
|
||||||
mac_rail_register_callbacks(instance, instance->context->rail);
|
mac_rail_register_callbacks(instance, instance->context->rail);
|
||||||
|
|
||||||
// setup pasteboard (aka clipboard) for copy operations (write only)
|
/* setup pasteboard (aka clipboard) for copy operations (write only) */
|
||||||
g_mrdpview->pasteboard_wr = [NSPasteboard generalPasteboard];
|
g_mrdpview->pasteboard_wr = [NSPasteboard generalPasteboard];
|
||||||
|
|
||||||
// setup pasteboard for read operations
|
/* setup pasteboard for read operations */
|
||||||
g_mrdpview->pasteboard_rd = [NSPasteboard generalPasteboard];
|
g_mrdpview->pasteboard_rd = [NSPasteboard generalPasteboard];
|
||||||
g_mrdpview->pasteboard_changecount = (int) [g_mrdpview->pasteboard_rd changeCount];
|
g_mrdpview->pasteboard_changecount = (int) [g_mrdpview->pasteboard_rd changeCount];
|
||||||
g_mrdpview->pasteboard_timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:g_mrdpview selector:@selector(onPasteboardTimerFired:) userInfo:nil repeats:YES];
|
g_mrdpview->pasteboard_timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:g_mrdpview selector:@selector(onPasteboardTimerFired:) userInfo:nil repeats:YES];
|
||||||
|
|
||||||
// we want to be notified when window resizes
|
/* we want to be notified when window resizes */
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:g_mrdpview selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:g_mrdpview selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:nil];
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL mac_authenticate(freerdp* instance, char** username, char** password, char** domain)
|
||||||
|
{
|
||||||
|
PasswordDialog* dialog = [PasswordDialog new];
|
||||||
|
|
||||||
|
dialog.serverName = [NSString stringWithCString:instance->settings->ServerHostname encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
if (*username)
|
||||||
|
dialog.userName = [NSString stringWithCString:*username encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
if (*password)
|
||||||
|
dialog.password = [NSString stringWithCString:*password encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
BOOL ok = [dialog runModal];
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
const char* submittedUsername = [dialog.userName cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
*username = malloc((strlen(submittedUsername) + 1) * sizeof(char));
|
||||||
|
strcpy(*username, submittedUsername);
|
||||||
|
|
||||||
|
const char* submittedPassword = [dialog.password cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
*password = malloc((strlen(submittedPassword) + 1) * sizeof(char));
|
||||||
|
strcpy(*password, submittedPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
* create a new mouse cursor
|
* create a new mouse cursor
|
||||||
*
|
*
|
||||||
@ -1251,18 +1094,23 @@ BOOL mac_post_connect(freerdp* instance)
|
|||||||
*
|
*
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
void pointer_new(rdpContext* context, rdpPointer* pointer)
|
void mf_Pointer_New(rdpContext* context, rdpPointer* pointer)
|
||||||
{
|
{
|
||||||
BYTE* cursor_data;
|
|
||||||
MRDPCursor *mrdpCursor = [[MRDPCursor alloc] init];
|
|
||||||
|
|
||||||
NSRect rect;
|
NSRect rect;
|
||||||
|
NSImage* image;
|
||||||
|
NSPoint hotSpot;
|
||||||
|
NSCursor* cursor;
|
||||||
|
BYTE* cursor_data;
|
||||||
|
NSMutableArray* ma;
|
||||||
|
NSBitmapImageRep* bmiRep;
|
||||||
|
MRDPCursor* mrdpCursor = [[MRDPCursor alloc] init];
|
||||||
|
|
||||||
rect.size.width = pointer->width;
|
rect.size.width = pointer->width;
|
||||||
rect.size.height = pointer->height;
|
rect.size.height = pointer->height;
|
||||||
rect.origin.x = pointer->xPos;
|
rect.origin.x = pointer->xPos;
|
||||||
rect.origin.y = pointer->yPos;
|
rect.origin.y = pointer->yPos;
|
||||||
|
|
||||||
cursor_data = (BYTE *) malloc(rect.size.width * rect.size.height * 4);
|
cursor_data = (BYTE*) malloc(rect.size.width * rect.size.height * 4);
|
||||||
mrdpCursor->cursor_data = cursor_data;
|
mrdpCursor->cursor_data = cursor_data;
|
||||||
|
|
||||||
freerdp_alpha_cursor_convert(cursor_data, pointer->xorMaskData, pointer->andMaskData,
|
freerdp_alpha_cursor_convert(cursor_data, pointer->xorMaskData, pointer->andMaskData,
|
||||||
@ -1271,13 +1119,12 @@ void pointer_new(rdpContext* context, rdpPointer* pointer)
|
|||||||
// TODO if xorBpp is > 24 need to call freerdp_image_swap_color_order
|
// TODO if xorBpp is > 24 need to call freerdp_image_swap_color_order
|
||||||
// see file df_graphics.c
|
// see file df_graphics.c
|
||||||
|
|
||||||
// store cursor bitmap image in representation - required by NSImage
|
/* store cursor bitmap image in representation - required by NSImage */
|
||||||
NSBitmapImageRep *bmiRep;
|
|
||||||
bmiRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:(unsigned char **) &cursor_data
|
bmiRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:(unsigned char **) &cursor_data
|
||||||
pixelsWide:rect.size.width
|
pixelsWide:rect.size.width
|
||||||
pixelsHigh:rect.size.height
|
pixelsHigh:rect.size.height
|
||||||
bitsPerSample:8
|
bitsPerSample:8
|
||||||
samplesPerPixel:sizeof(struct rgba_data)
|
samplesPerPixel:4
|
||||||
hasAlpha:YES
|
hasAlpha:YES
|
||||||
isPlanar:NO
|
isPlanar:NO
|
||||||
colorSpaceName:NSDeviceRGBColorSpace
|
colorSpaceName:NSDeviceRGBColorSpace
|
||||||
@ -1286,23 +1133,22 @@ void pointer_new(rdpContext* context, rdpPointer* pointer)
|
|||||||
bitsPerPixel:0];
|
bitsPerPixel:0];
|
||||||
mrdpCursor->bmiRep = bmiRep;
|
mrdpCursor->bmiRep = bmiRep;
|
||||||
|
|
||||||
// create an image using above representation
|
/* create an image using above representation */
|
||||||
NSImage *image = [[NSImage alloc] initWithSize:[bmiRep size]];
|
image = [[NSImage alloc] initWithSize:[bmiRep size]];
|
||||||
[image addRepresentation: bmiRep];
|
[image addRepresentation: bmiRep];
|
||||||
[image setFlipped:NO];
|
[image setFlipped:NO];
|
||||||
mrdpCursor->nsImage = image;
|
mrdpCursor->nsImage = image;
|
||||||
|
|
||||||
// need hotspot to create cursor
|
/* need hotspot to create cursor */
|
||||||
NSPoint hotSpot;
|
|
||||||
hotSpot.x = pointer->xPos;
|
hotSpot.x = pointer->xPos;
|
||||||
hotSpot.y = pointer->yPos;
|
hotSpot.y = pointer->yPos;
|
||||||
|
|
||||||
NSCursor *cursor = [[NSCursor alloc] initWithImage: image hotSpot:hotSpot];
|
cursor = [[NSCursor alloc] initWithImage: image hotSpot:hotSpot];
|
||||||
mrdpCursor->nsCursor = cursor;
|
mrdpCursor->nsCursor = cursor;
|
||||||
mrdpCursor->pointer = pointer;
|
mrdpCursor->pointer = pointer;
|
||||||
|
|
||||||
// save cursor for later use in pointer_set()
|
/* save cursor for later use in mf_Pointer_Set() */
|
||||||
NSMutableArray *ma = g_mrdpview->cursors;
|
ma = g_mrdpview->cursors;
|
||||||
[ma addObject:mrdpCursor];
|
[ma addObject:mrdpCursor];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1310,7 +1156,7 @@ void pointer_new(rdpContext* context, rdpPointer* pointer)
|
|||||||
* release resources on specified cursor
|
* release resources on specified cursor
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
void pointer_free(rdpContext* context, rdpPointer* pointer)
|
void mf_Pointer_Free(rdpContext* context, rdpPointer* pointer)
|
||||||
{
|
{
|
||||||
NSMutableArray* ma = g_mrdpview->cursors;
|
NSMutableArray* ma = g_mrdpview->cursors;
|
||||||
|
|
||||||
@ -1332,7 +1178,7 @@ void pointer_free(rdpContext* context, rdpPointer* pointer)
|
|||||||
* set specified cursor as the current cursor
|
* set specified cursor as the current cursor
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
void pointer_set(rdpContext* context, rdpPointer* pointer)
|
void mf_Pointer_Set(rdpContext* context, rdpPointer* pointer)
|
||||||
{
|
{
|
||||||
NSMutableArray* ma = g_mrdpview->cursors;
|
NSMutableArray* ma = g_mrdpview->cursors;
|
||||||
|
|
||||||
@ -1353,7 +1199,7 @@ void pointer_set(rdpContext* context, rdpPointer* pointer)
|
|||||||
* do not display any mouse cursor
|
* do not display any mouse cursor
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
void pointer_setNull(rdpContext* context)
|
void mf_Pointer_SetNull(rdpContext* context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1361,7 +1207,7 @@ void pointer_setNull(rdpContext* context)
|
|||||||
* display default mouse cursor
|
* display default mouse cursor
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
void pointer_setDefault(rdpContext* context)
|
void mf_Pointer_SetDefault(rdpContext* context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1442,9 +1288,7 @@ void mac_end_paint(rdpContext* context)
|
|||||||
drawRect.origin.y = gdi->primary->hdc->hwnd->cinvalid[i].y;
|
drawRect.origin.y = gdi->primary->hdc->hwnd->cinvalid[i].y;
|
||||||
drawRect.size.width = gdi->primary->hdc->hwnd->cinvalid[i].w;
|
drawRect.size.width = gdi->primary->hdc->hwnd->cinvalid[i].w;
|
||||||
drawRect.size.height = gdi->primary->hdc->hwnd->cinvalid[i].h;
|
drawRect.size.height = gdi->primary->hdc->hwnd->cinvalid[i].h;
|
||||||
|
windows_to_apple_cords(&drawRect);
|
||||||
convert_color_space(g_mrdpview->pixel_data, (char *) gdi->primary_buffer, &drawRect, g_mrdpview->width, g_mrdpview->height);
|
|
||||||
|
|
||||||
[g_mrdpview setNeedsDisplayInRect:drawRect];
|
[g_mrdpview setNeedsDisplayInRect:drawRect];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1460,7 +1304,7 @@ void skt_activity_cb(CFSocketRef s, CFSocketCallBackType callbackType,
|
|||||||
{
|
{
|
||||||
if (!freerdp_check_fds(info))
|
if (!freerdp_check_fds(info))
|
||||||
{
|
{
|
||||||
// lost connection or did not connect
|
/* lost connection or did not connect */
|
||||||
[NSApp terminate:nil];
|
[NSApp terminate:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1544,52 +1388,6 @@ int receive_channel_data(freerdp* instance, int chan_id, BYTE* data, int size, i
|
|||||||
return freerdp_channels_data(instance, chan_id, data, size, flags, total_size);
|
return freerdp_channels_data(instance, chan_id, data, size, flags, total_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
|
||||||
* convert an array containing ARGB data to RGBA
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
void convert_color_space(char* dest, char* src, NSRect* drawRect, int width, int height)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int cx;
|
|
||||||
int cy;
|
|
||||||
int pixel;
|
|
||||||
int pixel1;
|
|
||||||
int pixel2;
|
|
||||||
int* src32;
|
|
||||||
int* dst32;
|
|
||||||
|
|
||||||
if ((!dest) || (!src))
|
|
||||||
return;
|
|
||||||
|
|
||||||
x = drawRect->origin.x;
|
|
||||||
y = drawRect->origin.y;
|
|
||||||
cx = drawRect->size.width;
|
|
||||||
cy = drawRect->size.height;
|
|
||||||
|
|
||||||
for (j = 0; j < cy; j++)
|
|
||||||
{
|
|
||||||
src32 = (int*)(src + ((y + j) * width + x) * 4);
|
|
||||||
dst32 = (int*)(dest + ((y + j) * width + x) * 4);
|
|
||||||
|
|
||||||
for (i = 0; i < cx; i++)
|
|
||||||
{
|
|
||||||
pixel = *src32;
|
|
||||||
pixel1 = (pixel & 0x00ff0000) >> 16;
|
|
||||||
pixel2 = (pixel & 0x000000ff) << 16;
|
|
||||||
pixel = (pixel & 0xff00ff00) | pixel1 | pixel2;
|
|
||||||
*dst32 = pixel;
|
|
||||||
src32++;
|
|
||||||
dst32++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
drawRect->origin.y = height - drawRect->origin.y - drawRect->size.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to load plugins based on the commandline parameters.
|
* Used to load plugins based on the commandline parameters.
|
||||||
* This function is provided as a parameter to freerdp_parse_args(), that will call it
|
* This function is provided as a parameter to freerdp_parse_args(), that will call it
|
||||||
@ -1689,7 +1487,7 @@ void cliprdr_process_cb_monitor_ready_event(freerdp* instance)
|
|||||||
|
|
||||||
event = freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL);
|
event = freerdp_event_new(RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL);
|
||||||
|
|
||||||
format_list_event = (RDP_CB_FORMAT_LIST_EVENT*)event;
|
format_list_event = (RDP_CB_FORMAT_LIST_EVENT*) event;
|
||||||
format_list_event->num_formats = 0;
|
format_list_event->num_formats = 0;
|
||||||
|
|
||||||
freerdp_channels_send_event(instance->context->channels, event);
|
freerdp_channels_send_event(instance->context->channels, event);
|
||||||
@ -1752,32 +1550,40 @@ void process_cliprdr_event(freerdp* instance, RDP_EVENT* event)
|
|||||||
{
|
{
|
||||||
switch (event->event_type)
|
switch (event->event_type)
|
||||||
{
|
{
|
||||||
// Monitor Ready PDU is sent by server to indicate that it has been
|
/*
|
||||||
// inited and is ready. This PDU is transmitted by the server after it has sent
|
* Monitor Ready PDU is sent by server to indicate that it has been
|
||||||
// Clipboard Capabilities PDU
|
* initialized and is ready. This PDU is transmitted by the server after it has sent
|
||||||
|
* Clipboard Capabilities PDU
|
||||||
|
*/
|
||||||
case RDP_EVENT_TYPE_CB_MONITOR_READY:
|
case RDP_EVENT_TYPE_CB_MONITOR_READY:
|
||||||
cliprdr_process_cb_monitor_ready_event(instance);
|
cliprdr_process_cb_monitor_ready_event(instance);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// The Format List PDU is sent either by the client or the server when its
|
/*
|
||||||
// local system clipboard is updated with new clipboard data. This PDU
|
* The Format List PDU is sent either by the client or the server when its
|
||||||
// contains the Clipboard Format ID and name pairs of the new Clipboard
|
* local system clipboard is updated with new clipboard data. This PDU
|
||||||
// Formats on the clipboard
|
* contains the Clipboard Format ID and name pairs of the new Clipboard
|
||||||
|
* Formats on the clipboard
|
||||||
|
*/
|
||||||
case RDP_EVENT_TYPE_CB_FORMAT_LIST:
|
case RDP_EVENT_TYPE_CB_FORMAT_LIST:
|
||||||
cliprdr_process_cb_format_list_event(instance, (RDP_CB_FORMAT_LIST_EVENT*) event);
|
cliprdr_process_cb_format_list_event(instance, (RDP_CB_FORMAT_LIST_EVENT*) event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// The Format Data Request PDU is sent by the receipient of the Format List PDU.
|
/*
|
||||||
// It is used to request the data for one of the formats that was listed in the
|
* The Format Data Request PDU is sent by the receipient of the Format List PDU.
|
||||||
// Format List PDU
|
* It is used to request the data for one of the formats that was listed in the
|
||||||
|
* Format List PDU
|
||||||
|
*/
|
||||||
case RDP_EVENT_TYPE_CB_DATA_REQUEST:
|
case RDP_EVENT_TYPE_CB_DATA_REQUEST:
|
||||||
cliprdr_process_cb_data_request_event(instance);
|
cliprdr_process_cb_data_request_event(instance);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// The Format Data Response PDU is sent as a reply to the Format Data Request PDU.
|
/*
|
||||||
// It is used to indicate whether processing of the Format Data Request PDU
|
* The Format Data Response PDU is sent as a reply to the Format Data Request PDU.
|
||||||
// was successful. If the processing was successful, the Format Data Response PDU
|
* It is used to indicate whether processing of the Format Data Request PDU
|
||||||
// includes the contents of the requested clipboard data
|
* was successful. If the processing was successful, the Format Data Response PDU
|
||||||
|
* includes the contents of the requested clipboard data
|
||||||
|
*/
|
||||||
case RDP_EVENT_TYPE_CB_DATA_RESPONSE:
|
case RDP_EVENT_TYPE_CB_DATA_RESPONSE:
|
||||||
cliprdr_process_cb_data_response_event(instance, (RDP_CB_DATA_RESPONSE_EVENT*) event);
|
cliprdr_process_cb_data_response_event(instance, (RDP_CB_DATA_RESPONSE_EVENT*) event);
|
||||||
break;
|
break;
|
||||||
@ -1853,14 +1659,14 @@ void mac_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
|
|||||||
BOOL displayAsModal = NO;
|
BOOL displayAsModal = NO;
|
||||||
NSMutableArray * ma = g_mrdpview->windows;
|
NSMutableArray * ma = g_mrdpview->windows;
|
||||||
|
|
||||||
// make sure window fits resolution
|
/* make sure window fits resolution */
|
||||||
if (window->windowWidth > g_mrdpview->width)
|
if (window->windowWidth > g_mrdpview->width)
|
||||||
window->windowWidth = g_mrdpview->width;
|
window->windowWidth = g_mrdpview->width;
|
||||||
|
|
||||||
if (window->windowHeight > g_mrdpview->height)
|
if (window->windowHeight > g_mrdpview->height)
|
||||||
window->windowHeight = g_mrdpview->height;
|
window->windowHeight = g_mrdpview->height;
|
||||||
|
|
||||||
// center main window, which is the first to be created
|
/* center main window, which is the first to be created */
|
||||||
if ([ma count] == 0)
|
if ([ma count] == 0)
|
||||||
{
|
{
|
||||||
centerWindow = YES;
|
centerWindow = YES;
|
||||||
@ -1882,7 +1688,7 @@ void mac_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// create NSWindow
|
/* create NSWindow */
|
||||||
NSRect winFrame = NSMakeRect(window->windowOffsetX, window->windowOffsetY,
|
NSRect winFrame = NSMakeRect(window->windowOffsetX, window->windowOffsetY,
|
||||||
window->windowWidth, window->windowHeight);
|
window->windowWidth, window->windowHeight);
|
||||||
if (centerWindow)
|
if (centerWindow)
|
||||||
@ -1893,18 +1699,19 @@ void mac_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
|
|||||||
backing:NSBackingStoreBuffered
|
backing:NSBackingStoreBuffered
|
||||||
defer:NO];
|
defer:NO];
|
||||||
|
|
||||||
// this does not work if specified during window creation in above code
|
/* this does not work if specified during window creation in above code */
|
||||||
[newWindow setStyleMask:NSBorderlessWindowMask];
|
[newWindow setStyleMask:NSBorderlessWindowMask];
|
||||||
|
|
||||||
if (moveWindow) {
|
if (moveWindow)
|
||||||
// let RDP server know that window has moved
|
{
|
||||||
|
/* let RDP server know that window has moved */
|
||||||
RAIL_WINDOW_MOVE_ORDER windowMove;
|
RAIL_WINDOW_MOVE_ORDER windowMove;
|
||||||
apple_to_windowMove(&winFrame, &windowMove);
|
apple_to_windowMove(&winFrame, &windowMove);
|
||||||
windowMove.windowId = window->windowId;
|
windowMove.windowId = window->windowId;
|
||||||
mac_send_rail_client_event(g_mrdpview->rdp_instance->context->channels, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &windowMove);
|
mac_send_rail_client_event(g_mrdpview->rdp_instance->context->channels, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &windowMove);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create MRDPRailView and add to above window
|
/* create MRDPRailView and add to above window */
|
||||||
NSRect viewFrame = NSMakeRect(window->clientOffsetX, window->clientOffsetY,
|
NSRect viewFrame = NSMakeRect(window->clientOffsetX, window->clientOffsetY,
|
||||||
window->clientAreaWidth, window->clientAreaHeight);
|
window->clientAreaWidth, window->clientAreaHeight);
|
||||||
|
|
||||||
@ -1912,30 +1719,33 @@ void mac_rail_CreateWindow(rdpRail* rail, rdpWindow* window)
|
|||||||
[newView setRdpInstance:g_mrdpview->rdp_instance width:g_mrdpview->width andHeight:g_mrdpview->height windowID: window->windowId];
|
[newView setRdpInstance:g_mrdpview->rdp_instance width:g_mrdpview->width andHeight:g_mrdpview->height windowID: window->windowId];
|
||||||
[newWindow setContentView:newView];
|
[newWindow setContentView:newView];
|
||||||
|
|
||||||
// save new window
|
/* save new window */
|
||||||
MRDPWindow * mrdpWindow = [[MRDPWindow alloc] init];
|
MRDPWindow * mrdpWindow = [[MRDPWindow alloc] init];
|
||||||
[mrdpWindow setWindowID:window->windowId];
|
[mrdpWindow setWindowID:window->windowId];
|
||||||
[mrdpWindow setWindow:newWindow];
|
[mrdpWindow setWindow:newWindow];
|
||||||
[mrdpWindow setView:newView];
|
[mrdpWindow setView:newView];
|
||||||
|
|
||||||
// add to list of windows
|
/* add to list of windows */
|
||||||
[ma addObject:mrdpWindow];
|
[ma addObject:mrdpWindow];
|
||||||
|
|
||||||
// make new window current
|
/* make new window current */
|
||||||
g_mrdpview->currentWindow = mrdpWindow;
|
g_mrdpview->currentWindow = mrdpWindow;
|
||||||
|
|
||||||
if (displayAsModal)
|
if (displayAsModal)
|
||||||
{
|
{
|
||||||
// display as modal window
|
/* display as modal window */
|
||||||
NSModalSession session = [NSApp beginModalSessionForWindow:newWindow];
|
NSModalSession session = [NSApp beginModalSessionForWindow:newWindow];
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
|
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
[NSApp endModalSession:session];
|
[NSApp endModalSession:session];
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
[newWindow makeKeyAndOrderFront:NSApp];
|
[newWindow makeKeyAndOrderFront:NSApp];
|
||||||
[[g_mrdpview window] resignFirstResponder];
|
[[g_mrdpview window] resignFirstResponder];
|
||||||
[g_mrdpview resignFirstResponder];
|
[g_mrdpview resignFirstResponder];
|
||||||
@ -1956,22 +1766,27 @@ void mac_rail_MoveWindow(rdpRail* rail, rdpWindow* window)
|
|||||||
|
|
||||||
void mac_rail_ShowWindow(rdpRail* rail, rdpWindow* window, BYTE state)
|
void mac_rail_ShowWindow(rdpRail* rail, rdpWindow* window, BYTE state)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
|
void mac_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_rail_SetWindowIcon(rdpRail* rail, rdpWindow* window, rdpIcon* icon)
|
void mac_rail_SetWindowIcon(rdpRail* rail, rdpWindow* window, rdpIcon* icon)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_rail_SetWindowRects(rdpRail* rail, rdpWindow* window)
|
void mac_rail_SetWindowRects(rdpRail* rail, rdpWindow* window)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window)
|
void mac_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** *********************************************************************
|
/** *********************************************************************
|
||||||
@ -2149,21 +1964,21 @@ void mac_process_rail_server_localmovesize_event(freerdp* instance, RDP_EVENT *e
|
|||||||
case RAIL_WMSZ_MOVE:
|
case RAIL_WMSZ_MOVE:
|
||||||
if (moveSize->isMoveSizeStart)
|
if (moveSize->isMoveSizeStart)
|
||||||
{
|
{
|
||||||
// local window move in progress
|
/* local window move in progress */
|
||||||
[g_mrdpview->currentWindow view]->isMoveSizeInProgress = YES;
|
[g_mrdpview->currentWindow view]->isMoveSizeInProgress = YES;
|
||||||
[g_mrdpview->currentWindow view]->saveInitialDragLoc = YES;
|
[g_mrdpview->currentWindow view]->saveInitialDragLoc = YES;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// local move has completed
|
/* local move has completed */
|
||||||
[g_mrdpview->currentWindow view]->isMoveSizeInProgress = NO;
|
[g_mrdpview->currentWindow view]->isMoveSizeInProgress = NO;
|
||||||
[g_mrdpview->currentWindow view]->saveInitialDragLoc = NO;
|
[g_mrdpview->currentWindow view]->saveInitialDragLoc = NO;
|
||||||
|
|
||||||
// let RDP server know where this window is located
|
/* let RDP server know where this window is located */
|
||||||
mac_send_rail_client_event(instance->context->channels, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &windowMove);
|
mac_send_rail_client_event(instance->context->channels, RDP_EVENT_TYPE_RAIL_CLIENT_WINDOW_MOVE, &windowMove);
|
||||||
|
|
||||||
// the event we just sent will cause an extra MoveWindow() to be invoked which we need to ignore
|
/* the event we just sent will cause an extra MoveWindow() to be invoked which we need to ignore */
|
||||||
[g_mrdpview->currentWindow view]->skipMoveWindowOnce = YES;
|
[g_mrdpview->currentWindow view]->skipMoveWindowOnce = YES;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -2,22 +2,22 @@
|
|||||||
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
||||||
<data>
|
<data>
|
||||||
<int key="IBDocument.SystemTarget">1070</int>
|
<int key="IBDocument.SystemTarget">1070</int>
|
||||||
<string key="IBDocument.SystemVersion">11D50b</string>
|
<string key="IBDocument.SystemVersion">12C60</string>
|
||||||
<string key="IBDocument.InterfaceBuilderVersion">2177</string>
|
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
|
||||||
<string key="IBDocument.AppKitVersion">1138.32</string>
|
<string key="IBDocument.AppKitVersion">1187.34</string>
|
||||||
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
<string key="IBDocument.HIToolboxVersion">625.00</string>
|
||||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
<string key="NS.object.0">2177</string>
|
<string key="NS.object.0">3084</string>
|
||||||
</object>
|
</object>
|
||||||
<array key="IBDocument.IntegratedClassDependencies">
|
<array key="IBDocument.IntegratedClassDependencies">
|
||||||
<string>NSView</string>
|
|
||||||
<string>NSMenu</string>
|
|
||||||
<string>NSWindowTemplate</string>
|
|
||||||
<string>NSMenuItem</string>
|
|
||||||
<string>NSCustomView</string>
|
|
||||||
<string>IBNSLayoutConstraint</string>
|
<string>IBNSLayoutConstraint</string>
|
||||||
<string>NSCustomObject</string>
|
<string>NSCustomObject</string>
|
||||||
|
<string>NSCustomView</string>
|
||||||
|
<string>NSMenu</string>
|
||||||
|
<string>NSMenuItem</string>
|
||||||
|
<string>NSView</string>
|
||||||
|
<string>NSWindowTemplate</string>
|
||||||
</array>
|
</array>
|
||||||
<array key="IBDocument.PluginDependencies">
|
<array key="IBDocument.PluginDependencies">
|
||||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
@ -264,6 +264,7 @@
|
|||||||
<string key="NSFrameSize">{1024, 768}</string>
|
<string key="NSFrameSize">{1024, 768}</string>
|
||||||
<reference key="NSSuperview" ref="439893737"/>
|
<reference key="NSSuperview" ref="439893737"/>
|
||||||
<reference key="NSWindow"/>
|
<reference key="NSWindow"/>
|
||||||
|
<reference key="NSNextKeyView"/>
|
||||||
<string key="NSReuseIdentifierKey">_NS:9</string>
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
<string key="NSClassName">MRDPView</string>
|
<string key="NSClassName">MRDPView</string>
|
||||||
</object>
|
</object>
|
||||||
@ -273,7 +274,7 @@
|
|||||||
<reference key="NSWindow"/>
|
<reference key="NSWindow"/>
|
||||||
<reference key="NSNextKeyView" ref="467991374"/>
|
<reference key="NSNextKeyView" ref="467991374"/>
|
||||||
</object>
|
</object>
|
||||||
<string key="NSScreenRect">{{0, 0}, {1366, 746}}</string>
|
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
||||||
<string key="NSMinSize">{1024, 790}</string>
|
<string key="NSMinSize">{1024, 790}</string>
|
||||||
<string key="NSMaxSize">{1024, 790}</string>
|
<string key="NSMaxSize">{1024, 790}</string>
|
||||||
<int key="NSWindowCollectionBehavior">128</int>
|
<int key="NSWindowCollectionBehavior">128</int>
|
||||||
@ -563,10 +564,10 @@
|
|||||||
<double key="value">0.0</double>
|
<double key="value">0.0</double>
|
||||||
</object>
|
</object>
|
||||||
<float key="priority">1000</float>
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="439893737"/>
|
||||||
<int key="scoringType">8</int>
|
<int key="scoringType">8</int>
|
||||||
<float key="scoringTypeFloat">29</float>
|
<float key="scoringTypeFloat">29</float>
|
||||||
<int key="contentType">3</int>
|
<int key="contentType">3</int>
|
||||||
<reference key="containingView" ref="439893737"/>
|
|
||||||
</object>
|
</object>
|
||||||
<object class="IBNSLayoutConstraint" id="890641817">
|
<object class="IBNSLayoutConstraint" id="890641817">
|
||||||
<reference key="firstItem" ref="467991374"/>
|
<reference key="firstItem" ref="467991374"/>
|
||||||
@ -579,10 +580,10 @@
|
|||||||
<double key="value">0.0</double>
|
<double key="value">0.0</double>
|
||||||
</object>
|
</object>
|
||||||
<float key="priority">1000</float>
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="439893737"/>
|
||||||
<int key="scoringType">8</int>
|
<int key="scoringType">8</int>
|
||||||
<float key="scoringTypeFloat">29</float>
|
<float key="scoringTypeFloat">29</float>
|
||||||
<int key="contentType">3</int>
|
<int key="contentType">3</int>
|
||||||
<reference key="containingView" ref="439893737"/>
|
|
||||||
</object>
|
</object>
|
||||||
<object class="IBNSLayoutConstraint" id="437142032">
|
<object class="IBNSLayoutConstraint" id="437142032">
|
||||||
<reference key="firstItem" ref="467991374"/>
|
<reference key="firstItem" ref="467991374"/>
|
||||||
@ -595,10 +596,10 @@
|
|||||||
<double key="value">0.0</double>
|
<double key="value">0.0</double>
|
||||||
</object>
|
</object>
|
||||||
<float key="priority">1000</float>
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="439893737"/>
|
||||||
<int key="scoringType">8</int>
|
<int key="scoringType">8</int>
|
||||||
<float key="scoringTypeFloat">29</float>
|
<float key="scoringTypeFloat">29</float>
|
||||||
<int key="contentType">3</int>
|
<int key="contentType">3</int>
|
||||||
<reference key="containingView" ref="439893737"/>
|
|
||||||
</object>
|
</object>
|
||||||
<object class="IBNSLayoutConstraint" id="934352021">
|
<object class="IBNSLayoutConstraint" id="934352021">
|
||||||
<reference key="firstItem" ref="467991374"/>
|
<reference key="firstItem" ref="467991374"/>
|
||||||
@ -611,10 +612,10 @@
|
|||||||
<double key="value">0.0</double>
|
<double key="value">0.0</double>
|
||||||
</object>
|
</object>
|
||||||
<float key="priority">1000</float>
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="439893737"/>
|
||||||
<int key="scoringType">8</int>
|
<int key="scoringType">8</int>
|
||||||
<float key="scoringTypeFloat">29</float>
|
<float key="scoringTypeFloat">29</float>
|
||||||
<int key="contentType">3</int>
|
<int key="contentType">3</int>
|
||||||
<reference key="containingView" ref="439893737"/>
|
|
||||||
</object>
|
</object>
|
||||||
</array>
|
</array>
|
||||||
<reference key="parent" ref="972006081"/>
|
<reference key="parent" ref="972006081"/>
|
||||||
@ -769,14 +770,6 @@
|
|||||||
<string key="minorKey">./Classes/MRDPView.h</string>
|
<string key="minorKey">./Classes/MRDPView.h</string>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="IBPartialClassDescription">
|
|
||||||
<string key="className">NSLayoutConstraint</string>
|
|
||||||
<string key="superclassName">NSObject</string>
|
|
||||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
||||||
<string key="majorKey">IBProjectSource</string>
|
|
||||||
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</array>
|
</array>
|
||||||
</object>
|
</object>
|
||||||
<int key="IBDocument.localizationMode">0</int>
|
<int key="IBDocument.localizationMode">0</int>
|
||||||
|
26
client/Mac/PasswordDialog.h
Normal file
26
client/Mac/PasswordDialog.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// PasswordDialog.h
|
||||||
|
// FreeRDP
|
||||||
|
//
|
||||||
|
// Created by Christian Hofstaedtler on 3/10/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface PasswordDialog : NSWindowController
|
||||||
|
|
||||||
|
@property (retain) IBOutlet NSTextField* userNameText;
|
||||||
|
@property (retain) IBOutlet NSTextField* passwordText;
|
||||||
|
@property (retain) IBOutlet NSTextField* messageLabel;
|
||||||
|
|
||||||
|
- (IBAction)onOK:(NSObject*)sender;
|
||||||
|
- (IBAction)onCancel:(NSObject*)sender;
|
||||||
|
|
||||||
|
@property (retain) NSString* serverName;
|
||||||
|
@property (retain) NSString* userName;
|
||||||
|
@property (retain) NSString* password;
|
||||||
|
|
||||||
|
- (BOOL) runModal;
|
||||||
|
|
||||||
|
@end
|
56
client/Mac/PasswordDialog.m
Normal file
56
client/Mac/PasswordDialog.m
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// PasswordDialog.m
|
||||||
|
// FreeRDP
|
||||||
|
//
|
||||||
|
// Created by Christian Hofstaedtler on 3/10/13.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "PasswordDialog.h"
|
||||||
|
|
||||||
|
@interface PasswordDialog ()
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation PasswordDialog
|
||||||
|
|
||||||
|
@synthesize userNameText;
|
||||||
|
@synthesize passwordText;
|
||||||
|
@synthesize messageLabel;
|
||||||
|
@synthesize serverName;
|
||||||
|
@synthesize userName;
|
||||||
|
@synthesize password;
|
||||||
|
|
||||||
|
- (id)init {
|
||||||
|
return [self initWithWindowNibName:@"PasswordDialog"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)windowDidLoad
|
||||||
|
{
|
||||||
|
[super windowDidLoad];
|
||||||
|
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||||
|
[self.window setTitle:self.serverName];
|
||||||
|
[messageLabel setStringValue:[NSString stringWithFormat:@"Authenticate to %@", self.serverName]];
|
||||||
|
if (self.userName != nil) {
|
||||||
|
[userNameText setStringValue:self.userName];
|
||||||
|
[self.window makeFirstResponder:passwordText];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)onOK:(NSObject *)sender {
|
||||||
|
self.userName = self.userNameText.stringValue;
|
||||||
|
self.password = self.passwordText.stringValue;
|
||||||
|
[self.window orderOut:nil];
|
||||||
|
[NSApp stopModalWithCode:TRUE];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)onCancel:(NSObject *)sender {
|
||||||
|
[self.window orderOut:nil];
|
||||||
|
[NSApp stopModalWithCode:FALSE];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) runModal {
|
||||||
|
return [NSApp runModalForWindow:self.window];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
976
client/Mac/PasswordDialog.xib
Normal file
976
client/Mac/PasswordDialog.xib
Normal file
@ -0,0 +1,976 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
|
||||||
|
<data>
|
||||||
|
<int key="IBDocument.SystemTarget">1080</int>
|
||||||
|
<string key="IBDocument.SystemVersion">12C60</string>
|
||||||
|
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
|
||||||
|
<string key="IBDocument.AppKitVersion">1187.34</string>
|
||||||
|
<string key="IBDocument.HIToolboxVersion">625.00</string>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||||
|
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="NS.object.0">3084</string>
|
||||||
|
</object>
|
||||||
|
<array key="IBDocument.IntegratedClassDependencies">
|
||||||
|
<string>IBNSLayoutConstraint</string>
|
||||||
|
<string>NSButton</string>
|
||||||
|
<string>NSButtonCell</string>
|
||||||
|
<string>NSCustomObject</string>
|
||||||
|
<string>NSSecureTextField</string>
|
||||||
|
<string>NSSecureTextFieldCell</string>
|
||||||
|
<string>NSTextField</string>
|
||||||
|
<string>NSTextFieldCell</string>
|
||||||
|
<string>NSView</string>
|
||||||
|
<string>NSWindowTemplate</string>
|
||||||
|
</array>
|
||||||
|
<array key="IBDocument.PluginDependencies">
|
||||||
|
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
</array>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||||
|
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||||
|
<integer value="1" key="NS.object.0"/>
|
||||||
|
</object>
|
||||||
|
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||||
|
<object class="NSCustomObject" id="1001">
|
||||||
|
<string key="NSClassName">PasswordDialog</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSCustomObject" id="1003">
|
||||||
|
<string key="NSClassName">FirstResponder</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSCustomObject" id="1004">
|
||||||
|
<string key="NSClassName">NSApplication</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSWindowTemplate" id="1005">
|
||||||
|
<int key="NSWindowStyleMask">257</int>
|
||||||
|
<int key="NSWindowBacking">2</int>
|
||||||
|
<string key="NSWindowRect">{{196, 240}, {480, 270}}</string>
|
||||||
|
<int key="NSWTFlags">544735232</int>
|
||||||
|
<string key="NSWindowTitle">Window</string>
|
||||||
|
<string key="NSWindowClass">NSWindow</string>
|
||||||
|
<nil key="NSViewClass"/>
|
||||||
|
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||||
|
<object class="NSView" key="NSWindowView" id="1006">
|
||||||
|
<reference key="NSNextResponder"/>
|
||||||
|
<int key="NSvFlags">256</int>
|
||||||
|
<array class="NSMutableArray" key="NSSubviews">
|
||||||
|
<object class="NSTextField" id="534466844">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{46, 127}, {108, 17}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="605731100"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:1535</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSTextFieldCell" key="NSCell" id="1051137816">
|
||||||
|
<int key="NSCellFlags">68157504</int>
|
||||||
|
<int key="NSCellFlags2">272630784</int>
|
||||||
|
<string key="NSContents">Password:</string>
|
||||||
|
<object class="NSFont" key="NSSupport" id="461722316">
|
||||||
|
<string key="NSName">LucidaGrande</string>
|
||||||
|
<double key="NSSize">13</double>
|
||||||
|
<int key="NSfFlags">1044</int>
|
||||||
|
</object>
|
||||||
|
<string key="NSCellIdentifier">_NS:1535</string>
|
||||||
|
<reference key="NSControlView" ref="534466844"/>
|
||||||
|
<object class="NSColor" key="NSBackgroundColor" id="765179253">
|
||||||
|
<int key="NSColorSpace">6</int>
|
||||||
|
<string key="NSCatalogName">System</string>
|
||||||
|
<string key="NSColorName">controlColor</string>
|
||||||
|
<object class="NSColor" key="NSColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="NSColor" key="NSTextColor" id="657884142">
|
||||||
|
<int key="NSColorSpace">6</int>
|
||||||
|
<string key="NSCatalogName">System</string>
|
||||||
|
<string key="NSColorName">controlTextColor</string>
|
||||||
|
<object class="NSColor" key="NSColor" id="299534685">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MAA</bytes>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSSecureTextField" id="605731100">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{159, 124}, {233, 22}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="215486301"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSSecureTextFieldCell" key="NSCell" id="852260547">
|
||||||
|
<int key="NSCellFlags">342884416</int>
|
||||||
|
<int key="NSCellFlags2">272630848</int>
|
||||||
|
<string key="NSContents"/>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSPlaceholderString">Password</string>
|
||||||
|
<string key="NSCellIdentifier">_NS:9</string>
|
||||||
|
<reference key="NSControlView" ref="605731100"/>
|
||||||
|
<bool key="NSDrawsBackground">YES</bool>
|
||||||
|
<object class="NSColor" key="NSBackgroundColor" id="161469205">
|
||||||
|
<int key="NSColorSpace">6</int>
|
||||||
|
<string key="NSCatalogName">System</string>
|
||||||
|
<string key="NSColorName">textBackgroundColor</string>
|
||||||
|
<object class="NSColor" key="NSColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MQA</bytes>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="NSColor" key="NSTextColor" id="193111781">
|
||||||
|
<int key="NSColorSpace">6</int>
|
||||||
|
<string key="NSCatalogName">System</string>
|
||||||
|
<string key="NSColorName">textColor</string>
|
||||||
|
<reference key="NSColor" ref="299534685"/>
|
||||||
|
</object>
|
||||||
|
<array key="NSAllowedInputLocales">
|
||||||
|
<string>NSAllRomanInputSourcesLocaleIdentifier</string>
|
||||||
|
</array>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSTextField" id="677587178">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{46, 206}, {346, 17}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="543773298"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:1535</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSTextFieldCell" key="NSCell" id="13207108">
|
||||||
|
<int key="NSCellFlags">68157504</int>
|
||||||
|
<int key="NSCellFlags2">272630784</int>
|
||||||
|
<string key="NSContents">Connect to SERVER_NAME</string>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSPlaceholderString"/>
|
||||||
|
<string key="NSCellIdentifier">_NS:1535</string>
|
||||||
|
<reference key="NSControlView" ref="677587178"/>
|
||||||
|
<reference key="NSBackgroundColor" ref="765179253"/>
|
||||||
|
<reference key="NSTextColor" ref="657884142"/>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSButton" id="732279407">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{384, 13}, {82, 32}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSButtonCell" key="NSCell" id="588218063">
|
||||||
|
<int key="NSCellFlags">67108864</int>
|
||||||
|
<int key="NSCellFlags2">134217728</int>
|
||||||
|
<string key="NSContents">Cancel</string>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSCellIdentifier">_NS:9</string>
|
||||||
|
<reference key="NSControlView" ref="732279407"/>
|
||||||
|
<int key="NSButtonFlags">-2038284288</int>
|
||||||
|
<int key="NSButtonFlags2">129</int>
|
||||||
|
<string key="NSAlternateContents"/>
|
||||||
|
<string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
|
||||||
|
<int key="NSPeriodicDelay">200</int>
|
||||||
|
<int key="NSPeriodicInterval">25</int>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSButton" id="215486301">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{302, 13}, {82, 32}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="732279407"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSButtonCell" key="NSCell" id="816835100">
|
||||||
|
<int key="NSCellFlags">67108864</int>
|
||||||
|
<int key="NSCellFlags2">134217728</int>
|
||||||
|
<string key="NSContents">OK</string>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSCellIdentifier">_NS:9</string>
|
||||||
|
<reference key="NSControlView" ref="215486301"/>
|
||||||
|
<int key="NSButtonFlags">-2038284288</int>
|
||||||
|
<int key="NSButtonFlags2">129</int>
|
||||||
|
<reference key="NSAlternateImage" ref="461722316"/>
|
||||||
|
<string key="NSAlternateContents"/>
|
||||||
|
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
|
||||||
|
<int key="NSPeriodicDelay">200</int>
|
||||||
|
<int key="NSPeriodicInterval">25</int>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSTextField" id="543773298">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{46, 158}, {108, 17}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="385178766"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:1535</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSTextFieldCell" key="NSCell" id="728569686">
|
||||||
|
<int key="NSCellFlags">68157504</int>
|
||||||
|
<int key="NSCellFlags2">272630784</int>
|
||||||
|
<string key="NSContents">Username:</string>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSCellIdentifier">_NS:1535</string>
|
||||||
|
<reference key="NSControlView" ref="543773298"/>
|
||||||
|
<reference key="NSBackgroundColor" ref="765179253"/>
|
||||||
|
<reference key="NSTextColor" ref="657884142"/>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
<object class="NSTextField" id="385178766">
|
||||||
|
<reference key="NSNextResponder" ref="1006"/>
|
||||||
|
<int key="NSvFlags">268</int>
|
||||||
|
<string key="NSFrame">{{159, 156}, {233, 22}}</string>
|
||||||
|
<reference key="NSSuperview" ref="1006"/>
|
||||||
|
<reference key="NSNextKeyView" ref="534466844"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<bool key="NSEnabled">YES</bool>
|
||||||
|
<object class="NSTextFieldCell" key="NSCell" id="692566014">
|
||||||
|
<int key="NSCellFlags">-1804599231</int>
|
||||||
|
<int key="NSCellFlags2">272630784</int>
|
||||||
|
<string key="NSContents"/>
|
||||||
|
<reference key="NSSupport" ref="461722316"/>
|
||||||
|
<string key="NSPlaceholderString">billg</string>
|
||||||
|
<string key="NSCellIdentifier">_NS:9</string>
|
||||||
|
<reference key="NSControlView" ref="385178766"/>
|
||||||
|
<bool key="NSDrawsBackground">YES</bool>
|
||||||
|
<reference key="NSBackgroundColor" ref="161469205"/>
|
||||||
|
<reference key="NSTextColor" ref="193111781"/>
|
||||||
|
</object>
|
||||||
|
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<string key="NSFrameSize">{480, 270}</string>
|
||||||
|
<reference key="NSSuperview"/>
|
||||||
|
<reference key="NSNextKeyView" ref="677587178"/>
|
||||||
|
</object>
|
||||||
|
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
||||||
|
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
|
||||||
|
<bool key="NSWindowIsRestorable">YES</bool>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||||
|
<array class="NSMutableArray" key="connectionRecords">
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">window</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="1005"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">passwordText</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="605731100"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">48</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">usernameText</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="385178766"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">49</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">messageLabel</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="677587178"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">50</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBActionConnection" key="connection">
|
||||||
|
<string key="label">onOK:</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="215486301"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">51</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBActionConnection" key="connection">
|
||||||
|
<string key="label">onCancel:</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="732279407"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">52</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">userNameText</string>
|
||||||
|
<reference key="source" ref="1001"/>
|
||||||
|
<reference key="destination" ref="385178766"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">53</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBOutletConnection" key="connection">
|
||||||
|
<string key="label">delegate</string>
|
||||||
|
<reference key="source" ref="1005"/>
|
||||||
|
<reference key="destination" ref="1001"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">4</int>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||||
|
<array key="orderedObjects">
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">0</int>
|
||||||
|
<array key="object" id="0"/>
|
||||||
|
<reference key="children" ref="1000"/>
|
||||||
|
<nil key="parent"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-2</int>
|
||||||
|
<reference key="object" ref="1001"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
<string key="objectName">File's Owner</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-1</int>
|
||||||
|
<reference key="object" ref="1003"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
<string key="objectName">First Responder</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-3</int>
|
||||||
|
<reference key="object" ref="1004"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
<string key="objectName">Application</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">1</int>
|
||||||
|
<reference key="object" ref="1005"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="1006"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">2</int>
|
||||||
|
<reference key="object" ref="1006"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<object class="IBNSLayoutConstraint" id="792855884">
|
||||||
|
<reference key="firstItem" ref="1006"/>
|
||||||
|
<int key="firstAttribute">6</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="732279407"/>
|
||||||
|
<int key="secondAttribute">6</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">20</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">8</int>
|
||||||
|
<float key="scoringTypeFloat">29</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="361673131">
|
||||||
|
<reference key="firstItem" ref="1006"/>
|
||||||
|
<int key="firstAttribute">4</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="732279407"/>
|
||||||
|
<int key="secondAttribute">4</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">20</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">8</int>
|
||||||
|
<float key="scoringTypeFloat">29</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="33598285">
|
||||||
|
<reference key="firstItem" ref="732279407"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="215486301"/>
|
||||||
|
<int key="secondAttribute">6</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">12</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="249083586">
|
||||||
|
<reference key="firstItem" ref="1006"/>
|
||||||
|
<int key="firstAttribute">4</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="215486301"/>
|
||||||
|
<int key="secondAttribute">4</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">20</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">8</int>
|
||||||
|
<float key="scoringTypeFloat">29</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="376996204">
|
||||||
|
<reference key="firstItem" ref="605731100"/>
|
||||||
|
<int key="firstAttribute">3</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="385178766"/>
|
||||||
|
<int key="secondAttribute">4</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">10</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="749200553">
|
||||||
|
<reference key="firstItem" ref="605731100"/>
|
||||||
|
<int key="firstAttribute">6</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="385178766"/>
|
||||||
|
<int key="secondAttribute">6</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="645437596">
|
||||||
|
<reference key="firstItem" ref="605731100"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="534466844"/>
|
||||||
|
<int key="secondAttribute">6</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">8</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="122204147">
|
||||||
|
<reference key="firstItem" ref="605731100"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="385178766"/>
|
||||||
|
<int key="secondAttribute">5</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="601416424">
|
||||||
|
<reference key="firstItem" ref="385178766"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="543773298"/>
|
||||||
|
<int key="secondAttribute">6</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBNSLayoutSymbolicConstant" key="constant">
|
||||||
|
<double key="value">8</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="742909147">
|
||||||
|
<reference key="firstItem" ref="534466844"/>
|
||||||
|
<int key="firstAttribute">10</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="1006"/>
|
||||||
|
<int key="secondAttribute">10</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">5</int>
|
||||||
|
<float key="scoringTypeFloat">22</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="393602894">
|
||||||
|
<reference key="firstItem" ref="534466844"/>
|
||||||
|
<int key="firstAttribute">10</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="605731100"/>
|
||||||
|
<int key="secondAttribute">10</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="507833379">
|
||||||
|
<reference key="firstItem" ref="543773298"/>
|
||||||
|
<int key="firstAttribute">11</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="385178766"/>
|
||||||
|
<int key="secondAttribute">11</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="62139445">
|
||||||
|
<reference key="firstItem" ref="543773298"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="677587178"/>
|
||||||
|
<int key="secondAttribute">5</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="281189829">
|
||||||
|
<reference key="firstItem" ref="543773298"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="534466844"/>
|
||||||
|
<int key="secondAttribute">5</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">0.0</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">6</int>
|
||||||
|
<float key="scoringTypeFloat">24</float>
|
||||||
|
<int key="contentType">2</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="53108561">
|
||||||
|
<reference key="firstItem" ref="677587178"/>
|
||||||
|
<int key="firstAttribute">3</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="1006"/>
|
||||||
|
<int key="secondAttribute">3</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">47</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBNSLayoutConstraint" id="346752503">
|
||||||
|
<reference key="firstItem" ref="677587178"/>
|
||||||
|
<int key="firstAttribute">5</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<reference key="secondItem" ref="1006"/>
|
||||||
|
<int key="secondAttribute">5</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">49</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="1006"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">3</int>
|
||||||
|
</object>
|
||||||
|
<reference ref="534466844"/>
|
||||||
|
<reference ref="605731100"/>
|
||||||
|
<reference ref="677587178"/>
|
||||||
|
<reference ref="732279407"/>
|
||||||
|
<reference ref="215486301"/>
|
||||||
|
<reference ref="543773298"/>
|
||||||
|
<reference ref="385178766"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1005"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">5</int>
|
||||||
|
<reference key="object" ref="534466844"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="1051137816"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">6</int>
|
||||||
|
<reference key="object" ref="605731100"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="852260547"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">7</int>
|
||||||
|
<reference key="object" ref="677587178"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<object class="IBNSLayoutConstraint" id="218748768">
|
||||||
|
<reference key="firstItem" ref="677587178"/>
|
||||||
|
<int key="firstAttribute">7</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<nil key="secondItem"/>
|
||||||
|
<int key="secondAttribute">0</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">340</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="677587178"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">1</int>
|
||||||
|
</object>
|
||||||
|
<reference ref="13207108"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">8</int>
|
||||||
|
<reference key="object" ref="732279407"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="588218063"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">9</int>
|
||||||
|
<reference key="object" ref="215486301"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<object class="IBNSLayoutConstraint" id="444683688">
|
||||||
|
<reference key="firstItem" ref="215486301"/>
|
||||||
|
<int key="firstAttribute">7</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<nil key="secondItem"/>
|
||||||
|
<int key="secondAttribute">0</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">70</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="215486301"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">1</int>
|
||||||
|
</object>
|
||||||
|
<reference ref="816835100"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">10</int>
|
||||||
|
<reference key="object" ref="543773298"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<object class="IBNSLayoutConstraint" id="156508403">
|
||||||
|
<reference key="firstItem" ref="543773298"/>
|
||||||
|
<int key="firstAttribute">7</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<nil key="secondItem"/>
|
||||||
|
<int key="secondAttribute">0</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">102</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="543773298"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">1</int>
|
||||||
|
</object>
|
||||||
|
<reference ref="728569686"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">11</int>
|
||||||
|
<reference key="object" ref="385178766"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<object class="IBNSLayoutConstraint" id="340450096">
|
||||||
|
<reference key="firstItem" ref="385178766"/>
|
||||||
|
<int key="firstAttribute">7</int>
|
||||||
|
<int key="relation">0</int>
|
||||||
|
<nil key="secondItem"/>
|
||||||
|
<int key="secondAttribute">0</int>
|
||||||
|
<float key="multiplier">1</float>
|
||||||
|
<object class="IBLayoutConstant" key="constant">
|
||||||
|
<double key="value">233</double>
|
||||||
|
</object>
|
||||||
|
<float key="priority">1000</float>
|
||||||
|
<reference key="containingView" ref="385178766"/>
|
||||||
|
<int key="scoringType">3</int>
|
||||||
|
<float key="scoringTypeFloat">9</float>
|
||||||
|
<int key="contentType">1</int>
|
||||||
|
</object>
|
||||||
|
<reference ref="692566014"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">12</int>
|
||||||
|
<reference key="object" ref="340450096"/>
|
||||||
|
<reference key="parent" ref="385178766"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">13</int>
|
||||||
|
<reference key="object" ref="692566014"/>
|
||||||
|
<reference key="parent" ref="385178766"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">14</int>
|
||||||
|
<reference key="object" ref="156508403"/>
|
||||||
|
<reference key="parent" ref="543773298"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">15</int>
|
||||||
|
<reference key="object" ref="728569686"/>
|
||||||
|
<reference key="parent" ref="543773298"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">16</int>
|
||||||
|
<reference key="object" ref="444683688"/>
|
||||||
|
<reference key="parent" ref="215486301"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">17</int>
|
||||||
|
<reference key="object" ref="816835100"/>
|
||||||
|
<reference key="parent" ref="215486301"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">18</int>
|
||||||
|
<reference key="object" ref="588218063"/>
|
||||||
|
<reference key="parent" ref="732279407"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">19</int>
|
||||||
|
<reference key="object" ref="218748768"/>
|
||||||
|
<reference key="parent" ref="677587178"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">20</int>
|
||||||
|
<reference key="object" ref="13207108"/>
|
||||||
|
<reference key="parent" ref="677587178"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">21</int>
|
||||||
|
<reference key="object" ref="852260547"/>
|
||||||
|
<reference key="parent" ref="605731100"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">22</int>
|
||||||
|
<reference key="object" ref="1051137816"/>
|
||||||
|
<reference key="parent" ref="534466844"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">25</int>
|
||||||
|
<reference key="object" ref="122204147"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">27</int>
|
||||||
|
<reference key="object" ref="393602894"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">28</int>
|
||||||
|
<reference key="object" ref="645437596"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">30</int>
|
||||||
|
<reference key="object" ref="749200553"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">31</int>
|
||||||
|
<reference key="object" ref="601416424"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">32</int>
|
||||||
|
<reference key="object" ref="33598285"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">34</int>
|
||||||
|
<reference key="object" ref="281189829"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">37</int>
|
||||||
|
<reference key="object" ref="62139445"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">39</int>
|
||||||
|
<reference key="object" ref="249083586"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">41</int>
|
||||||
|
<reference key="object" ref="742909147"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">42</int>
|
||||||
|
<reference key="object" ref="361673131"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">43</int>
|
||||||
|
<reference key="object" ref="792855884"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">44</int>
|
||||||
|
<reference key="object" ref="346752503"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">45</int>
|
||||||
|
<reference key="object" ref="53108561"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">46</int>
|
||||||
|
<reference key="object" ref="376996204"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">47</int>
|
||||||
|
<reference key="object" ref="507833379"/>
|
||||||
|
<reference key="parent" ref="1006"/>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
</object>
|
||||||
|
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
||||||
|
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="1.IBWindowTemplateEditedContentRect">{{357, 418}, {480, 270}}</string>
|
||||||
|
<integer value="1" key="1.NSWindowTemplate.visibleAtLaunch"/>
|
||||||
|
<array class="NSMutableArray" key="10.IBNSViewMetadataConstraints">
|
||||||
|
<reference ref="156508403"/>
|
||||||
|
</array>
|
||||||
|
<boolean value="NO" key="10.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<array class="NSMutableArray" key="11.IBNSViewMetadataConstraints">
|
||||||
|
<reference ref="340450096"/>
|
||||||
|
</array>
|
||||||
|
<boolean value="NO" key="11.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<array class="NSMutableArray" key="2.IBNSViewMetadataConstraints">
|
||||||
|
<reference ref="346752503"/>
|
||||||
|
<reference ref="53108561"/>
|
||||||
|
<reference ref="281189829"/>
|
||||||
|
<reference ref="62139445"/>
|
||||||
|
<reference ref="507833379"/>
|
||||||
|
<reference ref="393602894"/>
|
||||||
|
<reference ref="742909147"/>
|
||||||
|
<reference ref="601416424"/>
|
||||||
|
<reference ref="122204147"/>
|
||||||
|
<reference ref="645437596"/>
|
||||||
|
<reference ref="749200553"/>
|
||||||
|
<reference ref="376996204"/>
|
||||||
|
<reference ref="249083586"/>
|
||||||
|
<reference ref="33598285"/>
|
||||||
|
<reference ref="361673131"/>
|
||||||
|
<reference ref="792855884"/>
|
||||||
|
</array>
|
||||||
|
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="25.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="30.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="31.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="37.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="39.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="41.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="42.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="43.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="44.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="45.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="46.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<string key="47.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<boolean value="NO" key="5.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<boolean value="NO" key="6.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<array key="7.IBNSViewMetadataConstraints">
|
||||||
|
<reference ref="218748768"/>
|
||||||
|
</array>
|
||||||
|
<boolean value="NO" key="7.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<boolean value="NO" key="8.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
<array key="9.IBNSViewMetadataConstraints">
|
||||||
|
<reference ref="444683688"/>
|
||||||
|
</array>
|
||||||
|
<boolean value="NO" key="9.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
|
||||||
|
<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||||
|
<nil key="activeLocalization"/>
|
||||||
|
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||||
|
<nil key="sourceID"/>
|
||||||
|
<int key="maxID">53</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||||
|
<int key="IBDocument.localizationMode">0</int>
|
||||||
|
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
|
||||||
|
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||||
|
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||||
|
<bool key="IBDocument.UseAutolayout">YES</bool>
|
||||||
|
</data>
|
||||||
|
</archive>
|
@ -47,7 +47,6 @@ DWORD X11_KEYCODE_TO_VIRTUAL_SCANCODE[256];
|
|||||||
|
|
||||||
int freerdp_detect_keyboard(DWORD* keyboardLayoutId)
|
int freerdp_detect_keyboard(DWORD* keyboardLayoutId)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef WITH_X11
|
#ifdef WITH_X11
|
||||||
if (*keyboardLayoutId == 0)
|
if (*keyboardLayoutId == 0)
|
||||||
freerdp_detect_keyboard_layout_from_xkb(keyboardLayoutId);
|
freerdp_detect_keyboard_layout_from_xkb(keyboardLayoutId);
|
||||||
|
Loading…
Reference in New Issue
Block a user