summaryrefslogtreecommitdiffstats
path: root/xrdp/xrdp_wm.c
diff options
context:
space:
mode:
Diffstat (limited to 'xrdp/xrdp_wm.c')
-rw-r--r--xrdp/xrdp_wm.c2921
1 files changed, 1549 insertions, 1372 deletions
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index 7883d33e..24362f54 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -1,1383 +1,1528 @@
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- xrdp: A Remote Desktop Protocol server.
- Copyright (C) Jay Sorg 2004-2010
-
- simple window manager
-
-*/
+/**
+ * xrdp: A Remote Desktop Protocol server.
+ *
+ * Copyright (C) Jay Sorg 2004-2012
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * simple window manager
+ */
#include "xrdp.h"
/*****************************************************************************/
-struct xrdp_wm* APP_CC
-xrdp_wm_create(struct xrdp_process* owner,
- struct xrdp_client_info* client_info)
+struct xrdp_wm *APP_CC
+xrdp_wm_create(struct xrdp_process *owner,
+ struct xrdp_client_info *client_info)
{
- struct xrdp_wm* self = (struct xrdp_wm *)NULL;
- char event_name[256];
- int pid = 0;
-
- /* initialize (zero out) local variables: */
- g_memset(event_name,0,sizeof(char) * 256);
-
- self = (struct xrdp_wm*)g_malloc(sizeof(struct xrdp_wm), 1);
- self->client_info = client_info;
- self->screen = xrdp_bitmap_create(client_info->width,
- client_info->height,
- client_info->bpp,
- WND_TYPE_SCREEN, self);
- self->screen->wm = self;
- self->pro_layer = owner;
- self->session = owner->session;
- pid = g_getpid();
- g_snprintf(event_name, 255, "xrdp_%8.8x_wm_login_mode_event_%8.8x",
- pid, owner->session_id);
- self->login_mode_event = g_create_wait_obj(event_name);
- self->painter = xrdp_painter_create(self, self->session);
- self->cache = xrdp_cache_create(self, self->session, self->client_info);
- self->log = list_create();
- self->log->auto_free = 1;
- self->mm = xrdp_mm_create(self);
- self->default_font = xrdp_font_create(self);
- /* this will use built in keymap or load from file */
- get_keymaps(self->session->client_info->keylayout, &(self->keymap));
- xrdp_wm_set_login_mode(self, 0);
- self->target_surface = self->screen;
- self->current_surface_index = 0xffff; /* screen */
- return self;
+ struct xrdp_wm *self = (struct xrdp_wm *)NULL;
+ char event_name[256];
+ int pid = 0;
+
+ /* initialize (zero out) local variables: */
+ g_memset(event_name, 0, sizeof(char) * 256);
+
+ self = (struct xrdp_wm *)g_malloc(sizeof(struct xrdp_wm), 1);
+ self->client_info = client_info;
+ self->screen = xrdp_bitmap_create(client_info->width,
+ client_info->height,
+ client_info->bpp,
+ WND_TYPE_SCREEN, self);
+ self->screen->wm = self;
+ self->pro_layer = owner;
+ self->session = owner->session;
+ pid = g_getpid();
+ g_snprintf(event_name, 255, "xrdp_%8.8x_wm_login_mode_event_%8.8x",
+ pid, owner->session_id);
+ self->login_mode_event = g_create_wait_obj(event_name);
+ self->painter = xrdp_painter_create(self, self->session);
+ self->cache = xrdp_cache_create(self, self->session, self->client_info);
+ self->log = list_create();
+ self->log->auto_free = 1;
+ self->mm = xrdp_mm_create(self);
+ self->default_font = xrdp_font_create(self);
+ /* this will use built in keymap or load from file */
+ get_keymaps(self->session->client_info->keylayout, &(self->keymap));
+ xrdp_wm_set_login_mode(self, 0);
+ self->target_surface = self->screen;
+ self->current_surface_index = 0xffff; /* screen */
+ return self;
}
/*****************************************************************************/
void APP_CC
-xrdp_wm_delete(struct xrdp_wm* self)
+xrdp_wm_delete(struct xrdp_wm *self)
{
- if (self == 0)
- {
- return;
- }
- xrdp_mm_delete(self->mm);
- xrdp_cache_delete(self->cache);
- xrdp_painter_delete(self->painter);
- xrdp_bitmap_delete(self->screen);
- /* free the log */
- list_delete(self->log);
- /* free default font */
- xrdp_font_delete(self->default_font);
- g_delete_wait_obj(self->login_mode_event);
- /* free self */
- g_free(self);
+ if (self == 0)
+ {
+ return;
+ }
+
+ xrdp_mm_delete(self->mm);
+ xrdp_cache_delete(self->cache);
+ xrdp_painter_delete(self->painter);
+ xrdp_bitmap_delete(self->screen);
+ /* free the log */
+ list_delete(self->log);
+ /* free default font */
+ xrdp_font_delete(self->default_font);
+ g_delete_wait_obj(self->login_mode_event);
+ /* free self */
+ g_free(self);
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_send_palette(struct xrdp_wm* self)
+xrdp_wm_send_palette(struct xrdp_wm *self)
{
- return libxrdp_send_palette(self->session, self->palette);
+ return libxrdp_send_palette(self->session, self->palette);
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_send_bell(struct xrdp_wm* self)
+xrdp_wm_send_bell(struct xrdp_wm *self)
{
- return libxrdp_send_bell(self->session);
+ return libxrdp_send_bell(self->session);
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_send_bitmap(struct xrdp_wm* self, struct xrdp_bitmap* bitmap,
+xrdp_wm_send_bitmap(struct xrdp_wm *self, struct xrdp_bitmap *bitmap,
int x, int y, int cx, int cy)
{
- return libxrdp_send_bitmap(self->session, bitmap->width, bitmap->height,
- bitmap->bpp, bitmap->data, x, y, cx, cy);
+ return libxrdp_send_bitmap(self->session, bitmap->width, bitmap->height,
+ bitmap->bpp, bitmap->data, x, y, cx, cy);
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_set_focused(struct xrdp_wm* self, struct xrdp_bitmap* wnd)
+xrdp_wm_set_focused(struct xrdp_wm *self, struct xrdp_bitmap *wnd)
{
- struct xrdp_bitmap* focus_out_control;
- struct xrdp_bitmap* focus_in_control;
+ struct xrdp_bitmap *focus_out_control;
+ struct xrdp_bitmap *focus_in_control;
- if (self == 0)
- {
- return 0;
- }
- if (self->focused_window == wnd)
- {
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ if (self->focused_window == wnd)
+ {
+ return 0;
+ }
+
+ focus_out_control = 0;
+ focus_in_control = 0;
+
+ if (self->focused_window != 0)
+ {
+ xrdp_bitmap_set_focus(self->focused_window, 0);
+ focus_out_control = self->focused_window->focused_control;
+ }
+
+ self->focused_window = wnd;
+
+ if (self->focused_window != 0)
+ {
+ xrdp_bitmap_set_focus(self->focused_window, 1);
+ focus_in_control = self->focused_window->focused_control;
+ }
+
+ xrdp_bitmap_invalidate(focus_out_control, 0);
+ xrdp_bitmap_invalidate(focus_in_control, 0);
return 0;
- }
- focus_out_control = 0;
- focus_in_control = 0;
- if (self->focused_window != 0)
- {
- xrdp_bitmap_set_focus(self->focused_window, 0);
- focus_out_control = self->focused_window->focused_control;
- }
- self->focused_window = wnd;
- if (self->focused_window != 0)
- {
- xrdp_bitmap_set_focus(self->focused_window, 1);
- focus_in_control = self->focused_window->focused_control;
- }
- xrdp_bitmap_invalidate(focus_out_control, 0);
- xrdp_bitmap_invalidate(focus_in_control, 0);
- return 0;
}
/******************************************************************************/
static int APP_CC
-xrdp_wm_get_pixel(char* data, int x, int y, int width, int bpp)
+xrdp_wm_get_pixel(char *data, int x, int y, int width, int bpp)
{
- int start;
- int shift;
-
- if (bpp == 1)
- {
- width = (width + 7) / 8;
- start = (y * width) + x / 8;
- shift = x % 8;
- return (data[start] & (0x80 >> shift)) != 0;
- }
- else if (bpp == 4)
- {
- width = (width + 1) / 2;
- start = y * width + x / 2;
- shift = x % 2;
- if (shift == 0)
- {
- return (data[start] & 0xf0) >> 4;
+ int start;
+ int shift;
+
+ if (bpp == 1)
+ {
+ width = (width + 7) / 8;
+ start = (y * width) + x / 8;
+ shift = x % 8;
+ return (data[start] & (0x80 >> shift)) != 0;
}
- else
+ else if (bpp == 4)
{
- return data[start] & 0x0f;
+ width = (width + 1) / 2;
+ start = y * width + x / 2;
+ shift = x % 2;
+
+ if (shift == 0)
+ {
+ return (data[start] & 0xf0) >> 4;
+ }
+ else
+ {
+ return data[start] & 0x0f;
+ }
}
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_pointer(struct xrdp_wm* self, char* data, char* mask, int x, int y)
+xrdp_wm_pointer(struct xrdp_wm *self, char *data, char *mask, int x, int y)
{
- struct xrdp_pointer_item pointer_item;
-
- g_memset(&pointer_item, 0, sizeof(struct xrdp_pointer_item));
- pointer_item.x = x;
- pointer_item.y = y;
- g_memcpy(pointer_item.data, data, 32 * 32 * 3);
- g_memcpy(pointer_item.mask, mask, 32 * 32 / 8);
- self->screen->pointer = xrdp_cache_add_pointer(self->cache, &pointer_item);
- return 0;
+ struct xrdp_pointer_item pointer_item;
+
+ g_memset(&pointer_item, 0, sizeof(struct xrdp_pointer_item));
+ pointer_item.x = x;
+ pointer_item.y = y;
+ g_memcpy(pointer_item.data, data, 32 * 32 * 3);
+ g_memcpy(pointer_item.mask, mask, 32 * 32 / 8);
+ self->screen->pointer = xrdp_cache_add_pointer(self->cache, &pointer_item);
+ return 0;
}
/*****************************************************************************/
/* returns error */
int APP_CC
-xrdp_wm_load_pointer(struct xrdp_wm* self, char* file_name, char* data,
- char* mask, int* x, int* y)
+xrdp_wm_load_pointer(struct xrdp_wm *self, char *file_name, char *data,
+ char *mask, int *x, int *y)
{
- int fd;
- int bpp;
- int w;
- int h;
- int i;
- int j;
- int pixel;
- int palette[16];
- struct stream* fs;
-
- if (!g_file_exist(file_name))
- {
- g_writeln("xrdp_wm_load_pointer: error pointer file [%s] does not exist",
- file_name);
- return 1;
- }
- make_stream(fs);
- init_stream(fs, 8192);
- fd = g_file_open(file_name);
- if (fd < 1)
- {
- g_writeln("xrdp_wm_load_pointer: error loading pointer from file [%s]",
- file_name);
- return 1;
- }
- g_file_read(fd, fs->data, 8192);
- g_file_close(fd);
- in_uint8s(fs, 6);
- in_uint8(fs, w);
- in_uint8(fs, h);
- in_uint8s(fs, 2);
- in_uint16_le(fs, *x);
- in_uint16_le(fs, *y);
- in_uint8s(fs, 22);
- in_uint8(fs, bpp);
- in_uint8s(fs, 25);
- if (w == 32 && h == 32)
- {
- if (bpp == 1)
+ int fd;
+ int bpp;
+ int w;
+ int h;
+ int i;
+ int j;
+ int pixel;
+ int palette[16];
+ struct stream *fs;
+
+ if (!g_file_exist(file_name))
{
- in_uint8a(fs, palette, 8);
- for (i = 0; i < 32; i++)
- {
- for (j = 0; j < 32; j++)
- {
- pixel = palette[xrdp_wm_get_pixel(fs->p, j, i, 32, 1)];
- *data = pixel;
- data++;
- *data = pixel >> 8;
- data++;
- *data = pixel >> 16;
- data++;
- }
- }
- in_uint8s(fs, 128);
+ g_writeln("xrdp_wm_load_pointer: error pointer file [%s] does not exist",
+ file_name);
+ return 1;
}
- else if (bpp == 4)
+
+ make_stream(fs);
+ init_stream(fs, 8192);
+ fd = g_file_open(file_name);
+
+ if (fd < 1)
+ {
+ g_writeln("xrdp_wm_load_pointer: error loading pointer from file [%s]",
+ file_name);
+ return 1;
+ }
+
+ g_file_read(fd, fs->data, 8192);
+ g_file_close(fd);
+ in_uint8s(fs, 6);
+ in_uint8(fs, w);
+ in_uint8(fs, h);
+ in_uint8s(fs, 2);
+ in_uint16_le(fs, *x);
+ in_uint16_le(fs, *y);
+ in_uint8s(fs, 22);
+ in_uint8(fs, bpp);
+ in_uint8s(fs, 25);
+
+ if (w == 32 && h == 32)
{
- in_uint8a(fs, palette, 64);
- for (i = 0; i < 32; i++)
- {
- for (j = 0; j < 32; j++)
+ if (bpp == 1)
{
- pixel = palette[xrdp_wm_get_pixel(fs->p, j, i, 32, 1)];
- *data = pixel;
- data++;
- *data = pixel >> 8;
- data++;
- *data = pixel >> 16;
- data++;
+ in_uint8a(fs, palette, 8);
+
+ for (i = 0; i < 32; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ pixel = palette[xrdp_wm_get_pixel(fs->p, j, i, 32, 1)];
+ *data = pixel;
+ data++;
+ *data = pixel >> 8;
+ data++;
+ *data = pixel >> 16;
+ data++;
+ }
+ }
+
+ in_uint8s(fs, 128);
}
- }
- in_uint8s(fs, 512);
+ else if (bpp == 4)
+ {
+ in_uint8a(fs, palette, 64);
+
+ for (i = 0; i < 32; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ pixel = palette[xrdp_wm_get_pixel(fs->p, j, i, 32, 1)];
+ *data = pixel;
+ data++;
+ *data = pixel >> 8;
+ data++;
+ *data = pixel >> 16;
+ data++;
+ }
+ }
+
+ in_uint8s(fs, 512);
+ }
+
+ g_memcpy(mask, fs->p, 128); /* mask */
}
- g_memcpy(mask, fs->p, 128); /* mask */
- }
- free_stream(fs);
- return 0;
+
+ free_stream(fs);
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_send_pointer(struct xrdp_wm* self, int cache_idx,
- char* data, char* mask, int x, int y)
+xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
+ char *data, char *mask, int x, int y)
{
- return libxrdp_send_pointer(self->session, cache_idx, data, mask, x, y);
+ return libxrdp_send_pointer(self->session, cache_idx, data, mask, x, y);
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_set_pointer(struct xrdp_wm* self, int cache_idx)
+xrdp_wm_set_pointer(struct xrdp_wm *self, int cache_idx)
{
- return libxrdp_set_pointer(self->session, cache_idx);
+ return libxrdp_set_pointer(self->session, cache_idx);
}
/*****************************************************************************/
/* convert hex string to int */
unsigned int xrdp_wm_htoi (const char *ptr)
{
- unsigned int value = 0;
- char ch = *ptr;
-
- while (ch == ' ' || ch == '\t')
- ch = *(++ptr);
-
- for (;;)
- {
- if (ch >= '0' && ch <= '9')
- value = (value << 4) + (ch - '0');
- else if (ch >= 'A' && ch <= 'F')
- value = (value << 4) + (ch - 'A' + 10);
- else if (ch >= 'a' && ch <= 'f')
- value = (value << 4) + (ch - 'a' + 10);
- else
- return value;
- ch = *(++ptr);
- }
+ unsigned int value = 0;
+ char ch = *ptr;
+
+ while (ch == ' ' || ch == '\t')
+ {
+ ch = *(++ptr);
+ }
+
+ for (;;)
+ {
+ if (ch >= '0' && ch <= '9')
+ {
+ value = (value << 4) + (ch - '0');
+ }
+ else if (ch >= 'A' && ch <= 'F')
+ {
+ value = (value << 4) + (ch - 'A' + 10);
+ }
+ else if (ch >= 'a' && ch <= 'f')
+ {
+ value = (value << 4) + (ch - 'a' + 10);
+ }
+ else
+ {
+ return value;
+ }
+
+ ch = *(++ptr);
+ }
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_load_static_colors_plus(struct xrdp_wm* self, char* autorun_name)
+xrdp_wm_load_static_colors_plus(struct xrdp_wm *self, char *autorun_name)
{
- int bindex;
- int gindex;
- int rindex;
-
- int fd;
- int index;
- char* val;
- struct list* names;
- struct list* values;
- char cfg_file[256];
-
- if (autorun_name != 0)
- {
- autorun_name[0] = 0;
- }
-
- /* initialize with defaults */
- self->black = HCOLOR(self->screen->bpp,0x000000);
- self->grey = HCOLOR(self->screen->bpp,0xc0c0c0);
- self->dark_grey = HCOLOR(self->screen->bpp,0x808080);
- self->blue = HCOLOR(self->screen->bpp,0x0000ff);
- self->dark_blue = HCOLOR(self->screen->bpp,0x00007f);
- self->white = HCOLOR(self->screen->bpp,0xffffff);
- self->red = HCOLOR(self->screen->bpp,0xff0000);
- self->green = HCOLOR(self->screen->bpp,0x00ff00);
- self->background = HCOLOR(self->screen->bpp,0x000000);
-
- /* now load them from the globals in xrdp.ini if defined */
- g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
- fd = g_file_open(cfg_file);
- if (fd > 0)
- {
- names = list_create();
- names->auto_free = 1;
- values = list_create();
- values->auto_free = 1;
- if (file_read_section(fd, "globals", names, values) == 0)
- {
- for (index = 0; index < names->count; index++)
- {
- val = (char*)list_get_item(names, index);
- if (val != 0)
+ int bindex;
+ int gindex;
+ int rindex;
+
+ int fd;
+ int index;
+ char *val;
+ struct list *names;
+ struct list *values;
+ char cfg_file[256];
+
+ if (autorun_name != 0)
+ {
+ autorun_name[0] = 0;
+ }
+
+ /* initialize with defaults */
+ self->black = HCOLOR(self->screen->bpp, 0x000000);
+ self->grey = HCOLOR(self->screen->bpp, 0xc0c0c0);
+ self->dark_grey = HCOLOR(self->screen->bpp, 0x808080);
+ self->blue = HCOLOR(self->screen->bpp, 0x0000ff);
+ self->dark_blue = HCOLOR(self->screen->bpp, 0x00007f);
+ self->white = HCOLOR(self->screen->bpp, 0xffffff);
+ self->red = HCOLOR(self->screen->bpp, 0xff0000);
+ self->green = HCOLOR(self->screen->bpp, 0x00ff00);
+ self->background = HCOLOR(self->screen->bpp, 0x000000);
+
+ /* now load them from the globals in xrdp.ini if defined */
+ g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
+ fd = g_file_open(cfg_file);
+
+ if (fd > 0)
+ {
+ names = list_create();
+ names->auto_free = 1;
+ values = list_create();
+ values->auto_free = 1;
+
+ if (file_read_section(fd, "globals", names, values) == 0)
{
- if (g_strcasecmp(val, "black") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->black = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "grey") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->grey = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "dark_grey") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->dark_grey = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "blue") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->blue = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "dark_blue") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->dark_blue = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "white") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->white = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "red") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->red = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "green") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->green = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "background") == 0)
- {
- val = (char*)list_get_item(values, index);
- self->background = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
- }
- else if (g_strcasecmp(val, "autorun") == 0)
- {
- val = (char*)list_get_item(values, index);
- if (autorun_name != 0)
+ for (index = 0; index < names->count; index++)
{
- g_strncpy(autorun_name, val, 255);
+ val = (char *)list_get_item(names, index);
+
+ if (val != 0)
+ {
+ if (g_strcasecmp(val, "black") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->black = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "grey") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->grey = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "dark_grey") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->dark_grey = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "blue") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->blue = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "dark_blue") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->dark_blue = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "white") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->white = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "red") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->red = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "green") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->green = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "background") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+ self->background = HCOLOR(self->screen->bpp, xrdp_wm_htoi(val));
+ }
+ else if (g_strcasecmp(val, "autorun") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+
+ if (autorun_name != 0)
+ {
+ g_strncpy(autorun_name, val, 255);
+ }
+ }
+ else if (g_strcasecmp(val, "hidelogwindow") == 0)
+ {
+ val = (char *)list_get_item(values, index);
+
+ if ((g_strcasecmp(val, "yes") == 0) ||
+ (g_strcasecmp(val, "1") == 0) ||
+ (g_strcasecmp(val, "true") == 0))
+ {
+ self->hide_log_window = 1;
+ }
+ }
+ }
}
- }
- else if (g_strcasecmp(val, "hidelogwindow") == 0)
- {
- val = (char*)list_get_item(values, index);
- if ((g_strcasecmp(val, "yes") == 0) ||
- (g_strcasecmp(val, "1") == 0) ||
- (g_strcasecmp(val, "true") == 0))
- {
- self->hide_log_window = 1;
- }
- }
}
- }
+
+ list_delete(names);
+ list_delete(values);
+ g_file_close(fd);
}
- list_delete(names);
- list_delete(values);
- g_file_close(fd);
- }
- else
- {
- g_writeln("xrdp_wm_load_static_colors: Could not read xrdp.ini file %s", cfg_file);
- }
-
- if (self->screen->bpp == 8)
- {
- /* rgb332 */
- for (bindex = 0; bindex < 4; bindex++)
- {
- for (gindex = 0; gindex < 8; gindex++)
- {
- for (rindex = 0; rindex < 8; rindex++)
+ else
+ {
+ g_writeln("xrdp_wm_load_static_colors: Could not read xrdp.ini file %s", cfg_file);
+ }
+
+ if (self->screen->bpp == 8)
+ {
+ /* rgb332 */
+ for (bindex = 0; bindex < 4; bindex++)
{
- self->palette[(bindex << 6) | (gindex << 3) | rindex] =
- (((rindex << 5) | (rindex << 2) | (rindex >> 1)) << 16) |
- (((gindex << 5) | (gindex << 2) | (gindex >> 1)) << 8) |
- ((bindex << 6) | (bindex << 4) | (bindex << 2) | (bindex));
+ for (gindex = 0; gindex < 8; gindex++)
+ {
+ for (rindex = 0; rindex < 8; rindex++)
+ {
+ self->palette[(bindex << 6) | (gindex << 3) | rindex] =
+ (((rindex << 5) | (rindex << 2) | (rindex >> 1)) << 16) |
+ (((gindex << 5) | (gindex << 2) | (gindex >> 1)) << 8) |
+ ((bindex << 6) | (bindex << 4) | (bindex << 2) | (bindex));
+ }
+ }
}
- }
+
+ xrdp_wm_send_palette(self);
}
- xrdp_wm_send_palette(self);
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
/* returns error */
int APP_CC
-xrdp_wm_load_static_pointers(struct xrdp_wm* self)
+xrdp_wm_load_static_pointers(struct xrdp_wm *self)
{
- struct xrdp_pointer_item pointer_item;
- char file_path[256];
-
- DEBUG(("sending cursor"));
- g_snprintf(file_path, 255, "%s/cursor1.cur", XRDP_SHARE_PATH);
- g_memset(&pointer_item, 0, sizeof(pointer_item));
- xrdp_wm_load_pointer(self, file_path, pointer_item.data,
- pointer_item.mask, &pointer_item.x, &pointer_item.y);
- xrdp_cache_add_pointer_static(self->cache, &pointer_item, 1);
- DEBUG(("sending cursor"));
- g_snprintf(file_path, 255, "%s/cursor0.cur", XRDP_SHARE_PATH);
- g_memset(&pointer_item, 0, sizeof(pointer_item));
- xrdp_wm_load_pointer(self, file_path, pointer_item.data,
- pointer_item.mask, &pointer_item.x, &pointer_item.y);
- xrdp_cache_add_pointer_static(self->cache, &pointer_item, 0);
- return 0;
+ struct xrdp_pointer_item pointer_item;
+ char file_path[256];
+
+ DEBUG(("sending cursor"));
+ g_snprintf(file_path, 255, "%s/cursor1.cur", XRDP_SHARE_PATH);
+ g_memset(&pointer_item, 0, sizeof(pointer_item));
+ xrdp_wm_load_pointer(self, file_path, pointer_item.data,
+ pointer_item.mask, &pointer_item.x, &pointer_item.y);
+ xrdp_cache_add_pointer_static(self->cache, &pointer_item, 1);
+ DEBUG(("sending cursor"));
+ g_snprintf(file_path, 255, "%s/cursor0.cur", XRDP_SHARE_PATH);
+ g_memset(&pointer_item, 0, sizeof(pointer_item));
+ xrdp_wm_load_pointer(self, file_path, pointer_item.data,
+ pointer_item.mask, &pointer_item.x, &pointer_item.y);
+ xrdp_cache_add_pointer_static(self->cache, &pointer_item, 0);
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_init(struct xrdp_wm* self)
+xrdp_wm_init(struct xrdp_wm *self)
{
- int fd;
- int index;
- struct list* names;
- struct list* values;
- char* q;
- char* r;
- char section_name[256];
- char cfg_file[256];
- char autorun_name[256];
-
- xrdp_wm_load_static_colors_plus(self, autorun_name);
- xrdp_wm_load_static_pointers(self);
- self->screen->bg_color = self->background;
- if (self->session->client_info->rdp_autologin || (autorun_name[0] != 0))
- {
- g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
- fd = g_file_open(cfg_file); /* xrdp.ini */
- if (fd > 0)
+ int fd;
+ int index;
+ struct list *names;
+ struct list *values;
+ char *q;
+ char *r;
+ char section_name[256];
+ char cfg_file[256];
+ char autorun_name[256];
+
+ xrdp_wm_load_static_colors_plus(self, autorun_name);
+ xrdp_wm_load_static_pointers(self);
+ self->screen->bg_color = self->background;
+
+ if (self->session->client_info->rdp_autologin || (autorun_name[0] != 0))
{
- names = list_create();
- names->auto_free = 1;
- values = list_create();
- values->auto_free = 1;
- g_strncpy(section_name, self->session->client_info->domain, 255);
- if (section_name[0] == 0)
- {
- if (autorun_name[0] == 0)
+ g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
+ fd = g_file_open(cfg_file); /* xrdp.ini */
+
+ if (fd > 0)
{
- /* if no doamin is passed, and no autorun in xrdp.ini,
- use the first item in the xrdp.ini
- file thats not named 'globals' */
- file_read_sections(fd, names);
- for (index = 0; index < names->count; index++)
- {
- q = (char*)list_get_item(names, index);
- if (g_strncasecmp("globals", q, 8) != 0)
+ names = list_create();
+ names->auto_free = 1;
+ values = list_create();
+ values->auto_free = 1;
+ g_strncpy(section_name, self->session->client_info->domain, 255);
+
+ if (section_name[0] == 0)
{
- g_strncpy(section_name, q, 255);
- break;
+ if (autorun_name[0] == 0)
+ {
+ /* if no doamin is passed, and no autorun in xrdp.ini,
+ use the first item in the xrdp.ini
+ file thats not named 'globals' */
+ file_read_sections(fd, names);
+
+ for (index = 0; index < names->count; index++)
+ {
+ q = (char *)list_get_item(names, index);
+
+ if (g_strncasecmp("globals", q, 8) != 0)
+ {
+ g_strncpy(section_name, q, 255);
+ break;
+ }
+ }
+ }
+ else
+ {
+ g_strncpy(section_name, autorun_name, 255);
+ }
}
- }
+
+ list_clear(names);
+
+ if (file_read_section(fd, section_name, names, values) == 0)
+ {
+ for (index = 0; index < names->count; index++)
+ {
+ q = (char *)list_get_item(names, index);
+ r = (char *)list_get_item(values, index);
+
+ if (g_strncmp("password", q, 255) == 0)
+ {
+ /* if the password has been asked for by the module, use what the
+ client says.
+ if the password has been manually set in the config, use that
+ instead of what the client says. */
+ if (g_strncmp("ask", r, 3) == 0)
+ {
+ r = self->session->client_info->password;
+ }
+ }
+ else if (g_strncmp("username", q, 255) == 0)
+ {
+ /* if the username has been asked for by the module, use what the
+ client says.
+ if the username has been manually set in the config, use that
+ instead of what the client says. */
+ if (g_strncmp("ask", r, 3) == 0)
+ {
+ r = self->session->client_info->username;
+ }
+ }
+
+ list_add_item(self->mm->login_names, (long)g_strdup(q));
+ list_add_item(self->mm->login_values, (long)g_strdup(r));
+ }
+
+ xrdp_wm_set_login_mode(self, 2);
+ }
+
+ list_delete(names);
+ list_delete(values);
+ g_file_close(fd);
}
else
{
- g_strncpy(section_name, autorun_name, 255);
- }
- }
- list_clear(names);
- if (file_read_section(fd, section_name, names, values) == 0)
- {
- for (index = 0; index < names->count; index++)
- {
- q = (char*)list_get_item(names, index);
- r = (char*)list_get_item(values, index);
- if (g_strncmp("password", q, 255) == 0)
- {
- /* if the password has been asked for by the module, use what the
- client says.
- if the password has been manually set in the config, use that
- instead of what the client says. */
- if (g_strncmp("ask", r, 3) == 0)
- {
- r = self->session->client_info->password;
- }
- }
- else if (g_strncmp("username", q, 255) == 0)
- {
- /* if the username has been asked for by the module, use what the
- client says.
- if the username has been manually set in the config, use that
- instead of what the client says. */
- if (g_strncmp("ask", r, 3) == 0)
- {
- r = self->session->client_info->username;
- }
- }
- list_add_item(self->mm->login_names, (long)g_strdup(q));
- list_add_item(self->mm->login_values, (long)g_strdup(r));
+ g_writeln("xrdp_wm_init: Could not read xrdp.ini file %s", cfg_file);
}
- xrdp_wm_set_login_mode(self, 2);
- }
- list_delete(names);
- list_delete(values);
- g_file_close(fd);
}
else
{
- g_writeln("xrdp_wm_init: Could not read xrdp.ini file %s", cfg_file);
- }
- }
- else
- {
- xrdp_login_wnd_create(self);
- /* clear screen */
- xrdp_bitmap_invalidate(self->screen, 0);
- xrdp_wm_set_focused(self, self->login_window);
- xrdp_wm_set_login_mode(self, 1);
- }
- return 0;
+ xrdp_login_wnd_create(self);
+ /* clear screen */
+ xrdp_bitmap_invalidate(self->screen, 0);
+ xrdp_wm_set_focused(self, self->login_window);
+ xrdp_wm_set_login_mode(self, 1);
+ }
+
+ return 0;
}
/*****************************************************************************/
/* returns the number for rects visible for an area relative to a drawable */
/* putting the rects in region */
int APP_CC
-xrdp_wm_get_vis_region(struct xrdp_wm* self, struct xrdp_bitmap* bitmap,
+xrdp_wm_get_vis_region(struct xrdp_wm *self, struct xrdp_bitmap *bitmap,
int x, int y, int cx, int cy,
- struct xrdp_region* region, int clip_children)
+ struct xrdp_region *region, int clip_children)
{
- int i;
- struct xrdp_bitmap* p;
- struct xrdp_rect a;
- struct xrdp_rect b;
-
- /* area we are drawing */
- MAKERECT(a, bitmap->left + x, bitmap->top + y, cx, cy);
- p = bitmap->parent;
- while (p != 0)
- {
- RECTOFFSET(a, p->left, p->top);
- p = p->parent;
- }
- a.left = MAX(self->screen->left, a.left);
- a.top = MAX(self->screen->top, a.top);
- a.right = MIN(self->screen->left + self->screen->width, a.right);
- a.bottom = MIN(self->screen->top + self->screen->height, a.bottom);
- xrdp_region_add_rect(region, &a);
- if (clip_children)
- {
- /* loop through all windows in z order */
- for (i = 0; i < self->screen->child_list->count; i++)
+ int i;
+ struct xrdp_bitmap *p;
+ struct xrdp_rect a;
+ struct xrdp_rect b;
+
+ /* area we are drawing */
+ MAKERECT(a, bitmap->left + x, bitmap->top + y, cx, cy);
+ p = bitmap->parent;
+
+ while (p != 0)
{
- p = (struct xrdp_bitmap*)list_get_item(self->screen->child_list, i);
- if (p == bitmap || p == bitmap->parent)
- {
- return 0;
- }
- MAKERECT(b, p->left, p->top, p->width, p->height);
- xrdp_region_subtract_rect(region, &b);
+ RECTOFFSET(a, p->left, p->top);
+ p = p->parent;
}
- }
- return 0;
+
+ a.left = MAX(self->screen->left, a.left);
+ a.top = MAX(self->screen->top, a.top);
+ a.right = MIN(self->screen->left + self->screen->width, a.right);
+ a.bottom = MIN(self->screen->top + self->screen->height, a.bottom);
+ xrdp_region_add_rect(region, &a);
+
+ if (clip_children)
+ {
+ /* loop through all windows in z order */
+ for (i = 0; i < self->screen->child_list->count; i++)
+ {
+ p = (struct xrdp_bitmap *)list_get_item(self->screen->child_list, i);
+
+ if (p == bitmap || p == bitmap->parent)
+ {
+ return 0;
+ }
+
+ MAKERECT(b, p->left, p->top, p->width, p->height);
+ xrdp_region_subtract_rect(region, &b);
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
/* return the window at x, y on the screen */
-static struct xrdp_bitmap* APP_CC
-xrdp_wm_at_pos(struct xrdp_bitmap* wnd, int x, int y,
- struct xrdp_bitmap** wnd1)
+static struct xrdp_bitmap *APP_CC
+xrdp_wm_at_pos(struct xrdp_bitmap *wnd, int x, int y,
+ struct xrdp_bitmap **wnd1)
{
- int i;
- struct xrdp_bitmap* p;
- struct xrdp_bitmap* q;
-
- /* loop through all windows in z order */
- for (i = 0; i < wnd->child_list->count; i++)
- {
- p = (struct xrdp_bitmap*)list_get_item(wnd->child_list, i);
- if (x >= p->left && y >= p->top && x < p->left + p->width &&
- y < p->top + p->height)
- {
- if (wnd1 != 0)
- {
- *wnd1 = p;
- }
- q = xrdp_wm_at_pos(p, x - p->left, y - p->top, 0);
- if (q == 0)
- {
- return p;
- }
- else
- {
- return q;
- }
- }
- }
- return 0;
+ int i;
+ struct xrdp_bitmap *p;
+ struct xrdp_bitmap *q;
+
+ /* loop through all windows in z order */
+ for (i = 0; i < wnd->child_list->count; i++)
+ {
+ p = (struct xrdp_bitmap *)list_get_item(wnd->child_list, i);
+
+ if (x >= p->left && y >= p->top && x < p->left + p->width &&
+ y < p->top + p->height)
+ {
+ if (wnd1 != 0)
+ {
+ *wnd1 = p;
+ }
+
+ q = xrdp_wm_at_pos(p, x - p->left, y - p->top, 0);
+
+ if (q == 0)
+ {
+ return p;
+ }
+ else
+ {
+ return q;
+ }
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_xor_pat(struct xrdp_wm* self, int x, int y, int cx, int cy)
+xrdp_wm_xor_pat(struct xrdp_wm *self, int x, int y, int cx, int cy)
{
- self->painter->clip_children = 0;
- self->painter->rop = 0x5a;
- xrdp_painter_begin_update(self->painter);
- self->painter->use_clip = 0;
- self->painter->mix_mode = 1;
- self->painter->brush.pattern[0] = 0xaa;
- self->painter->brush.pattern[1] = 0x55;
- self->painter->brush.pattern[2] = 0xaa;
- self->painter->brush.pattern[3] = 0x55;
- self->painter->brush.pattern[4] = 0xaa;
- self->painter->brush.pattern[5] = 0x55;
- self->painter->brush.pattern[6] = 0xaa;
- self->painter->brush.pattern[7] = 0x55;
- self->painter->brush.x_orgin = 0;
- self->painter->brush.x_orgin = 0;
- self->painter->brush.style = 3;
- self->painter->bg_color = self->black;
- self->painter->fg_color = self->white;
- /* top */
- xrdp_painter_fill_rect(self->painter, self->screen, x, y, cx, 5);
- /* bottom */
- xrdp_painter_fill_rect(self->painter, self->screen, x, y + (cy - 5), cx, 5);
- /* left */
- xrdp_painter_fill_rect(self->painter, self->screen, x, y + 5, 5, cy - 10);
- /* right */
- xrdp_painter_fill_rect(self->painter, self->screen, x + (cx - 5), y + 5, 5,
- cy - 10);
- xrdp_painter_end_update(self->painter);
- self->painter->rop = 0xcc;
- self->painter->clip_children = 1;
- self->painter->mix_mode = 0;
- return 0;
+ self->painter->clip_children = 0;
+ self->painter->rop = 0x5a;
+ xrdp_painter_begin_update(self->painter);
+ self->painter->use_clip = 0;
+ self->painter->mix_mode = 1;
+ self->painter->brush.pattern[0] = 0xaa;
+ self->painter->brush.pattern[1] = 0x55;
+ self->painter->brush.pattern[2] = 0xaa;
+ self->painter->brush.pattern[3] = 0x55;
+ self->painter->brush.pattern[4] = 0xaa;
+ self->painter->brush.pattern[5] = 0x55;
+ self->painter->brush.pattern[6] = 0xaa;
+ self->painter->brush.pattern[7] = 0x55;
+ self->painter->brush.x_orgin = 0;
+ self->painter->brush.x_orgin = 0;
+ self->painter->brush.style = 3;
+ self->painter->bg_color = self->black;
+ self->painter->fg_color = self->white;
+ /* top */
+ xrdp_painter_fill_rect(self->painter, self->screen, x, y, cx, 5);
+ /* bottom */
+ xrdp_painter_fill_rect(self->painter, self->screen, x, y + (cy - 5), cx, 5);
+ /* left */
+ xrdp_painter_fill_rect(self->painter, self->screen, x, y + 5, 5, cy - 10);
+ /* right */
+ xrdp_painter_fill_rect(self->painter, self->screen, x + (cx - 5), y + 5, 5,
+ cy - 10);
+ xrdp_painter_end_update(self->painter);
+ self->painter->rop = 0xcc;
+ self->painter->clip_children = 1;
+ self->painter->mix_mode = 0;
+ return 0;
}
/*****************************************************************************/
/* this don't are about nothing, just copy the bits */
/* no clipping rects, no windows in the way, nothing */
static int APP_CC
-xrdp_wm_bitblt(struct xrdp_wm* self,
- struct xrdp_bitmap* dst, int dx, int dy,
- struct xrdp_bitmap* src, int sx, int sy,
+xrdp_wm_bitblt(struct xrdp_wm *self,
+ struct xrdp_bitmap *dst, int dx, int dy,
+ struct xrdp_bitmap *src, int sx, int sy,
int sw, int sh, int rop)
{
-// int i;
-// int line_size;
-// int Bpp;
-// char* s;
-// char* d;
-
-// if (sw <= 0 || sh <= 0)
-// return 0;
- if (self->screen == dst && self->screen == src)
- { /* send a screen blt */
-// Bpp = (dst->bpp + 7) / 8;
-// line_size = sw * Bpp;
-// s = src->data + (sy * src->width + sx) * Bpp;
-// d = dst->data + (dy * dst->width + dx) * Bpp;
-// for (i = 0; i < sh; i++)
-// {
-// //g_memcpy(d, s, line_size);
-// s += src->width * Bpp;
-// d += dst->width * Bpp;
-// }
- libxrdp_orders_init(self->session);
- libxrdp_orders_screen_blt(self->session, dx, dy, sw, sh, sx, sy, rop, 0);
- libxrdp_orders_send(self->session);
- }
- return 0;
+ // int i;
+ // int line_size;
+ // int Bpp;
+ // char* s;
+ // char* d;
+
+ // if (sw <= 0 || sh <= 0)
+ // return 0;
+ if (self->screen == dst && self->screen == src)
+ {
+ /* send a screen blt */
+ // Bpp = (dst->bpp + 7) / 8;
+ // line_size = sw * Bpp;
+ // s = src->data + (sy * src->width + sx) * Bpp;
+ // d = dst->data + (dy * dst->width + dx) * Bpp;
+ // for (i = 0; i < sh; i++)
+ // {
+ // //g_memcpy(d, s, line_size);
+ // s += src->width * Bpp;
+ // d += dst->width * Bpp;
+ // }
+ libxrdp_orders_init(self->session);
+ libxrdp_orders_screen_blt(self->session, dx, dy, sw, sh, sx, sy, rop, 0);
+ libxrdp_orders_send(self->session);
+ }
+
+ return 0;
}
/*****************************************************************************/
/* return true is rect is totaly exposed going in reverse z order */
/* from wnd up */
static int APP_CC
-xrdp_wm_is_rect_vis(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
- struct xrdp_rect* rect)
+xrdp_wm_is_rect_vis(struct xrdp_wm *self, struct xrdp_bitmap *wnd,
+ struct xrdp_rect *rect)
{
- struct xrdp_rect wnd_rect;
- struct xrdp_bitmap* b;
- int i;;
+ struct xrdp_rect wnd_rect;
+ struct xrdp_bitmap *b;
+ int i;;
- /* if rect is part off screen */
- if (rect->left < 0)
- {
- return 0;
- }
- if (rect->top < 0)
- {
- return 0;
- }
- if (rect->right >= self->screen->width)
- {
- return 0;
- }
- if (rect->bottom >= self->screen->height)
- {
- return 0;
- }
+ /* if rect is part off screen */
+ if (rect->left < 0)
+ {
+ return 0;
+ }
- i = list_index_of(self->screen->child_list, (long)wnd);
- i--;
- while (i >= 0)
- {
- b = (struct xrdp_bitmap*)list_get_item(self->screen->child_list, i);
- MAKERECT(wnd_rect, b->left, b->top, b->width, b->height);
- if (rect_intersect(rect, &wnd_rect, 0))
+ if (rect->top < 0)
{
- return 0;
+ return 0;
+ }
+
+ if (rect->right >= self->screen->width)
+ {
+ return 0;
+ }
+
+ if (rect->bottom >= self->screen->height)
+ {
+ return 0;
}
+
+ i = list_index_of(self->screen->child_list, (long)wnd);
i--;
- }
- return 1;
+
+ while (i >= 0)
+ {
+ b = (struct xrdp_bitmap *)list_get_item(self->screen->child_list, i);
+ MAKERECT(wnd_rect, b->left, b->top, b->width, b->height);
+
+ if (rect_intersect(rect, &wnd_rect, 0))
+ {
+ return 0;
+ }
+
+ i--;
+ }
+
+ return 1;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_move_window(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
+xrdp_wm_move_window(struct xrdp_wm *self, struct xrdp_bitmap *wnd,
int dx, int dy)
{
- struct xrdp_rect rect1;
- struct xrdp_rect rect2;
- struct xrdp_region* r;
- int i;
-
- MAKERECT(rect1, wnd->left, wnd->top, wnd->width, wnd->height);
- if (xrdp_wm_is_rect_vis(self, wnd, &rect1))
- {
- rect2 = rect1;
- RECTOFFSET(rect2, dx, dy);
- if (xrdp_wm_is_rect_vis(self, wnd, &rect2))
- { /* if both src and dst are unobscured, we can do a bitblt move */
- xrdp_wm_bitblt(self, self->screen, wnd->left + dx, wnd->top + dy,
- self->screen, wnd->left, wnd->top,
- wnd->width, wnd->height, 0xcc);
- wnd->left += dx;
- wnd->top += dy;
- r = xrdp_region_create(self);
- xrdp_region_add_rect(r, &rect1);
- xrdp_region_subtract_rect(r, &rect2);
- i = 0;
- while (xrdp_region_get_rect(r, i, &rect1) == 0)
- {
- xrdp_bitmap_invalidate(self->screen, &rect1);
- i++;
- }
- xrdp_region_delete(r);
- return 0;
- }
- }
- wnd->left += dx;
- wnd->top += dy;
- xrdp_bitmap_invalidate(self->screen, &rect1);
- xrdp_bitmap_invalidate(wnd, 0);
- return 0;
+ struct xrdp_rect rect1;
+ struct xrdp_rect rect2;
+ struct xrdp_region *r;
+ int i;
+
+ MAKERECT(rect1, wnd->left, wnd->top, wnd->width, wnd->height);
+
+ if (xrdp_wm_is_rect_vis(self, wnd, &rect1))
+ {
+ rect2 = rect1;
+ RECTOFFSET(rect2, dx, dy);
+
+ if (xrdp_wm_is_rect_vis(self, wnd, &rect2))
+ {
+ /* if both src and dst are unobscured, we can do a bitblt move */
+ xrdp_wm_bitblt(self, self->screen, wnd->left + dx, wnd->top + dy,
+ self->screen, wnd->left, wnd->top,
+ wnd->width, wnd->height, 0xcc);
+ wnd->left += dx;
+ wnd->top += dy;
+ r = xrdp_region_create(self);
+ xrdp_region_add_rect(r, &rect1);
+ xrdp_region_subtract_rect(r, &rect2);
+ i = 0;
+
+ while (xrdp_region_get_rect(r, i, &rect1) == 0)
+ {
+ xrdp_bitmap_invalidate(self->screen, &rect1);
+ i++;
+ }
+
+ xrdp_region_delete(r);
+ return 0;
+ }
+ }
+
+ wnd->left += dx;
+ wnd->top += dy;
+ xrdp_bitmap_invalidate(self->screen, &rect1);
+ xrdp_bitmap_invalidate(wnd, 0);
+ return 0;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_undraw_dragging_box(struct xrdp_wm* self, int do_begin_end)
+xrdp_wm_undraw_dragging_box(struct xrdp_wm *self, int do_begin_end)
{
- int boxx;
- int boxy;
+ int boxx;
+ int boxy;
- if (self == 0)
- {
- return 0;
- }
- if (self->dragging)
- {
- if (self->draggingxorstate)
+ if (self == 0)
{
- if (do_begin_end)
- {
- xrdp_painter_begin_update(self->painter);
- }
- boxx = self->draggingx - self->draggingdx;
- boxy = self->draggingy - self->draggingdy;
- xrdp_wm_xor_pat(self, boxx, boxy, self->draggingcx, self->draggingcy);
- self->draggingxorstate = 0;
- if (do_begin_end)
- {
- xrdp_painter_end_update(self->painter);
- }
+ return 0;
}
- }
- return 0;
+
+ if (self->dragging)
+ {
+ if (self->draggingxorstate)
+ {
+ if (do_begin_end)
+ {
+ xrdp_painter_begin_update(self->painter);
+ }
+
+ boxx = self->draggingx - self->draggingdx;
+ boxy = self->draggingy - self->draggingdy;
+ xrdp_wm_xor_pat(self, boxx, boxy, self->draggingcx, self->draggingcy);
+ self->draggingxorstate = 0;
+
+ if (do_begin_end)
+ {
+ xrdp_painter_end_update(self->painter);
+ }
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_draw_dragging_box(struct xrdp_wm* self, int do_begin_end)
+xrdp_wm_draw_dragging_box(struct xrdp_wm *self, int do_begin_end)
{
- int boxx;
- int boxy;
+ int boxx;
+ int boxy;
- if (self == 0)
- {
- return 0;
- }
- if (self->dragging)
- {
- if (!self->draggingxorstate)
+ if (self == 0)
{
- if (do_begin_end)
- {
- xrdp_painter_begin_update(self->painter);
- }
- boxx = self->draggingx - self->draggingdx;
- boxy = self->draggingy - self->draggingdy;
- xrdp_wm_xor_pat(self, boxx, boxy, self->draggingcx, self->draggingcy);
- self->draggingxorstate = 1;
- if (do_begin_end)
- {
- xrdp_painter_end_update(self->painter);
- }
+ return 0;
}
- }
- return 0;
+
+ if (self->dragging)
+ {
+ if (!self->draggingxorstate)
+ {
+ if (do_begin_end)
+ {
+ xrdp_painter_begin_update(self->painter);
+ }
+
+ boxx = self->draggingx - self->draggingdx;
+ boxy = self->draggingy - self->draggingdy;
+ xrdp_wm_xor_pat(self, boxx, boxy, self->draggingcx, self->draggingcy);
+ self->draggingxorstate = 1;
+
+ if (do_begin_end)
+ {
+ xrdp_painter_end_update(self->painter);
+ }
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_mouse_move(struct xrdp_wm* self, int x, int y)
+xrdp_wm_mouse_move(struct xrdp_wm *self, int x, int y)
{
- struct xrdp_bitmap* b;
+ struct xrdp_bitmap *b;
- if (self == 0)
- {
- return 0;
- }
- if (x < 0)
- {
- x = 0;
- }
- if (y < 0)
- {
- y = 0;
- }
- if (x >= self->screen->width)
- {
- x = self->screen->width;
- }
- if (y >= self->screen->height)
- {
- y = self->screen->height;
- }
- self->mouse_x = x;
- self->mouse_y = y;
- if (self->dragging)
- {
- xrdp_painter_begin_update(self->painter);
- xrdp_wm_undraw_dragging_box(self, 0);
- self->draggingx = x;
- self->draggingy = y;
- xrdp_wm_draw_dragging_box(self, 0);
- xrdp_painter_end_update(self->painter);
- return 0;
- }
- b = xrdp_wm_at_pos(self->screen, x, y, 0);
- if (b == 0) /* if b is null, the movment must be over the screen */
- {
- if (self->screen->pointer != self->current_pointer)
- {
- xrdp_wm_set_pointer(self, self->screen->pointer);
- self->current_pointer = self->screen->pointer;
- }
- if (self->mm->mod != 0) /* if screen is mod controled */
- {
- if (self->mm->mod->mod_event != 0)
- {
- self->mm->mod->mod_event(self->mm->mod, WM_MOUSEMOVE, x, y, 0, 0);
- }
- }
- }
- if (self->button_down != 0)
- {
- if (b == self->button_down && self->button_down->state == 0)
- {
- self->button_down->state = 1;
- xrdp_bitmap_invalidate(self->button_down, 0);
- }
- else if (b != self->button_down)
- {
- self->button_down->state = 0;
- xrdp_bitmap_invalidate(self->button_down, 0);
- }
- }
- if (b != 0)
- {
- if (!self->dragging)
- {
- if (b->pointer != self->current_pointer)
- {
- xrdp_wm_set_pointer(self, b->pointer);
- self->current_pointer = b->pointer;
- }
- xrdp_bitmap_def_proc(b, WM_MOUSEMOVE,
- xrdp_bitmap_from_screenx(b, x),
- xrdp_bitmap_from_screeny(b, y));
- if (self->button_down == 0)
- {
- if (b->notify != 0)
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ if (x < 0)
+ {
+ x = 0;
+ }
+
+ if (y < 0)
+ {
+ y = 0;
+ }
+
+ if (x >= self->screen->width)
+ {
+ x = self->screen->width;
+ }
+
+ if (y >= self->screen->height)
+ {
+ y = self->screen->height;
+ }
+
+ self->mouse_x = x;
+ self->mouse_y = y;
+
+ if (self->dragging)
+ {
+ xrdp_painter_begin_update(self->painter);
+ xrdp_wm_undraw_dragging_box(self, 0);
+ self->draggingx = x;
+ self->draggingy = y;
+ xrdp_wm_draw_dragging_box(self, 0);
+ xrdp_painter_end_update(self->painter);
+ return 0;
+ }
+
+ b = xrdp_wm_at_pos(self->screen, x, y, 0);
+
+ if (b == 0) /* if b is null, the movment must be over the screen */
+ {
+ if (self->screen->pointer != self->current_pointer)
+ {
+ xrdp_wm_set_pointer(self, self->screen->pointer);
+ self->current_pointer = self->screen->pointer;
+ }
+
+ if (self->mm->mod != 0) /* if screen is mod controled */
{
- b->notify(b->owner, b, 2, x, y);
+ if (self->mm->mod->mod_event != 0)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_MOUSEMOVE, x, y, 0, 0);
+ }
}
- }
}
- }
- return 0;
+
+ if (self->button_down != 0)
+ {
+ if (b == self->button_down && self->button_down->state == 0)
+ {
+ self->button_down->state = 1;
+ xrdp_bitmap_invalidate(self->button_down, 0);
+ }
+ else if (b != self->button_down)
+ {
+ self->button_down->state = 0;
+ xrdp_bitmap_invalidate(self->button_down, 0);
+ }
+ }
+
+ if (b != 0)
+ {
+ if (!self->dragging)
+ {
+ if (b->pointer != self->current_pointer)
+ {
+ xrdp_wm_set_pointer(self, b->pointer);
+ self->current_pointer = b->pointer;
+ }
+
+ xrdp_bitmap_def_proc(b, WM_MOUSEMOVE,
+ xrdp_bitmap_from_screenx(b, x),
+ xrdp_bitmap_from_screeny(b, y));
+
+ if (self->button_down == 0)
+ {
+ if (b->notify != 0)
+ {
+ b->notify(b->owner, b, 2, x, y);
+ }
+ }
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_clear_popup(struct xrdp_wm* self)
+xrdp_wm_clear_popup(struct xrdp_wm *self)
{
- int i;
- struct xrdp_rect rect;
- //struct xrdp_bitmap* b;
-
- //b = 0;
- if (self->popup_wnd != 0)
- {
- //b = self->popup_wnd->popped_from;
- i = list_index_of(self->screen->child_list, (long)self->popup_wnd);
- list_remove_item(self->screen->child_list, i);
- MAKERECT(rect, self->popup_wnd->left, self->popup_wnd->top,
- self->popup_wnd->width, self->popup_wnd->height);
- xrdp_bitmap_invalidate(self->screen, &rect);
- xrdp_bitmap_delete(self->popup_wnd);
- }
- //xrdp_wm_set_focused(self, b->parent);
- return 0;
+ int i;
+ struct xrdp_rect rect;
+ //struct xrdp_bitmap* b;
+
+ //b = 0;
+ if (self->popup_wnd != 0)
+ {
+ //b = self->popup_wnd->popped_from;
+ i = list_index_of(self->screen->child_list, (long)self->popup_wnd);
+ list_remove_item(self->screen->child_list, i);
+ MAKERECT(rect, self->popup_wnd->left, self->popup_wnd->top,
+ self->popup_wnd->width, self->popup_wnd->height);
+ xrdp_bitmap_invalidate(self->screen, &rect);
+ xrdp_bitmap_delete(self->popup_wnd);
+ }
+
+ //xrdp_wm_set_focused(self, b->parent);
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_mouse_click(struct xrdp_wm* self, int x, int y, int but, int down)
+xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down)
{
- struct xrdp_bitmap* control;
- struct xrdp_bitmap* focus_out_control;
- struct xrdp_bitmap* wnd;
- int newx;
- int newy;
- int oldx;
- int oldy;
-
- if (self == 0)
- {
- return 0;
- }
- if (x < 0)
- {
- x = 0;
- }
- if (y < 0)
- {
- y = 0;
- }
- if (x >= self->screen->width)
- {
- x = self->screen->width;
- }
- if (y >= self->screen->height)
- {
- y = self->screen->height;
- }
- if (self->dragging && but == 1 && !down && self->dragging_window != 0)
- { /* if done dragging */
- self->draggingx = x;
- self->draggingy = y;
- newx = self->draggingx - self->draggingdx;
- newy = self->draggingy - self->draggingdy;
- oldx = self->dragging_window->left;
- oldy = self->dragging_window->top;
- /* draw xor box one more time */
- if (self->draggingxorstate)
- {
- xrdp_wm_xor_pat(self, newx, newy, self->draggingcx, self->draggingcy);
- }
- self->draggingxorstate = 0;
- /* move screen to new location */
- xrdp_wm_move_window(self, self->dragging_window, newx - oldx, newy - oldy);
- self->dragging_window = 0;
- self->dragging = 0;
- }
- wnd = 0;
- control = xrdp_wm_at_pos(self->screen, x, y, &wnd);
- if (control == 0)
- {
- if (self->mm->mod != 0) /* if screen is mod controled */
- {
- if (self->mm->mod->mod_event != 0)
- {
- if (but == 1 && down)
+ struct xrdp_bitmap *control;
+ struct xrdp_bitmap *focus_out_control;
+ struct xrdp_bitmap *wnd;
+ int newx;
+ int newy;
+ int oldx;
+ int oldy;
+
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ if (x < 0)
+ {
+ x = 0;
+ }
+
+ if (y < 0)
+ {
+ y = 0;
+ }
+
+ if (x >= self->screen->width)
+ {
+ x = self->screen->width;
+ }
+
+ if (y >= self->screen->height)
+ {
+ y = self->screen->height;
+ }
+
+ if (self->dragging && but == 1 && !down && self->dragging_window != 0)
+ {
+ /* if done dragging */
+ self->draggingx = x;
+ self->draggingy = y;
+ newx = self->draggingx - self->draggingdx;
+ newy = self->draggingy - self->draggingdy;
+ oldx = self->dragging_window->left;
+ oldy = self->dragging_window->top;
+
+ /* draw xor box one more time */
+ if (self->draggingxorstate)
{
- self->mm->mod->mod_event(self->mm->mod, WM_LBUTTONDOWN, x, y, 0, 0);
+ xrdp_wm_xor_pat(self, newx, newy, self->draggingcx, self->draggingcy);
}
- else if (but == 1 && !down)
+
+ self->draggingxorstate = 0;
+ /* move screen to new location */
+ xrdp_wm_move_window(self, self->dragging_window, newx - oldx, newy - oldy);
+ self->dragging_window = 0;
+ self->dragging = 0;
+ }
+
+ wnd = 0;
+ control = xrdp_wm_at_pos(self->screen, x, y, &wnd);
+
+ if (control == 0)
+ {
+ if (self->mm->mod != 0) /* if screen is mod controled */
{
- self->mm->mod->mod_event(self->mm->mod, WM_LBUTTONUP, x, y, 0, 0);
+ if (self->mm->mod->mod_event != 0)
+ {
+ if (but == 1 && down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_LBUTTONDOWN, x, y, 0, 0);
+ }
+ else if (but == 1 && !down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_LBUTTONUP, x, y, 0, 0);
+ }
+
+ if (but == 2 && down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_RBUTTONDOWN, x, y, 0, 0);
+ }
+ else if (but == 2 && !down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_RBUTTONUP, x, y, 0, 0);
+ }
+
+ if (but == 3 && down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON3DOWN, x, y, 0, 0);
+ }
+ else if (but == 3 && !down)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON3UP, x, y, 0, 0);
+ }
+
+ if (but == 4)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON4DOWN,
+ self->mouse_x, self->mouse_y, 0, 0);
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON4UP,
+ self->mouse_x, self->mouse_y, 0, 0);
+ }
+
+ if (but == 5)
+ {
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON5DOWN,
+ self->mouse_x, self->mouse_y, 0, 0);
+ self->mm->mod->mod_event(self->mm->mod, WM_BUTTON5UP,
+ self->mouse_x, self->mouse_y, 0, 0);
+ }
+ }
}
- if (but == 2 && down)
+ }
+
+ if (self->popup_wnd != 0)
+ {
+ if (self->popup_wnd == control && !down)
{
- self->mm->mod->mod_event(self->mm->mod, WM_RBUTTONDOWN, x, y, 0, 0);
+ xrdp_bitmap_def_proc(self->popup_wnd, WM_LBUTTONUP, x, y);
+ xrdp_wm_clear_popup(self);
+ self->button_down = 0;
+ return 0;
}
- else if (but == 2 && !down)
+ else if (self->popup_wnd != control && down)
{
- self->mm->mod->mod_event(self->mm->mod, WM_RBUTTONUP, x, y, 0, 0);
+ xrdp_wm_clear_popup(self);
+ self->button_down = 0;
+ return 0;
}
- if (but == 3 && down)
+ }
+
+ if (control != 0)
+ {
+ if (wnd != 0)
{
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON3DOWN, x, y, 0, 0);
+ if (wnd->modal_dialog != 0) /* if window has a modal dialog */
+ {
+ return 0;
+ }
+
+ if (control == wnd)
+ {
+ }
+ else if (control->tab_stop)
+ {
+ focus_out_control = wnd->focused_control;
+ wnd->focused_control = control;
+ xrdp_bitmap_invalidate(focus_out_control, 0);
+ xrdp_bitmap_invalidate(control, 0);
+ }
}
- else if (but == 3 && !down)
+
+ if ((control->type == WND_TYPE_BUTTON ||
+ control->type == WND_TYPE_COMBO) &&
+ but == 1 && !down && self->button_down == control)
{
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON3UP, x, y, 0, 0);
+ /* if clicking up on a button that was clicked down */
+ self->button_down = 0;
+ control->state = 0;
+ xrdp_bitmap_invalidate(control, 0);
+
+ if (control->parent != 0)
+ {
+ if (control->parent->notify != 0)
+ {
+ /* control can be invalid after this */
+ control->parent->notify(control->owner, control, 1, x, y);
+ }
+ }
}
- if (but == 4)
+ else if ((control->type == WND_TYPE_BUTTON ||
+ control->type == WND_TYPE_COMBO) &&
+ but == 1 && down)
{
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON4DOWN,
- self->mouse_x, self->mouse_y, 0, 0);
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON4UP,
- self->mouse_x, self->mouse_y, 0, 0);
+ /* if clicking down on a button or combo */
+ self->button_down = control;
+ control->state = 1;
+ xrdp_bitmap_invalidate(control, 0);
+
+ if (control->type == WND_TYPE_COMBO)
+ {
+ xrdp_wm_pu(self, control);
+ }
}
- if (but == 5)
+ else if (but == 1 && down)
{
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON5DOWN,
- self->mouse_x, self->mouse_y, 0, 0);
- self->mm->mod->mod_event(self->mm->mod, WM_BUTTON5UP,
- self->mouse_x, self->mouse_y, 0, 0);
+ if (self->popup_wnd == 0)
+ {
+ xrdp_wm_set_focused(self, wnd);
+
+ if (control->type == WND_TYPE_WND && y < (control->top + 21))
+ {
+ /* if dragging */
+ if (self->dragging) /* rarely happens */
+ {
+ newx = self->draggingx - self->draggingdx;
+ newy = self->draggingy - self->draggingdy;
+
+ if (self->draggingxorstate)
+ {
+ xrdp_wm_xor_pat(self, newx, newy,
+ self->draggingcx, self->draggingcy);
+ }
+
+ self->draggingxorstate = 0;
+ }
+
+ self->dragging = 1;
+ self->dragging_window = control;
+ self->draggingorgx = control->left;
+ self->draggingorgy = control->top;
+ self->draggingx = x;
+ self->draggingy = y;
+ self->draggingdx = x - control->left;
+ self->draggingdy = y - control->top;
+ self->draggingcx = control->width;
+ self->draggingcy = control->height;
+ }
+ }
}
- }
}
- }
- if (self->popup_wnd != 0)
- {
- if (self->popup_wnd == control && !down)
+ else
{
- xrdp_bitmap_def_proc(self->popup_wnd, WM_LBUTTONUP, x, y);
- xrdp_wm_clear_popup(self);
- self->button_down = 0;
- return 0;
+ xrdp_wm_set_focused(self, 0);
}
- else if (self->popup_wnd != control && down)
+
+ /* no matter what, mouse is up, reset button_down */
+ if (but == 1 && !down && self->button_down != 0)
{
- xrdp_wm_clear_popup(self);
- self->button_down = 0;
- return 0;
+ self->button_down = 0;
}
- }
- if (control != 0)
- {
- if (wnd != 0)
+
+ return 0;
+}
+
+/*****************************************************************************/
+int APP_CC
+xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code)
+{
+ int msg;
+ struct xrdp_key_info *ki;
+
+ /*g_printf("count %d\n", self->key_down_list->count);*/
+ scan_code = scan_code % 128;
+
+ if (self->popup_wnd != 0)
{
- if (wnd->modal_dialog != 0) /* if window has a modal dialog */
- {
+ xrdp_wm_clear_popup(self);
return 0;
- }
- if (control == wnd)
- {
- }
- else if (control->tab_stop)
- {
- focus_out_control = wnd->focused_control;
- wnd->focused_control = control;
- xrdp_bitmap_invalidate(focus_out_control, 0);
- xrdp_bitmap_invalidate(control, 0);
- }
- }
- if ((control->type == WND_TYPE_BUTTON ||
- control->type == WND_TYPE_COMBO) &&
- but == 1 && !down && self->button_down == control)
- { /* if clicking up on a button that was clicked down */
- self->button_down = 0;
- control->state = 0;
- xrdp_bitmap_invalidate(control, 0);
- if (control->parent != 0)
- {
- if (control->parent->notify != 0)
+ }
+
+ if (device_flags & KBD_FLAG_UP) /* 0x8000 */
+ {
+ self->keys[scan_code] = 0;
+ msg = WM_KEYUP;
+ }
+ else /* key down */
+ {
+ self->keys[scan_code] = 1 | device_flags;
+ msg = WM_KEYDOWN;
+
+ switch (scan_code)
{
- /* control can be invalid after this */
- control->parent->notify(control->owner, control, 1, x, y);
+ case 58:
+ self->caps_lock = !self->caps_lock;
+ break; /* caps lock */
+ case 69:
+ self->num_lock = !self->num_lock;
+ break; /* num lock */
+ case 70:
+ self->scroll_lock = !self->scroll_lock;
+ break; /* scroll lock */
}
- }
- }
- else if ((control->type == WND_TYPE_BUTTON ||
- control->type == WND_TYPE_COMBO) &&
- but == 1 && down)
- { /* if clicking down on a button or combo */
- self->button_down = control;
- control->state = 1;
- xrdp_bitmap_invalidate(control, 0);
- if (control->type == WND_TYPE_COMBO)
- {
- xrdp_wm_pu(self, control);
- }
- }
- else if (but == 1 && down)
- {
- if (self->popup_wnd == 0)
- {
- xrdp_wm_set_focused(self, wnd);
- if (control->type == WND_TYPE_WND && y < (control->top + 21))
- { /* if dragging */
- if (self->dragging) /* rarely happens */
- {
- newx = self->draggingx - self->draggingdx;
- newy = self->draggingy - self->draggingdy;
- if (self->draggingxorstate)
+ }
+
+ if (self->mm->mod != 0)
+ {
+ if (self->mm->mod->mod_event != 0)
+ {
+ ki = get_key_info_from_scan_code
+ (device_flags, scan_code, self->keys, self->caps_lock,
+ self->num_lock, self->scroll_lock,
+ &(self->keymap));
+
+ if (ki != 0)
{
- xrdp_wm_xor_pat(self, newx, newy,
- self->draggingcx, self->draggingcy);
+ self->mm->mod->mod_event(self->mm->mod, msg, ki->chr, ki->sym,
+ scan_code, device_flags);
}
- self->draggingxorstate = 0;
- }
- self->dragging = 1;
- self->dragging_window = control;
- self->draggingorgx = control->left;
- self->draggingorgy = control->top;
- self->draggingx = x;
- self->draggingy = y;
- self->draggingdx = x - control->left;
- self->draggingdy = y - control->top;
- self->draggingcx = control->width;
- self->draggingcy = control->height;
}
- }
- }
- }
- else
- {
- xrdp_wm_set_focused(self, 0);
- }
- /* no matter what, mouse is up, reset button_down */
- if (but == 1 && !down && self->button_down != 0)
- {
- self->button_down = 0;
- }
- return 0;
-}
+ }
+ else if (self->focused_window != 0)
+ {
+ xrdp_bitmap_def_proc(self->focused_window,
+ msg, scan_code, device_flags);
+ }
-/*****************************************************************************/
-int APP_CC
-xrdp_wm_key(struct xrdp_wm* self, int device_flags, int scan_code)
-{
- int msg;
- struct xrdp_key_info* ki;
-
- /*g_printf("count %d\n", self->key_down_list->count);*/
- scan_code = scan_code % 128;
- if (self->popup_wnd != 0)
- {
- xrdp_wm_clear_popup(self);
return 0;
- }
- if (device_flags & KBD_FLAG_UP) /* 0x8000 */
- {
- self->keys[scan_code] = 0;
- msg = WM_KEYUP;
- }
- else /* key down */
- {
- self->keys[scan_code] = 1 | device_flags;
- msg = WM_KEYDOWN;
- switch (scan_code)
- {
- case 58:
- self->caps_lock = !self->caps_lock;
- break; /* caps lock */
- case 69:
- self->num_lock = !self->num_lock;
- break; /* num lock */
- case 70:
- self->scroll_lock = !self->scroll_lock;
- break; /* scroll lock */
- }
- }
- if (self->mm->mod != 0)
- {
- if (self->mm->mod->mod_event != 0)
- {
- ki = get_key_info_from_scan_code
- (device_flags, scan_code, self->keys, self->caps_lock,
- self->num_lock, self->scroll_lock,
- &(self->keymap));
- if (ki != 0)
- {
- self->mm->mod->mod_event(self->mm->mod, msg, ki->chr, ki->sym,
- scan_code, device_flags);
- }
- }
- }
- else if (self->focused_window != 0)
- {
- xrdp_bitmap_def_proc(self->focused_window,
- msg, scan_code, device_flags);
- }
- return 0;
}
/*****************************************************************************/
/* happens when client gets focus and sends key modifier info */
int APP_CC
-xrdp_wm_key_sync(struct xrdp_wm* self, int device_flags, int key_flags)
+xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags)
{
- self->num_lock = 0;
- self->scroll_lock = 0;
- self->caps_lock = 0;
- if (key_flags & 1)
- {
- self->scroll_lock = 1;
- }
- if (key_flags & 2)
- {
- self->num_lock = 1;
- }
- if (key_flags & 4)
- {
- self->caps_lock = 1;
- }
- if (self->mm->mod != 0)
- {
- if (self->mm->mod->mod_event != 0)
- {
- self->mm->mod->mod_event(self->mm->mod, 17, key_flags, device_flags,
- key_flags, device_flags);
- }
- }
- return 0;
+ self->num_lock = 0;
+ self->scroll_lock = 0;
+ self->caps_lock = 0;
+
+ if (key_flags & 1)
+ {
+ self->scroll_lock = 1;
+ }
+
+ if (key_flags & 2)
+ {
+ self->num_lock = 1;
+ }
+
+ if (key_flags & 4)
+ {
+ self->caps_lock = 1;
+ }
+
+ if (self->mm->mod != 0)
+ {
+ if (self->mm->mod->mod_event != 0)
+ {
+ self->mm->mod->mod_event(self->mm->mod, 17, key_flags, device_flags,
+ key_flags, device_flags);
+ }
+ }
+
+ return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_pu(struct xrdp_wm* self, struct xrdp_bitmap* control)
+xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control)
{
- int x;
- int y;
+ int x;
+ int y;
- if (self == 0)
- {
- return 0;
- }
- if (control == 0)
- {
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ if (control == 0)
+ {
+ return 0;
+ }
+
+ self->popup_wnd = xrdp_bitmap_create(control->width, DEFAULT_WND_SPECIAL_H,
+ self->screen->bpp,
+ WND_TYPE_SPECIAL, self);
+ self->popup_wnd->popped_from = control;
+ self->popup_wnd->parent = self->screen;
+ self->popup_wnd->owner = self->screen;
+ x = xrdp_bitmap_to_screenx(control, 0);
+ y = xrdp_bitmap_to_screeny(control, 0);
+ self->popup_wnd->left = x;
+ self->popup_wnd->top = y + control->height;
+ self->popup_wnd->item_index = control->item_index;
+ list_insert_item(self->screen->child_list, 0, (long)self->popup_wnd);
+ xrdp_bitmap_invalidate(self->popup_wnd, 0);
return 0;
- }
- self->popup_wnd = xrdp_bitmap_create(control->width, DEFAULT_WND_SPECIAL_H,
- self->screen->bpp,
- WND_TYPE_SPECIAL, self);
- self->popup_wnd->popped_from = control;
- self->popup_wnd->parent = self->screen;
- self->popup_wnd->owner = self->screen;
- x = xrdp_bitmap_to_screenx(control, 0);
- y = xrdp_bitmap_to_screeny(control, 0);
- self->popup_wnd->left = x;
- self->popup_wnd->top = y + control->height;
- self->popup_wnd->item_index = control->item_index;
- list_insert_item(self->screen->child_list, 0, (long)self->popup_wnd);
- xrdp_bitmap_invalidate(self->popup_wnd, 0);
- return 0;
}
/*****************************************************************************/
static int APP_CC
-xrdp_wm_process_input_mouse(struct xrdp_wm* self, int device_flags,
+xrdp_wm_process_input_mouse(struct xrdp_wm *self, int device_flags,
int x, int y)
{
- DEBUG(("mouse event flags %4.4x x %d y %d", device_flags, x, y));
- if (device_flags & MOUSE_FLAG_MOVE) /* 0x0800 */
- {
- xrdp_wm_mouse_move(self, x, y);
- }
- if (device_flags & MOUSE_FLAG_BUTTON1) /* 0x1000 */
- {
- if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+ DEBUG(("mouse event flags %4.4x x %d y %d", device_flags, x, y));
+
+ if (device_flags & MOUSE_FLAG_MOVE) /* 0x0800 */
{
- xrdp_wm_mouse_click(self, x, y, 1, 1);
+ xrdp_wm_mouse_move(self, x, y);
}
- else
+
+ if (device_flags & MOUSE_FLAG_BUTTON1) /* 0x1000 */
{
- xrdp_wm_mouse_click(self, x, y, 1, 0);
+ if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+ {
+ xrdp_wm_mouse_click(self, x, y, 1, 1);
+ }
+ else
+ {
+ xrdp_wm_mouse_click(self, x, y, 1, 0);
+ }
}
- }
- if (device_flags & MOUSE_FLAG_BUTTON2) /* 0x2000 */
- {
- if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+
+ if (device_flags & MOUSE_FLAG_BUTTON2) /* 0x2000 */
{
- xrdp_wm_mouse_click(self, x, y, 2, 1);
+ if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+ {
+ xrdp_wm_mouse_click(self, x, y, 2, 1);
+ }
+ else
+ {
+ xrdp_wm_mouse_click(self, x, y, 2, 0);
+ }
}
- else
+
+ if (device_flags & MOUSE_FLAG_BUTTON3) /* 0x4000 */
{
- xrdp_wm_mouse_click(self, x, y, 2, 0);
+ if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+ {
+ xrdp_wm_mouse_click(self, x, y, 3, 1);
+ }
+ else
+ {
+ xrdp_wm_mouse_click(self, x, y, 3, 0);
+ }
}
- }
- if (device_flags & MOUSE_FLAG_BUTTON3) /* 0x4000 */
- {
- if (device_flags & MOUSE_FLAG_DOWN) /* 0x8000 */
+
+ if (device_flags == MOUSE_FLAG_BUTTON4 || /* 0x0280 */
+ device_flags == 0x0278)
{
- xrdp_wm_mouse_click(self, x, y, 3, 1);
+ xrdp_wm_mouse_click(self, 0, 0, 4, 0);
}
- else
+
+ if (device_flags == MOUSE_FLAG_BUTTON5 || /* 0x0380 */
+ device_flags == 0x0388)
{
- xrdp_wm_mouse_click(self, x, y, 3, 0);
- }
- }
- if (device_flags == MOUSE_FLAG_BUTTON4 || /* 0x0280 */
- device_flags == 0x0278)
- {
- xrdp_wm_mouse_click(self, 0, 0, 4, 0);
- }
- if (device_flags == MOUSE_FLAG_BUTTON5 || /* 0x0380 */
- device_flags == 0x0388)
- {
- xrdp_wm_mouse_click(self, 0, 0, 5, 0);
- }
- return 0;
+ xrdp_wm_mouse_click(self, 0, 0, 5, 0);
+ }
+
+ return 0;
}
/******************************************************************************/
@@ -1386,34 +1531,37 @@ xrdp_wm_process_input_mouse(struct xrdp_wm* self, int device_flags,
param3 = pointer to data
param4 = total size */
static int APP_CC
-xrdp_wm_process_channel_data(struct xrdp_wm* self,
- tbus param1, tbus param2,
- tbus param3, tbus param4)
+xrdp_wm_process_channel_data(struct xrdp_wm *self,
+ tbus param1, tbus param2,
+ tbus param3, tbus param4)
{
- int rv;
- int chanid ;
- rv = 1;
- if (self->mm->mod != 0)
- {
- chanid = LOWORD(param1);
- if(is_channel_allowed(self, chanid))
- {
- if (self->mm->usechansrv)
- {
- rv = xrdp_mm_process_channel_data(self->mm, param1, param2,
- param3, param4);
- }
- else
- {
- if (self->mm->mod->mod_event != 0)
+ int rv;
+ int chanid ;
+ rv = 1;
+
+ if (self->mm->mod != 0)
+ {
+ chanid = LOWORD(param1);
+
+ if (is_channel_allowed(self, chanid))
{
- rv = self->mm->mod->mod_event(self->mm->mod, 0x5555, param1, param2,
- param3, param4);
+ if (self->mm->usechansrv)
+ {
+ rv = xrdp_mm_process_channel_data(self->mm, param1, param2,
+ param3, param4);
+ }
+ else
+ {
+ if (self->mm->mod->mod_event != 0)
+ {
+ rv = self->mm->mod->mod_event(self->mm->mod, 0x5555, param1, param2,
+ param3, param4);
+ }
+ }
}
- }
}
- }
- return rv;
+
+ return rv;
}
/******************************************************************************/
@@ -1421,266 +1569,295 @@ xrdp_wm_process_channel_data(struct xrdp_wm* self,
int DEFAULT_CC
callback(long id, int msg, long param1, long param2, long param3, long param4)
{
- int rv;
- struct xrdp_wm* wm;
- struct xrdp_rect rect;
+ int rv;
+ struct xrdp_wm *wm;
+ struct xrdp_rect rect;
- if (id == 0) /* "id" should be "struct xrdp_process*" as long */
- {
- return 0;
- }
- wm = ((struct xrdp_process*)id)->wm;
- if (wm == 0)
- {
- return 0;
- }
- rv = 0;
- switch (msg)
- {
- case 0: /* RDP_INPUT_SYNCHRONIZE */
- rv = xrdp_wm_key_sync(wm, param3, param1);
- break;
- case 4: /* RDP_INPUT_SCANCODE */
- rv = xrdp_wm_key(wm, param3, param1);
- break;
- case 0x8001: /* RDP_INPUT_MOUSE */
- rv = xrdp_wm_process_input_mouse(wm, param3, param1, param2);
- break;
- case 0x4444: /* invalidate, this is not from RDP_DATA_PDU_INPUT */
- /* like the rest, its from RDP_PDU_DATA with code 33 */
- /* its the rdp client asking for a screen update */
- MAKERECT(rect, param1, param2, param3, param4);
- rv = xrdp_bitmap_invalidate(wm->screen, &rect);
- break;
- case 0x5555: /* called from xrdp_channel.c, channel data has come in,
+ if (id == 0) /* "id" should be "struct xrdp_process*" as long */
+ {
+ return 0;
+ }
+
+ wm = ((struct xrdp_process *)id)->wm;
+
+ if (wm == 0)
+ {
+ return 0;
+ }
+
+ rv = 0;
+
+ switch (msg)
+ {
+ case 0: /* RDP_INPUT_SYNCHRONIZE */
+ rv = xrdp_wm_key_sync(wm, param3, param1);
+ break;
+ case 4: /* RDP_INPUT_SCANCODE */
+ rv = xrdp_wm_key(wm, param3, param1);
+ break;
+ case 0x8001: /* RDP_INPUT_MOUSE */
+ rv = xrdp_wm_process_input_mouse(wm, param3, param1, param2);
+ break;
+ case 0x4444: /* invalidate, this is not from RDP_DATA_PDU_INPUT */
+ /* like the rest, its from RDP_PDU_DATA with code 33 */
+ /* its the rdp client asking for a screen update */
+ MAKERECT(rect, param1, param2, param3, param4);
+ rv = xrdp_bitmap_invalidate(wm->screen, &rect);
+ break;
+ case 0x5555: /* called from xrdp_channel.c, channel data has come in,
pass it to module if there is one */
- rv = xrdp_wm_process_channel_data(wm, param1, param2, param3, param4);
- break;
- }
- return rv;
+ rv = xrdp_wm_process_channel_data(wm, param1, param2, param3, param4);
+ break;
+ }
+
+ return rv;
}
/******************************************************************************/
/* returns error */
/* this gets called when there is nothing on any socket */
static int APP_CC
-xrdp_wm_login_mode_changed(struct xrdp_wm* self)
+xrdp_wm_login_mode_changed(struct xrdp_wm *self)
{
- if (self == 0)
- {
- return 0;
- }
- if (self->login_mode == 0)
- {
- /* this is the inital state of the login window */
- xrdp_wm_set_login_mode(self, 1); /* put the wm in login mode */
- list_clear(self->log);
- xrdp_wm_delete_all_childs(self);
- self->dragging = 0;
- xrdp_wm_init(self);
- }
- else if (self->login_mode == 2)
- {
- if (xrdp_mm_connect(self->mm) == 0)
- {
- xrdp_wm_set_login_mode(self, 3); /* put the wm in connected mode */
- xrdp_wm_delete_all_childs(self);
- self->dragging = 0;
+ if (self == 0)
+ {
+ return 0;
}
- else
+
+ if (self->login_mode == 0)
{
- /* we do nothing on connect error so far */
+ /* this is the inital state of the login window */
+ xrdp_wm_set_login_mode(self, 1); /* put the wm in login mode */
+ list_clear(self->log);
+ xrdp_wm_delete_all_childs(self);
+ self->dragging = 0;
+ xrdp_wm_init(self);
}
- }
- else if (self->login_mode == 10)
- {
- xrdp_wm_delete_all_childs(self);
- self->dragging = 0;
- xrdp_wm_set_login_mode(self, 11);
- }
- return 0;
+ else if (self->login_mode == 2)
+ {
+ if (xrdp_mm_connect(self->mm) == 0)
+ {
+ xrdp_wm_set_login_mode(self, 3); /* put the wm in connected mode */
+ xrdp_wm_delete_all_childs(self);
+ self->dragging = 0;
+ }
+ else
+ {
+ /* we do nothing on connect error so far */
+ }
+ }
+ else if (self->login_mode == 10)
+ {
+ xrdp_wm_delete_all_childs(self);
+ self->dragging = 0;
+ xrdp_wm_set_login_mode(self, 11);
+ }
+
+ return 0;
}
/*****************************************************************************/
/* this is the log windows nofity function */
static int DEFAULT_CC
-xrdp_wm_log_wnd_notify(struct xrdp_bitmap* wnd,
- struct xrdp_bitmap* sender,
+xrdp_wm_log_wnd_notify(struct xrdp_bitmap *wnd,
+ struct xrdp_bitmap *sender,
int msg, long param1, long param2)
{
- struct xrdp_painter* painter;
- struct xrdp_wm* wm;
- struct xrdp_rect rect;
- int index;
- char* text;
-
- if (wnd == 0)
- {
- return 0;
- }
- if (sender == 0)
- {
- return 0;
- }
- if (wnd->owner == 0)
- {
+ struct xrdp_painter *painter;
+ struct xrdp_wm *wm;
+ struct xrdp_rect rect;
+ int index;
+ char *text;
+
+ if (wnd == 0)
+ {
+ return 0;
+ }
+
+ if (sender == 0)
+ {
+ return 0;
+ }
+
+ if (wnd->owner == 0)
+ {
+ return 0;
+ }
+
+ wm = wnd->wm;
+
+ if (msg == 1) /* click */
+ {
+ if (sender->id == 1) /* ok button */
+ {
+ /* close the log window */
+ MAKERECT(rect, wnd->left, wnd->top, wnd->width, wnd->height);
+ xrdp_bitmap_delete(wnd);
+ xrdp_bitmap_invalidate(wm->screen, &rect);
+
+ /* if module is gone, reset the session when ok is clicked */
+ if (wm->mm->mod_handle == 0)
+ {
+ /* make sure autologin is off */
+ wm->session->client_info->rdp_autologin = 0;
+ xrdp_wm_set_login_mode(wm, 0); /* reset session */
+ }
+ }
+ }
+ else if (msg == WM_PAINT) /* 3 */
+ {
+ painter = (struct xrdp_painter *)param1;
+
+ if (painter != 0)
+ {
+ painter->fg_color = wnd->wm->black;
+
+ for (index = 0; index < wnd->wm->log->count; index++)
+ {
+ text = (char *)list_get_item(wnd->wm->log, index);
+ xrdp_painter_draw_text(painter, wnd, 10, 30 + index * 15, text);
+ }
+ }
+ }
+
return 0;
- }
- wm = wnd->wm;
- if (msg == 1) /* click */
- {
- if (sender->id == 1) /* ok button */
- {
- /* close the log window */
- MAKERECT(rect, wnd->left, wnd->top, wnd->width, wnd->height);
- xrdp_bitmap_delete(wnd);
- xrdp_bitmap_invalidate(wm->screen, &rect);
- /* if module is gone, reset the session when ok is clicked */
- if (wm->mm->mod_handle == 0)
- {
- /* make sure autologin is off */
- wm->session->client_info->rdp_autologin = 0;
- xrdp_wm_set_login_mode(wm, 0); /* reset session */
- }
- }
- }
- else if (msg == WM_PAINT) /* 3 */
- {
- painter = (struct xrdp_painter*)param1;
- if (painter != 0)
- {
- painter->fg_color = wnd->wm->black;
- for (index = 0; index < wnd->wm->log->count; index++)
- {
- text = (char*)list_get_item(wnd->wm->log, index);
- xrdp_painter_draw_text(painter, wnd, 10, 30 + index * 15, text);
- }
- }
- }
- return 0;
}
- void add_string_to_logwindow(char *msg,struct list* log)
- {
-
- char *new_part_message;
- char *current_pointer = msg ;
- int processedlen = 0;
- do{
- new_part_message = g_strndup(current_pointer,LOG_WINDOW_CHAR_PER_LINE) ;
- g_writeln(new_part_message);
- list_add_item(log, (long)new_part_message);
- processedlen = processedlen + g_strlen(new_part_message);
- current_pointer = current_pointer + g_strlen(new_part_message) ;
- }while((processedlen<g_strlen(msg)) && (processedlen<DEFAULT_STRING_LEN));
- }
+void add_string_to_logwindow(char *msg, struct list *log)
+{
+
+ char *new_part_message;
+ char *current_pointer = msg ;
+ int processedlen = 0;
+
+ do
+ {
+ new_part_message = g_strndup(current_pointer, LOG_WINDOW_CHAR_PER_LINE) ;
+ g_writeln(new_part_message);
+ list_add_item(log, (long)new_part_message);
+ processedlen = processedlen + g_strlen(new_part_message);
+ current_pointer = current_pointer + g_strlen(new_part_message) ;
+ }
+ while ((processedlen < g_strlen(msg)) && (processedlen < DEFAULT_STRING_LEN));
+}
/*****************************************************************************/
int APP_CC
-xrdp_wm_log_msg(struct xrdp_wm* self, char* msg)
+xrdp_wm_log_msg(struct xrdp_wm *self, char *msg)
{
- struct xrdp_bitmap* but;
- int w;
- int h;
- int xoffset;
- int yoffset;
-
- if (self->hide_log_window)
- {
+ struct xrdp_bitmap *but;
+ int w;
+ int h;
+ int xoffset;
+ int yoffset;
+
+ if (self->hide_log_window)
+ {
+ return 0;
+ }
+
+ add_string_to_logwindow(msg, self->log);
+
+ if (self->log_wnd == 0)
+ {
+ w = DEFAULT_WND_LOG_W;
+ h = DEFAULT_WND_LOG_H;
+ xoffset = 10;
+ yoffset = 10;
+
+ if (self->screen->width < w)
+ {
+ w = self->screen->width - 4;
+ xoffset = 2;
+ }
+
+ if (self->screen->height < h)
+ {
+ h = self->screen->height - 4;
+ yoffset = 2;
+ }
+
+ /* log window */
+ self->log_wnd = xrdp_bitmap_create(w, h, self->screen->bpp,
+ WND_TYPE_WND, self);
+ list_add_item(self->screen->child_list, (long)self->log_wnd);
+ self->log_wnd->parent = self->screen;
+ self->log_wnd->owner = self->screen;
+ self->log_wnd->bg_color = self->grey;
+ self->log_wnd->left = xoffset;
+ self->log_wnd->top = yoffset;
+ set_string(&(self->log_wnd->caption1), "Connection Log");
+ /* ok button */
+ but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
+ list_insert_item(self->log_wnd->child_list, 0, (long)but);
+ but->parent = self->log_wnd;
+ but->owner = self->log_wnd;
+ but->left = (w - DEFAULT_BUTTON_W) - xoffset;
+ but->top = (h - DEFAULT_BUTTON_H) - yoffset;
+ but->id = 1;
+ but->tab_stop = 1;
+ set_string(&but->caption1, "OK");
+ self->log_wnd->focused_control = but;
+ /* set notify function */
+ self->log_wnd->notify = xrdp_wm_log_wnd_notify;
+ }
+
+ xrdp_wm_set_focused(self, self->log_wnd);
+ xrdp_bitmap_invalidate(self->log_wnd, 0);
+ g_sleep(100);
return 0;
- }
- add_string_to_logwindow(msg,self->log);
- if (self->log_wnd == 0)
- {
- w = DEFAULT_WND_LOG_W;
- h = DEFAULT_WND_LOG_H;
- xoffset = 10;
- yoffset = 10;
- if (self->screen->width < w)
- {
- w = self->screen->width - 4;
- xoffset = 2;
- }
- if (self->screen->height < h)
- {
- h = self->screen->height - 4;
- yoffset = 2;
- }
- /* log window */
- self->log_wnd = xrdp_bitmap_create(w, h, self->screen->bpp,
- WND_TYPE_WND, self);
- list_add_item(self->screen->child_list, (long)self->log_wnd);
- self->log_wnd->parent = self->screen;
- self->log_wnd->owner = self->screen;
- self->log_wnd->bg_color = self->grey;
- self->log_wnd->left = xoffset;
- self->log_wnd->top = yoffset;
- set_string(&(self->log_wnd->caption1), "Connection Log");
- /* ok button */
- but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
- list_insert_item(self->log_wnd->child_list, 0, (long)but);
- but->parent = self->log_wnd;
- but->owner = self->log_wnd;
- but->left = (w - DEFAULT_BUTTON_W) - xoffset;
- but->top = (h - DEFAULT_BUTTON_H) - yoffset;
- but->id = 1;
- but->tab_stop = 1;
- set_string(&but->caption1, "OK");
- self->log_wnd->focused_control = but;
- /* set notify function */
- self->log_wnd->notify = xrdp_wm_log_wnd_notify;
- }
- xrdp_wm_set_focused(self, self->log_wnd);
- xrdp_bitmap_invalidate(self->log_wnd, 0);
- g_sleep(100);
- return 0;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_get_wait_objs(struct xrdp_wm* self, tbus* robjs, int* rc,
- tbus* wobjs, int* wc, int* timeout)
+xrdp_wm_get_wait_objs(struct xrdp_wm *self, tbus *robjs, int *rc,
+ tbus *wobjs, int *wc, int *timeout)
{
- int i;
+ int i;
- if (self == 0)
- {
- return 0;
- }
- i = *rc;
- robjs[i++] = self->login_mode_event;
- *rc = i;
- return xrdp_mm_get_wait_objs(self->mm, robjs, rc, wobjs, wc, timeout);
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ i = *rc;
+ robjs[i++] = self->login_mode_event;
+ *rc = i;
+ return xrdp_mm_get_wait_objs(self->mm, robjs, rc, wobjs, wc, timeout);
}
/******************************************************************************/
int APP_CC
-xrdp_wm_check_wait_objs(struct xrdp_wm* self)
+xrdp_wm_check_wait_objs(struct xrdp_wm *self)
{
- int rv;
+ int rv;
- if (self == 0)
- {
- return 0;
- }
- rv = 0;
- if (g_is_wait_obj_set(self->login_mode_event))
- {
- g_reset_wait_obj(self->login_mode_event);
- xrdp_wm_login_mode_changed(self);
- }
- if (rv == 0)
- {
- rv = xrdp_mm_check_wait_objs(self->mm);
- }
- return rv;
+ if (self == 0)
+ {
+ return 0;
+ }
+
+ rv = 0;
+
+ if (g_is_wait_obj_set(self->login_mode_event))
+ {
+ g_reset_wait_obj(self->login_mode_event);
+ xrdp_wm_login_mode_changed(self);
+ }
+
+ if (rv == 0)
+ {
+ rv = xrdp_mm_check_wait_objs(self->mm);
+ }
+
+ return rv;
}
/*****************************************************************************/
int APP_CC
-xrdp_wm_set_login_mode(struct xrdp_wm* self, int login_mode)
+xrdp_wm_set_login_mode(struct xrdp_wm *self, int login_mode)
{
- self->login_mode = login_mode;
- g_set_wait_obj(self->login_mode_event);
- return 0;
+ self->login_mode = login_mode;
+ g_set_wait_obj(self->login_mode_event);
+ return 0;
}