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.c170
1 files changed, 122 insertions, 48 deletions
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index 7500f38a..8c36abf2 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -284,6 +284,30 @@ xrdp_wm_set_pointer(struct xrdp_wm* self, int 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);
+ }
+}
+
+/*****************************************************************************/
int APP_CC
xrdp_wm_load_static_colors(struct xrdp_wm* self)
{
@@ -291,6 +315,97 @@ xrdp_wm_load_static_colors(struct xrdp_wm* self)
int gindex;
int rindex;
+ int fd;
+ int index;
+ char* val;
+ struct list* names;
+ struct list* values;
+ char cfg_file[256];
+
+ /* 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)
+ {
+ 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));
+ }
+ }
+ }
+ }
+ 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 */
@@ -307,49 +422,8 @@ xrdp_wm_load_static_colors(struct xrdp_wm* self)
}
}
}
- self->black = COLOR8(0, 0, 0);
- self->grey = COLOR8(0xc0, 0xc0, 0xc0);
- self->dark_grey = COLOR8(0x80, 0x80, 0x80);
- self->blue = COLOR8(0x00, 0x00, 0xff);
- self->dark_blue = COLOR8(0x00, 0x00, 0x7f);
- self->white = COLOR8(0xff, 0xff, 0xff);
- self->red = COLOR8(0xff, 0x00, 0x00);
- self->green = COLOR8(0x00, 0xff, 0x00);
xrdp_wm_send_palette(self);
}
- else if (self->screen->bpp == 15)
- {
- self->black = COLOR15(0, 0, 0);
- self->grey = COLOR15(0xc0, 0xc0, 0xc0);
- self->dark_grey = COLOR15(0x80, 0x80, 0x80);
- self->blue = COLOR15(0x00, 0x00, 0xff);
- self->dark_blue = COLOR15(0x00, 0x00, 0x7f);
- self->white = COLOR15(0xff, 0xff, 0xff);
- self->red = COLOR15(0xff, 0x00, 0x00);
- self->green = COLOR15(0x00, 0xff, 0x00);
- }
- else if (self->screen->bpp == 16)
- {
- self->black = COLOR16(0, 0, 0);
- self->grey = COLOR16(0xc0, 0xc0, 0xc0);
- self->dark_grey = COLOR16(0x80, 0x80, 0x80);
- self->blue = COLOR16(0x00, 0x00, 0xff);
- self->dark_blue = COLOR16(0x00, 0x00, 0x7f);
- self->white = COLOR16(0xff, 0xff, 0xff);
- self->red = COLOR16(0xff, 0x00, 0x00);
- self->green = COLOR16(0x00, 0xff, 0x00);
- }
- else if (self->screen->bpp == 24)
- {
- self->black = COLOR24BGR(0, 0, 0);
- self->grey = COLOR24BGR(0xc0, 0xc0, 0xc0);
- self->dark_grey = COLOR24BGR(0x80, 0x80, 0x80);
- self->blue = COLOR24BGR(0x00, 0x00, 0xff);
- self->dark_blue = COLOR24BGR(0x00, 0x00, 0x7f);
- self->white = COLOR24BGR(0xff, 0xff, 0xff);
- self->red = COLOR24BGR(0xff, 0x00, 0x00);
- self->green = COLOR24BGR(0x00, 0xff, 0x00);
- }
return 0;
}
@@ -391,7 +465,7 @@ xrdp_wm_init(struct xrdp_wm* self)
xrdp_wm_load_static_colors(self);
xrdp_wm_load_static_pointers(self);
- self->screen->bg_color = self->black;
+ self->screen->bg_color = self->background;
if (self->session->client_info->rdp_autologin)
{
g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
@@ -1200,7 +1274,7 @@ xrdp_wm_pu(struct xrdp_wm* self, struct xrdp_bitmap* control)
{
return 0;
}
- self->popup_wnd = xrdp_bitmap_create(control->width, 100,
+ 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;
@@ -1455,8 +1529,8 @@ xrdp_wm_log_msg(struct xrdp_wm* self, char* msg)
list_add_item(self->log, (long)g_strdup(msg));
if (self->log_wnd == 0)
{
- w = 400;
- h = 400;
+ w = DEFAULT_WND_LOG_W;
+ h = DEFAULT_WND_LOG_H;
xoffset = 10;
yoffset = 10;
if (self->screen->width < w)
@@ -1480,12 +1554,12 @@ xrdp_wm_log_msg(struct xrdp_wm* self, char* msg)
self->log_wnd->top = yoffset;
set_string(&(self->log_wnd->caption1), "Connection Log");
/* ok button */
- but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
+ 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 - 60) - xoffset;
- but->top = (h - 25) - yoffset;
+ 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");