Merge branch 'master' of github.com:awakecoding/FreeRDP
This commit is contained in:
commit
0de4d7924c
@ -41,39 +41,27 @@
|
||||
|
||||
@interface MRDPView : NSView
|
||||
{
|
||||
mfContext* mfc;
|
||||
mfContext* mfc;
|
||||
NSBitmapImageRep* bmiRep;
|
||||
NSMutableArray* cursors;
|
||||
NSMutableArray* windows;
|
||||
NSTimer* pasteboard_timer;
|
||||
NSCursor* currentCursor;
|
||||
NSCursor* currentCursor;
|
||||
NSRect prevWinPosition;
|
||||
freerdp* instance;
|
||||
rdpContext* context;
|
||||
CGContextRef bitmap_context;
|
||||
char* pixel_data;
|
||||
int argc;
|
||||
char** argv;
|
||||
|
||||
char** argv;
|
||||
DWORD kbdModFlags;
|
||||
BOOL initialized;
|
||||
NSPoint savedDragLocation;
|
||||
BOOL firstCreateWindow;
|
||||
BOOL isMoveSizeInProgress;
|
||||
BOOL skipResizeOnce;
|
||||
BOOL saveInitialDragLoc;
|
||||
BOOL skipMoveWindowOnce;
|
||||
|
||||
/* store state info for some keys */
|
||||
int kdlshift;
|
||||
int kdrshift;
|
||||
int kdlctrl;
|
||||
int kdrctrl;
|
||||
int kdlalt;
|
||||
int kdralt;
|
||||
int kdlmeta;
|
||||
int kdrmeta;
|
||||
int kdcapslock;
|
||||
|
||||
BOOL initialized;
|
||||
|
||||
@public
|
||||
NSPasteboard* pasteboard_rd; /* for reading from clipboard */
|
||||
|
@ -126,7 +126,7 @@ struct rgba_data
|
||||
rdpSettings* settings;
|
||||
EmbedWindowEventArgs e;
|
||||
|
||||
[self initializeView];
|
||||
[self initializeView];
|
||||
|
||||
context = rdp_context;
|
||||
mfc = (mfContext*) rdp_context;
|
||||
@ -147,10 +147,10 @@ struct rgba_data
|
||||
instance->settings->DesktopHeight = screenFrame.size.height;
|
||||
}
|
||||
|
||||
mfc->client_height = instance->settings->DesktopHeight;
|
||||
mfc->client_width = instance->settings->DesktopWidth;
|
||||
mfc->client_height = instance->settings->DesktopHeight;
|
||||
mfc->client_width = instance->settings->DesktopWidth;
|
||||
|
||||
mfc->thread = CreateThread(NULL, 0, mac_client_thread, (void*) context, 0, &mfc->mainThreadId);
|
||||
mfc->thread = CreateThread(NULL, 0, mac_client_thread, (void*) context, 0, &mfc->mainThreadId);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -249,7 +249,7 @@ DWORD mac_client_thread(void* param)
|
||||
|
||||
- (id)initWithFrame:(NSRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
self = [super initWithFrame:frame];
|
||||
|
||||
if (self)
|
||||
{
|
||||
@ -267,38 +267,38 @@ DWORD mac_client_thread(void* param)
|
||||
// won't be called if the view is created dynamically
|
||||
- (void) viewDidLoad
|
||||
{
|
||||
[self initializeView];
|
||||
[self initializeView];
|
||||
}
|
||||
|
||||
- (void) initializeView
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
cursors = [[NSMutableArray alloc] initWithCapacity:10];
|
||||
if (!initialized)
|
||||
{
|
||||
cursors = [[NSMutableArray alloc] initWithCapacity:10];
|
||||
|
||||
// setup a mouse tracking area
|
||||
NSTrackingArea * trackingArea = [[NSTrackingArea alloc] initWithRect:[self visibleRect] options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingCursorUpdate | NSTrackingEnabledDuringMouseDrag | NSTrackingActiveWhenFirstResponder owner:self userInfo:nil];
|
||||
// setup a mouse tracking area
|
||||
NSTrackingArea * trackingArea = [[NSTrackingArea alloc] initWithRect:[self visibleRect] options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingCursorUpdate | NSTrackingEnabledDuringMouseDrag | NSTrackingActiveWhenFirstResponder owner:self userInfo:nil];
|
||||
|
||||
[self addTrackingArea:trackingArea];
|
||||
|
||||
// Set the default cursor
|
||||
currentCursor = [NSCursor arrowCursor];
|
||||
[self addTrackingArea:trackingArea];
|
||||
|
||||
initialized = YES;
|
||||
}
|
||||
// Set the default cursor
|
||||
currentCursor = [NSCursor arrowCursor];
|
||||
|
||||
initialized = YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (void) setCursor: (NSCursor*) cursor
|
||||
{
|
||||
self->currentCursor = cursor;
|
||||
[[self window] invalidateCursorRectsForView:self];
|
||||
self->currentCursor = cursor;
|
||||
[[self window] invalidateCursorRectsForView:self];
|
||||
}
|
||||
|
||||
|
||||
// Set the current cursor
|
||||
- (void) resetCursorRects
|
||||
{
|
||||
[self addCursorRect:[self visibleRect] cursor:currentCursor];
|
||||
[self addCursorRect:[self visibleRect] cursor:currentCursor];
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -334,9 +334,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_MOVE, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_MOVE, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -354,9 +354,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON1, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON1, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -374,9 +374,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON1, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON1, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -394,9 +394,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON2, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON2, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -414,9 +414,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON2, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON2, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -434,9 +434,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON3, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_DOWN | PTR_FLAGS_BUTTON3, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -454,9 +454,9 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON3, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_BUTTON3, x, y);
|
||||
}
|
||||
|
||||
- (void) scrollWheel:(NSEvent *)event
|
||||
@ -472,7 +472,7 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
flags = PTR_FLAGS_WHEEL;
|
||||
|
||||
@ -485,7 +485,7 @@ DWORD mac_client_thread(void* param)
|
||||
/* limit to maximum value in WheelRotationMask (9bit signed value) */
|
||||
int step = MIN(MAX(-256, units), 255);
|
||||
|
||||
mf_scale_mouse_event(context, instance->input, flags | ((UINT16)step & WheelRotationMask), x, y);
|
||||
mf_scale_mouse_event(context, instance->input, flags | ((UINT16)step & WheelRotationMask), x, y);
|
||||
units -= step;
|
||||
}
|
||||
}
|
||||
@ -506,10 +506,10 @@ DWORD mac_client_thread(void* param)
|
||||
int x = (int) loc.x;
|
||||
int y = (int) loc.y;
|
||||
|
||||
y = [self frame].size.height - y;
|
||||
y = [self frame].size.height - y;
|
||||
|
||||
// send mouse motion event to RDP server
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_MOVE, x, y);
|
||||
mf_scale_mouse_event(context, instance->input, PTR_FLAGS_MOVE, x, y);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -519,20 +519,28 @@ DWORD mac_client_thread(void* param)
|
||||
- (void) keyDown:(NSEvent *) event
|
||||
{
|
||||
int key;
|
||||
USHORT extended;
|
||||
DWORD keyFlags;
|
||||
DWORD vkcode;
|
||||
DWORD scancode;
|
||||
|
||||
if (!is_connected)
|
||||
return;
|
||||
|
||||
keyFlags = KBD_FLAGS_DOWN;
|
||||
key = [event keyCode] + 8;
|
||||
|
||||
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||
keyFlags |= (scancode & KBDEXT) ? KBDEXT : 0;
|
||||
scancode &= 0xFF;
|
||||
vkcode &= 0xFF;
|
||||
|
||||
#if 0
|
||||
fprintf(stderr, "keyDown: key: 0x%04X scancode: 0x%04X vkcode: 0x%04X keyFlags: %d name: %s\n",
|
||||
key - 8, scancode, vkcode, keyFlags, GetVirtualKeyName(vkcode));
|
||||
#endif
|
||||
|
||||
instance->input->KeyboardEvent(instance->input, extended | KBD_FLAGS_DOWN, scancode & 0xFF);
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags, scancode);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -542,20 +550,28 @@ DWORD mac_client_thread(void* param)
|
||||
- (void) keyUp:(NSEvent *) event
|
||||
{
|
||||
int key;
|
||||
USHORT extended;
|
||||
DWORD keyFlags;
|
||||
DWORD vkcode;
|
||||
DWORD scancode;
|
||||
|
||||
|
||||
if (!is_connected)
|
||||
return;
|
||||
|
||||
|
||||
key = [event keyCode] + 8;
|
||||
|
||||
keyFlags = KBD_FLAGS_RELEASE;
|
||||
|
||||
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||
extended = (scancode & KBDEXT) ? KBDEXT : 0;
|
||||
|
||||
instance->input->KeyboardEvent(instance->input, extended | KBD_FLAGS_RELEASE, scancode & 0xFF);
|
||||
keyFlags |= (scancode & KBDEXT) ? KBDEXT : 0;
|
||||
scancode &= 0xFF;
|
||||
vkcode &= 0xFF;
|
||||
|
||||
#if 0
|
||||
fprintf(stderr, "keyUp: key: 0x%04X scancode: 0x%04X vkcode: 0x%04X keyFlags: %d name: %s\n",
|
||||
key - 8, scancode, vkcode, keyFlags, GetVirtualKeyName(vkcode));
|
||||
#endif
|
||||
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags, scancode);
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -564,122 +580,93 @@ DWORD mac_client_thread(void* param)
|
||||
|
||||
- (void) flagsChanged:(NSEvent*) event
|
||||
{
|
||||
NSUInteger mf = [event modifierFlags];
|
||||
|
||||
int key;
|
||||
DWORD keyFlags;
|
||||
DWORD vkcode;
|
||||
DWORD scancode;
|
||||
DWORD modFlags;
|
||||
|
||||
if (!is_connected)
|
||||
return;
|
||||
|
||||
// caps lock
|
||||
if (mf == 0x10100) {
|
||||
printf("TODO: caps lock is on\n");
|
||||
kdcapslock = 1;
|
||||
}
|
||||
if (kdcapslock && (mf == 0x100)) {
|
||||
kdcapslock = 0;
|
||||
printf("TODO: caps lock is off\n");
|
||||
}
|
||||
// left shift
|
||||
if ((kdlshift == 0) && ((mf & 2) != 0)) {
|
||||
// left shift went down
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_DOWN, 0x2a);
|
||||
kdlshift = 1;
|
||||
}
|
||||
if ((kdlshift != 0) && ((mf & 2) == 0)) {
|
||||
// left shift went up
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_RELEASE, 0x2a);
|
||||
kdlshift = 0;
|
||||
}
|
||||
|
||||
// right shift
|
||||
if ((kdrshift == 0) && ((mf & 4) != 0)) {
|
||||
// right shift went down
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_DOWN, 0x36);
|
||||
kdrshift = 1;
|
||||
}
|
||||
if ((kdrshift != 0) && ((mf & 4) == 0)) {
|
||||
// right shift went up
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_RELEASE, 0x36);
|
||||
kdrshift = 0;
|
||||
}
|
||||
|
||||
// left ctrl
|
||||
if ((kdlctrl == 0) && ((mf & 1) != 0)) {
|
||||
// left ctrl went down
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_DOWN, 0x1d);
|
||||
kdlctrl = 1;
|
||||
}
|
||||
if ((kdlctrl != 0) && ((mf & 1) == 0)) {
|
||||
// left ctrl went up
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_RELEASE, 0x1d);
|
||||
kdlctrl = 0;
|
||||
}
|
||||
|
||||
// right ctrl
|
||||
if ((kdrctrl == 0) && ((mf & 0x2000) != 0)) {
|
||||
// right ctrl went down
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_DOWN, 0x1d);
|
||||
kdrctrl = 1;
|
||||
}
|
||||
if ((kdrctrl != 0) && ((mf & 0x2000) == 0)) {
|
||||
// right ctrl went up
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_RELEASE, 0x1d);
|
||||
kdrctrl = 0;
|
||||
}
|
||||
|
||||
// left alt
|
||||
if ((kdlalt == 0) && ((mf & 0x20) != 0)) {
|
||||
// left alt went down
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_DOWN, 0x38);
|
||||
kdlalt = 1;
|
||||
}
|
||||
if ((kdlalt != 0) && ((mf & 0x20) == 0)) {
|
||||
// left alt went up
|
||||
instance->input->KeyboardEvent(instance->input, KBD_FLAGS_RELEASE, 0x38);
|
||||
kdlalt = 0;
|
||||
}
|
||||
|
||||
// right alt
|
||||
if ((kdralt == 0) && ((mf & 0x40) != 0)) {
|
||||
// right alt went down
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_DOWN, 0x38);
|
||||
kdralt = 1;
|
||||
}
|
||||
if ((kdralt != 0) && ((mf & 0x40) == 0)) {
|
||||
// right alt went up
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_RELEASE, 0x38);
|
||||
kdralt = 0;
|
||||
}
|
||||
|
||||
// left meta
|
||||
if ((kdlmeta == 0) && ((mf & 0x08) != 0)) {
|
||||
// left meta went down
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_DOWN, 0x5b);
|
||||
kdlmeta = 1;
|
||||
}
|
||||
if ((kdlmeta != 0) && ((mf & 0x08) == 0)) {
|
||||
// left meta went up
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_RELEASE, 0x5b);
|
||||
kdlmeta = 0;
|
||||
}
|
||||
|
||||
// right meta
|
||||
if ((kdrmeta == 0) && ((mf & 0x10) != 0)) {
|
||||
// right meta went down
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_DOWN, 0x5c);
|
||||
kdrmeta = 1;
|
||||
}
|
||||
if ((kdrmeta != 0) && ((mf & 0x10) == 0)) {
|
||||
// right meta went up
|
||||
instance->input->KeyboardEvent(instance->input, 1 | KBD_FLAGS_RELEASE, 0x5c);
|
||||
kdrmeta = 0;
|
||||
}
|
||||
|
||||
keyFlags = 0;
|
||||
key = [event keyCode] + 8;
|
||||
modFlags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
|
||||
|
||||
vkcode = GetVirtualKeyCodeFromKeycode(key, KEYCODE_TYPE_APPLE);
|
||||
scancode = GetVirtualScanCodeFromVirtualKeyCode(vkcode, 4);
|
||||
keyFlags |= (scancode & KBDEXT) ? KBDEXT : 0;
|
||||
scancode &= 0xFF;
|
||||
vkcode &= 0xFF;
|
||||
|
||||
#if 0
|
||||
fprintf(stderr, "flagsChanged: key: 0x%04X scancode: 0x%04X vkcode: 0x%04X extended: %d name: %s modFlags: 0x%04X\n",
|
||||
key - 8, scancode, vkcode, keyFlags, GetVirtualKeyName(vkcode), modFlags);
|
||||
|
||||
if (modFlags & NSAlphaShiftKeyMask)
|
||||
fprintf(stderr, "NSAlphaShiftKeyMask\n");
|
||||
|
||||
if (modFlags & NSShiftKeyMask)
|
||||
fprintf(stderr, "NSShiftKeyMask\n");
|
||||
|
||||
if (modFlags & NSControlKeyMask)
|
||||
fprintf(stderr, "NSControlKeyMask\n");
|
||||
|
||||
if (modFlags & NSAlternateKeyMask)
|
||||
fprintf(stderr, "NSAlternateKeyMask\n");
|
||||
|
||||
if (modFlags & NSCommandKeyMask)
|
||||
fprintf(stderr, "NSCommandKeyMask\n");
|
||||
|
||||
if (modFlags & NSNumericPadKeyMask)
|
||||
fprintf(stderr, "NSNumericPadKeyMask\n");
|
||||
|
||||
if (modFlags & NSHelpKeyMask)
|
||||
fprintf(stderr, "NSHelpKeyMask\n");
|
||||
#endif
|
||||
|
||||
if ((modFlags & NSAlphaShiftKeyMask) && !(kbdModFlags & NSAlphaShiftKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSAlphaShiftKeyMask) && (kbdModFlags & NSAlphaShiftKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSShiftKeyMask) && !(kbdModFlags & NSShiftKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSShiftKeyMask) && (kbdModFlags & NSShiftKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSControlKeyMask) && !(kbdModFlags & NSControlKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSControlKeyMask) && (kbdModFlags & NSControlKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSAlternateKeyMask) && !(kbdModFlags & NSAlternateKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSAlternateKeyMask) && (kbdModFlags & NSAlternateKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSCommandKeyMask) && !(kbdModFlags & NSCommandKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSCommandKeyMask) && (kbdModFlags & NSCommandKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSNumericPadKeyMask) && !(kbdModFlags & NSNumericPadKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSNumericPadKeyMask) && (kbdModFlags & NSNumericPadKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
if ((modFlags & NSHelpKeyMask) && !(kbdModFlags & NSHelpKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_DOWN, scancode);
|
||||
else if (!(modFlags & NSHelpKeyMask) && (kbdModFlags & NSHelpKeyMask))
|
||||
freerdp_input_send_keyboard_event(instance->input, keyFlags | KBD_FLAGS_RELEASE, scancode);
|
||||
|
||||
kbdModFlags = modFlags;
|
||||
}
|
||||
|
||||
- (void) releaseResources
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (argv[i])
|
||||
@ -705,16 +692,16 @@ DWORD mac_client_thread(void* param)
|
||||
return;
|
||||
|
||||
if (self->bitmap_context)
|
||||
{
|
||||
{
|
||||
CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort];
|
||||
CGImageRef cgImage = CGBitmapContextCreateImage(self->bitmap_context);
|
||||
|
||||
CGContextClipToRect(cgContext, CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height));
|
||||
CGContextDrawImage(cgContext, CGRectMake(0,
|
||||
0, [self bounds].size.width, [self bounds].size.height), cgImage);
|
||||
CGContextClipToRect(cgContext, CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height));
|
||||
CGContextDrawImage(cgContext, CGRectMake(0,
|
||||
0, [self bounds].size.width, [self bounds].size.height), cgImage);
|
||||
|
||||
CGImageRelease(cgImage);
|
||||
}
|
||||
CGImageRelease(cgImage);
|
||||
}
|
||||
else
|
||||
{
|
||||
// just clear the screen with black
|
||||
@ -748,10 +735,10 @@ DWORD mac_client_thread(void* param)
|
||||
|
||||
- (void) setScrollOffset:(int)xOffset y:(int)yOffset w:(int)width h:(int)height
|
||||
{
|
||||
mfc->yCurrentScroll = yOffset;
|
||||
mfc->xCurrentScroll = xOffset;
|
||||
mfc->client_height = height;
|
||||
mfc->client_width = width;
|
||||
mfc->yCurrentScroll = yOffset;
|
||||
mfc->xCurrentScroll = xOffset;
|
||||
mfc->client_height = height;
|
||||
mfc->client_width = width;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
@ -942,11 +929,11 @@ void mf_Pointer_New(rdpContext* context, rdpPointer* pointer)
|
||||
cursor_data = (BYTE*) malloc(rect.size.width * rect.size.height * 4);
|
||||
mrdpCursor->cursor_data = cursor_data;
|
||||
|
||||
if (pointer->xorBpp > 24)
|
||||
{
|
||||
freerdp_image_swap_color_order(pointer->xorMaskData, pointer->width, pointer->height);
|
||||
if (pointer->xorBpp > 24)
|
||||
{
|
||||
freerdp_image_swap_color_order(pointer->xorMaskData, pointer->width, pointer->height);
|
||||
}
|
||||
|
||||
|
||||
freerdp_alpha_cursor_convert(cursor_data, pointer->xorMaskData, pointer->andMaskData,
|
||||
pointer->width, pointer->height, pointer->xorBpp, context->gdi->clrconv);
|
||||
|
||||
@ -1025,12 +1012,12 @@ void mf_Pointer_Set(rdpContext* context, rdpPointer* pointer)
|
||||
{
|
||||
if (cursor->pointer == pointer)
|
||||
{
|
||||
[view setCursor:cursor->nsCursor];
|
||||
[view setCursor:cursor->nsCursor];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
NSLog(@"Cursor not found");
|
||||
|
||||
NSLog(@"Cursor not found");
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -1050,7 +1037,7 @@ void mf_Pointer_SetDefault(rdpContext* context)
|
||||
{
|
||||
mfContext* mfc = (mfContext*) context;
|
||||
MRDPView* view = (MRDPView*) mfc->view;
|
||||
[view setCursor:[NSCursor arrowCursor]];
|
||||
[view setCursor:[NSCursor arrowCursor]];
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -1093,12 +1080,12 @@ void mac_end_paint(rdpContext* context)
|
||||
mfContext* mfc = (mfContext*) context;
|
||||
MRDPView* view = (MRDPView*) mfc->view;
|
||||
|
||||
int ww, wh, dw, dh;
|
||||
int ww, wh, dw, dh;
|
||||
|
||||
ww = mfc->client_width;
|
||||
wh = mfc->client_height;
|
||||
dw = mfc->context.settings->DesktopWidth;
|
||||
dh = mfc->context.settings->DesktopHeight;
|
||||
ww = mfc->client_width;
|
||||
wh = mfc->client_height;
|
||||
dw = mfc->context.settings->DesktopWidth;
|
||||
dh = mfc->context.settings->DesktopHeight;
|
||||
|
||||
if ((context == 0) || (context->gdi == 0))
|
||||
return;
|
||||
@ -1113,32 +1100,32 @@ void mac_end_paint(rdpContext* context)
|
||||
|
||||
for (i = 0; i < gdi->primary->hdc->hwnd->ninvalid; i++)
|
||||
{
|
||||
drawRect.origin.x = gdi->primary->hdc->hwnd->cinvalid[i].x;
|
||||
drawRect.origin.y = gdi->primary->hdc->hwnd->cinvalid[i].y;
|
||||
drawRect.size.width = gdi->primary->hdc->hwnd->cinvalid[i].w;
|
||||
drawRect.size.height = gdi->primary->hdc->hwnd->cinvalid[i].h;
|
||||
drawRect.origin.x = gdi->primary->hdc->hwnd->cinvalid[i].x;
|
||||
drawRect.origin.y = gdi->primary->hdc->hwnd->cinvalid[i].y;
|
||||
drawRect.size.width = gdi->primary->hdc->hwnd->cinvalid[i].w;
|
||||
drawRect.size.height = gdi->primary->hdc->hwnd->cinvalid[i].h;
|
||||
|
||||
if (mfc->context.settings->SmartSizing && (ww != dw || wh != dh))
|
||||
{
|
||||
drawRect.origin.y = drawRect.origin.y * wh / dh - 1;
|
||||
drawRect.size.height = drawRect.size.height * wh / dh + 1;
|
||||
drawRect.origin.x = drawRect.origin.x * ww / dw - 1;
|
||||
drawRect.size.width = drawRect.size.width * ww / dw + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
drawRect.origin.y = drawRect.origin.y - 1;
|
||||
drawRect.size.height = drawRect.size.height + 1;
|
||||
drawRect.origin.x = drawRect.origin.x - 1;
|
||||
drawRect.size.width = drawRect.size.width + 1;
|
||||
}
|
||||
if (mfc->context.settings->SmartSizing && (ww != dw || wh != dh))
|
||||
{
|
||||
drawRect.origin.y = drawRect.origin.y * wh / dh - 1;
|
||||
drawRect.size.height = drawRect.size.height * wh / dh + 1;
|
||||
drawRect.origin.x = drawRect.origin.x * ww / dw - 1;
|
||||
drawRect.size.width = drawRect.size.width * ww / dw + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
drawRect.origin.y = drawRect.origin.y - 1;
|
||||
drawRect.size.height = drawRect.size.height + 1;
|
||||
drawRect.origin.x = drawRect.origin.x - 1;
|
||||
drawRect.size.width = drawRect.size.width + 1;
|
||||
}
|
||||
|
||||
windows_to_apple_cords(mfc->view, &drawRect);
|
||||
windows_to_apple_cords(mfc->view, &drawRect);
|
||||
|
||||
// Note: The xCurrentScroll and yCurrentScroll values do not need to be taken into account
|
||||
// because the current frame is always at full size, since the scrolling is handled by the external container.
|
||||
// Note: The xCurrentScroll and yCurrentScroll values do not need to be taken into account
|
||||
// because the current frame is always at full size, since the scrolling is handled by the external container.
|
||||
|
||||
[view setNeedsDisplayInRect:drawRect];
|
||||
[view setNeedsDisplayInRect:drawRect];
|
||||
}
|
||||
|
||||
gdi->primary->hdc->hwnd->ninvalid = 0;
|
||||
@ -1170,7 +1157,7 @@ static void update_activity_cb(freerdp* instance)
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "update_activity_cb: No queue!\n");
|
||||
fprintf(stderr, "update_activity_cb: No queue!\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1182,7 +1169,7 @@ static void input_activity_cb(freerdp* instance)
|
||||
{
|
||||
int status;
|
||||
wMessage message;
|
||||
wMessageQueue* queue;
|
||||
wMessageQueue* queue;
|
||||
|
||||
status = 1;
|
||||
queue = freerdp_get_message_queue(instance, FREERDP_INPUT_MESSAGE_QUEUE);
|
||||
@ -1197,10 +1184,10 @@ static void input_activity_cb(freerdp* instance)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "input_activity_cb: No queue!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "input_activity_cb: No queue!\n");
|
||||
}
|
||||
}
|
||||
|
||||
/** *********************************************************************
|
||||
@ -1209,14 +1196,16 @@ static void input_activity_cb(freerdp* instance)
|
||||
|
||||
static void channel_activity_cb(freerdp* instance)
|
||||
{
|
||||
wMessage* event;
|
||||
wMessage* event;
|
||||
|
||||
freerdp_channels_process_pending_messages(instance);
|
||||
event = freerdp_channels_pop_event(instance->context->channels);
|
||||
|
||||
if (event)
|
||||
{
|
||||
fprintf(stderr, "channel_activity_cb: message %d\n", event->id);
|
||||
switch (GetMessageClass(event->id))
|
||||
fprintf(stderr, "channel_activity_cb: message %d\n", event->id);
|
||||
|
||||
switch (GetMessageClass(event->id))
|
||||
{
|
||||
case CliprdrChannel_Class:
|
||||
process_cliprdr_event(instance, event);
|
||||
@ -1472,7 +1461,7 @@ void cliprdr_send_supported_format_list(freerdp* instance)
|
||||
|
||||
void windows_to_apple_cords(MRDPView* view, NSRect* r)
|
||||
{
|
||||
r->origin.y = [view frame].size.height - (r->origin.y + r->size.height);
|
||||
r->origin.y = [view frame].size.height - (r->origin.y + r->size.height);
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include <freerdp/client/cmdline.h>
|
||||
#include <freerdp/client/channels.h>
|
||||
#include <freerdp/channels/channels.h>
|
||||
#include <freerdp/event.h>
|
||||
|
||||
#include "wf_gdi.h"
|
||||
#include "wf_graphics.h"
|
||||
@ -331,6 +332,7 @@ BOOL wf_post_connect(freerdp* instance)
|
||||
rdpContext* context;
|
||||
WCHAR lpWindowName[64];
|
||||
rdpSettings* settings;
|
||||
EmbedWindowEventArgs e;
|
||||
|
||||
settings = instance->settings;
|
||||
context = instance->context;
|
||||
@ -401,7 +403,7 @@ BOOL wf_post_connect(freerdp* instance)
|
||||
wfc->hwnd = CreateWindowEx((DWORD) NULL, wfc->wndClassName, lpWindowName, dwStyle,
|
||||
0, 0, 0, 0, wfc->hWndParent, NULL, wfc->hInstance, NULL);
|
||||
|
||||
SetWindowLongPtr(wfc->hwnd, GWLP_USERDATA, (LONG_PTR) wfc);
|
||||
SetWindowLongPtr(wfc->hwnd, GWLP_USERDATA, (LONG_PTR) wfc);
|
||||
}
|
||||
|
||||
wf_resize_window(wfc);
|
||||
@ -411,6 +413,11 @@ BOOL wf_post_connect(freerdp* instance)
|
||||
BitBlt(wfc->primary->hdc, 0, 0, wfc->width, wfc->height, NULL, 0, 0, BLACKNESS);
|
||||
wfc->drawing = wfc->primary;
|
||||
|
||||
EventArgsInit(&e, "wfreerdp");
|
||||
e.embed = FALSE;
|
||||
e.handle = (void*) wfc->hwnd;
|
||||
PubSub_OnEmbedWindow(context->pubSub, context, &e);
|
||||
|
||||
ShowWindow(wfc->hwnd, SW_SHOWNORMAL);
|
||||
UpdateWindow(wfc->hwnd);
|
||||
|
||||
@ -767,6 +774,8 @@ int freerdp_client_focus_out(wfContext* wfc)
|
||||
|
||||
int freerdp_client_set_window_size(wfContext* wfc, int width, int height)
|
||||
{
|
||||
fprintf(stderr, "freerdp_client_set_window_size %d, %d", width, height);
|
||||
|
||||
if ((width != wfc->client_width) || (height != wfc->client_height))
|
||||
{
|
||||
PostThreadMessage(wfc->mainThreadId, WM_SIZE, SIZE_RESTORED, ((UINT) height << 16) | (UINT) width);
|
||||
|
@ -138,6 +138,8 @@ typedef struct wf_context wfContext;
|
||||
*/
|
||||
|
||||
FREERDP_API int RdpClientEntry(RDP_CLIENT_ENTRY_POINTS* pEntryPoints);
|
||||
FREERDP_API int freerdp_client_set_window_size(wfContext* wfc, int width, int height);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ WINPR_API void LinkedList_Enumerator_Reset(wLinkedList* list);
|
||||
WINPR_API void* LinkedList_Enumerator_Current(wLinkedList* list);
|
||||
WINPR_API BOOL LinkedList_Enumerator_MoveNext(wLinkedList* list);
|
||||
|
||||
WINPR_API wLinkedList* LinkedList_New();
|
||||
WINPR_API wLinkedList* LinkedList_New(void);
|
||||
WINPR_API void LinkedList_Free(wLinkedList* list);
|
||||
|
||||
/* System.Collections.Generic.KeyValuePair<TKey,TValue> */
|
||||
|
@ -65,7 +65,7 @@ struct _wLogMessage
|
||||
|
||||
LPSTR PrefixString;
|
||||
|
||||
LPSTR FormatString;
|
||||
LPCSTR FormatString;
|
||||
LPSTR TextString;
|
||||
|
||||
DWORD LineNumber; /* __LINE__ */
|
||||
@ -182,7 +182,7 @@ struct _wLog
|
||||
WINPR_API void WLog_PrintMessage(wLog* log, wLogMessage* message, ...);
|
||||
|
||||
#define WLog_Print(_log, _log_level, _fmt, ...) \
|
||||
if (_log_level <= _log->Level) { \
|
||||
if (_log_level >= _log->Level) { \
|
||||
wLogMessage _log_message; \
|
||||
_log_message.Type = WLOG_MESSAGE_TEXT; \
|
||||
_log_message.Level = _log_level; \
|
||||
@ -194,7 +194,7 @@ WINPR_API void WLog_PrintMessage(wLog* log, wLogMessage* message, ...);
|
||||
}
|
||||
|
||||
#define WLog_Image(_log, _log_level, ...) \
|
||||
if (_log_level <= _log->Level) { \
|
||||
if (_log_level >= _log->Level) { \
|
||||
wLogMessage _log_message; \
|
||||
_log_message.Type = WLOG_MESSAGE_IMAGE; \
|
||||
_log_message.Level = _log_level; \
|
||||
@ -206,7 +206,7 @@ WINPR_API void WLog_PrintMessage(wLog* log, wLogMessage* message, ...);
|
||||
}
|
||||
|
||||
#define WLog_Data(_log, _log_level, ...) \
|
||||
if (_log_level <= _log->Level) { \
|
||||
if (_log_level >= _log->Level) { \
|
||||
wLogMessage _log_message; \
|
||||
_log_message.Type = WLOG_MESSAGE_DATA; \
|
||||
_log_message.Level = _log_level; \
|
||||
|
@ -97,17 +97,17 @@ DWORD KEYCODE_TO_VKCODE_APPLE[256] =
|
||||
VK_BACK, /* APPLE_VK_Delete (0x33) */
|
||||
0, /* APPLE_VK_0x34 (0x34) */
|
||||
VK_ESCAPE, /* APPLE_VK_Escape (0x35) */
|
||||
0, /* APPLE_VK_0x36 (0x36) */
|
||||
VK_RWIN | KBDEXT, /* APPLE_VK_RightCommand (0x36) */
|
||||
VK_LWIN | KBDEXT, /* APPLE_VK_Command (0x37) */
|
||||
VK_LSHIFT, /* APPLE_VK_Shift (0x38) */
|
||||
VK_CAPITAL, /* APPLE_VK_CapsLock (0x39) */
|
||||
VK_LMENU, /* APPLE_VK_Option (0x3A) */
|
||||
VK_LCONTROL, /* APPLE_VK_Control (0x3B) */
|
||||
VK_RSHIFT, /* APPLE_VK_RightShift (0x3C) */
|
||||
VK_RMENU, /* APPLE_VK_RightOption (0x3D) */
|
||||
0, /* APPLE_VK_RightControl (0x3E) */
|
||||
VK_RMENU | KBDEXT, /* APPLE_VK_RightOption (0x3D) */
|
||||
VK_RWIN | KBDEXT, /* APPLE_VK_RightControl (0x3E) */
|
||||
VK_RWIN | KBDEXT, /* APPLE_VK_Function (0x3F) */
|
||||
0, /* APPLE_VK_F17 (0x40) */
|
||||
VK_F17, /* APPLE_VK_F17 (0x40) */
|
||||
VK_DECIMAL, /* APPLE_VK_ANSI_KeypadDecimal (0x41) */
|
||||
0, /* APPLE_VK_0x42 (0x42) */
|
||||
VK_MULTIPLY, /* APPLE_VK_ANSI_KeypadMultiply (0x43) */
|
||||
@ -115,16 +115,16 @@ DWORD KEYCODE_TO_VKCODE_APPLE[256] =
|
||||
VK_ADD, /* APPLE_VK_ANSI_KeypadPlus (0x45) */
|
||||
0, /* APPLE_VK_0x46 (0x46) */
|
||||
VK_NUMLOCK, /* APPLE_VK_ANSI_KeypadClear (0x47) */
|
||||
0, /* APPLE_VK_VolumeUp (0x48) */
|
||||
0, /* APPLE_VK_VolumeDown (0x49) */
|
||||
0, /* APPLE_VK_Mute (0x4A) */
|
||||
VK_VOLUME_UP, /* APPLE_VK_VolumeUp (0x48) */
|
||||
VK_VOLUME_DOWN, /* APPLE_VK_VolumeDown (0x49) */
|
||||
VK_VOLUME_MUTE, /* APPLE_VK_Mute (0x4A) */
|
||||
VK_DIVIDE | KBDEXT, /* APPLE_VK_ANSI_KeypadDivide (0x4B) */
|
||||
VK_RETURN | KBDEXT, /* APPLE_VK_ANSI_KeypadEnter (0x4C) */
|
||||
0, /* APPLE_VK_0x4D (0x4D) */
|
||||
VK_SUBTRACT, /* APPLE_VK_ANSI_KeypadMinus (0x4E) */
|
||||
0, /* APPLE_VK_F18 (0x4F) */
|
||||
0, /* APPLE_VK_F19 (0x50) */
|
||||
0, /* APPLE_VK_ANSI_KeypadEquals (0x51) */
|
||||
VK_F18, /* APPLE_VK_F18 (0x4F) */
|
||||
VK_F19, /* APPLE_VK_F19 (0x50) */
|
||||
VK_CLEAR | KBDEXT, /* APPLE_VK_ANSI_KeypadEquals (0x51) */
|
||||
VK_NUMPAD0, /* APPLE_VK_ANSI_Keypad0 (0x52) */
|
||||
VK_NUMPAD1, /* APPLE_VK_ANSI_Keypad1 (0x53) */
|
||||
VK_NUMPAD2, /* APPLE_VK_ANSI_Keypad2 (0x54) */
|
||||
@ -133,7 +133,7 @@ DWORD KEYCODE_TO_VKCODE_APPLE[256] =
|
||||
VK_NUMPAD5, /* APPLE_VK_ANSI_Keypad5 (0x57) */
|
||||
VK_NUMPAD6, /* APPLE_VK_ANSI_Keypad6 (0x58) */
|
||||
VK_NUMPAD7, /* APPLE_VK_ANSI_Keypad7 (0x59) */
|
||||
0, /* APPLE_VK_F20 (0x5A) */
|
||||
VK_F20, /* APPLE_VK_F20 (0x5A) */
|
||||
VK_NUMPAD8, /* APPLE_VK_ANSI_Keypad8 (0x5B) */
|
||||
VK_NUMPAD9, /* APPLE_VK_ANSI_Keypad9 (0x5C) */
|
||||
0, /* APPLE_VK_JIS_Yen (0x5D) */
|
||||
@ -149,8 +149,8 @@ DWORD KEYCODE_TO_VKCODE_APPLE[256] =
|
||||
VK_F11, /* APPLE_VK_F11 (0x67) */
|
||||
0, /* APPLE_VK_JIS_Kana (0x68) */
|
||||
VK_SNAPSHOT | KBDEXT, /* APPLE_VK_F13 (0x69) */
|
||||
0, /* APPLE_VK_F16 (0x6A) */
|
||||
VK_SCROLL, /* APPLE_VK_F14 (0x6B) */
|
||||
VK_F16, /* APPLE_VK_F16 (0x6A) */
|
||||
VK_F14, /* APPLE_VK_F14 (0x6B) */
|
||||
0, /* APPLE_VK_0x6C (0x6C) */
|
||||
VK_F10, /* APPLE_VK_F10 (0x6D) */
|
||||
0, /* APPLE_VK_0x6E (0x6E) */
|
||||
|
@ -16,7 +16,7 @@ int TestWLog(int argc, char* argv[])
|
||||
|
||||
root = WLog_GetRoot();
|
||||
|
||||
WLog_SetLogAppenderType(root, WLOG_APPENDER_FILE);
|
||||
WLog_SetLogAppenderType(root, WLOG_APPENDER_BINARY);
|
||||
|
||||
appender = WLog_GetLogAppender(root);
|
||||
WLog_ConsoleAppender_SetOutputStream(root, (wLogConsoleAppender*) appender, WLOG_CONSOLE_STDERR);
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <winpr/file.h>
|
||||
#include <winpr/path.h>
|
||||
#include <winpr/thread.h>
|
||||
#include <winpr/stream.h>
|
||||
|
||||
#include <winpr/wlog.h>
|
||||
|
||||
@ -82,7 +83,7 @@ int WLog_BinaryAppender_Open(wLog* log, wLogBinaryAppender* appender)
|
||||
if (!appender->FileName)
|
||||
{
|
||||
appender->FileName = (char*) malloc(256);
|
||||
sprintf_s(appender->FileName, 256, "%u.bin.log", (unsigned int) ProcessId);
|
||||
sprintf_s(appender->FileName, 256, "%u.wlog", (unsigned int) ProcessId);
|
||||
}
|
||||
|
||||
if (!appender->FullFileName)
|
||||
@ -113,7 +114,11 @@ int WLog_BinaryAppender_Close(wLog* log, wLogBinaryAppender* appender)
|
||||
int WLog_BinaryAppender_WriteMessage(wLog* log, wLogBinaryAppender* appender, wLogMessage* message)
|
||||
{
|
||||
FILE* fp;
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE];
|
||||
wStream* s;
|
||||
int MessageLength;
|
||||
int FileNameLength;
|
||||
int FunctionNameLength;
|
||||
int TextStringLength;
|
||||
|
||||
if (message->Level > log->Level)
|
||||
return 0;
|
||||
@ -123,10 +128,38 @@ int WLog_BinaryAppender_WriteMessage(wLog* log, wLogBinaryAppender* appender, wL
|
||||
if (!fp)
|
||||
return -1;
|
||||
|
||||
message->PrefixString = prefix;
|
||||
WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
|
||||
FileNameLength = strlen(message->FileName);
|
||||
FunctionNameLength = strlen(message->FunctionName);
|
||||
TextStringLength = strlen(message->TextString);
|
||||
|
||||
fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
|
||||
MessageLength = 16 +
|
||||
(4 + FileNameLength + 1) +
|
||||
(4 + FunctionNameLength + 1) +
|
||||
(4 + TextStringLength + 1);
|
||||
|
||||
s = Stream_New(NULL, MessageLength);
|
||||
|
||||
Stream_Write_UINT32(s, MessageLength);
|
||||
|
||||
Stream_Write_UINT32(s, message->Type);
|
||||
Stream_Write_UINT32(s, message->Level);
|
||||
|
||||
Stream_Write_UINT32(s, message->LineNumber);
|
||||
|
||||
Stream_Write_UINT32(s, FileNameLength);
|
||||
Stream_Write(s, message->FileName, FileNameLength + 1);
|
||||
|
||||
Stream_Write_UINT32(s, FunctionNameLength);
|
||||
Stream_Write(s, message->FunctionName, FunctionNameLength + 1);
|
||||
|
||||
Stream_Write_UINT32(s, TextStringLength);
|
||||
Stream_Write(s, message->TextString, TextStringLength + 1);
|
||||
|
||||
Stream_SealLength(s);
|
||||
|
||||
fwrite(Stream_Buffer(s), MessageLength, 1, fp);
|
||||
|
||||
Stream_Free(s, TRUE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -151,6 +184,8 @@ wLogBinaryAppender* WLog_BinaryAppender_New(wLog* log)
|
||||
{
|
||||
ZeroMemory(BinaryAppender, sizeof(wLogBinaryAppender));
|
||||
|
||||
BinaryAppender->Type = WLOG_APPENDER_BINARY;
|
||||
|
||||
BinaryAppender->Open = (WLOG_APPENDER_OPEN_FN) WLog_BinaryAppender_Open;
|
||||
BinaryAppender->Close = (WLOG_APPENDER_OPEN_FN) WLog_BinaryAppender_Close;
|
||||
|
||||
|
@ -68,7 +68,7 @@ int WLog_ConsoleAppender_WriteMessage(wLog* log, wLogConsoleAppender* appender,
|
||||
FILE* fp;
|
||||
char prefix[WLOG_MAX_PREFIX_SIZE];
|
||||
|
||||
if (message->Level > log->Level)
|
||||
if (message->Level < log->Level)
|
||||
return 0;
|
||||
|
||||
fp = (appender->outputStream == WLOG_CONSOLE_STDERR) ? stderr : stdout;
|
||||
@ -126,6 +126,8 @@ wLogConsoleAppender* WLog_ConsoleAppender_New(wLog* log)
|
||||
{
|
||||
ZeroMemory(ConsoleAppender, sizeof(wLogConsoleAppender));
|
||||
|
||||
ConsoleAppender->Type = WLOG_APPENDER_CONSOLE;
|
||||
|
||||
ConsoleAppender->Open = (WLOG_APPENDER_OPEN_FN) WLog_ConsoleAppender_Open;
|
||||
ConsoleAppender->Close = (WLOG_APPENDER_OPEN_FN) WLog_ConsoleAppender_Close;
|
||||
|
||||
|
@ -176,6 +176,8 @@ wLogFileAppender* WLog_FileAppender_New(wLog* log)
|
||||
{
|
||||
ZeroMemory(FileAppender, sizeof(wLogFileAppender));
|
||||
|
||||
FileAppender->Type = WLOG_APPENDER_FILE;
|
||||
|
||||
FileAppender->Open = (WLOG_APPENDER_OPEN_FN) WLog_FileAppender_Open;
|
||||
FileAppender->Close = (WLOG_APPENDER_OPEN_FN) WLog_FileAppender_Close;
|
||||
|
||||
|
@ -258,6 +258,7 @@ void WLog_Free(wLog* log)
|
||||
free(log->Name);
|
||||
free(log->Names[0]);
|
||||
free(log->Names);
|
||||
free(log->Children);
|
||||
|
||||
free(log);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user