diff options
Diffstat (limited to 'xrdp/xrdp_wm.c')
| -rw-r--r-- | xrdp/xrdp_wm.c | 91 |
1 files changed, 61 insertions, 30 deletions
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c index ddadbe5a..548742ac 100644 --- a/xrdp/xrdp_wm.c +++ b/xrdp/xrdp_wm.c @@ -18,6 +18,8 @@ * simple window manager */ +#include <stdarg.h> +#include <stdio.h> #include "xrdp.h" #include "log.h" @@ -45,7 +47,7 @@ xrdp_wm_create(struct xrdp_process *owner, pid = g_getpid(); g_snprintf(event_name, 255, "xrdp_%8.8x_wm_login_mode_event_%8.8x", pid, owner->session_id); - log_message(LOG_LEVEL_DEBUG,event_name); + log_message(LOG_LEVEL_DEBUG, "%s", event_name); 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); @@ -60,7 +62,7 @@ xrdp_wm_create(struct xrdp_process *owner, self->current_surface_index = 0xffff; /* screen */ /* to store configuration from xrdp.ini */ - self->xrdp_config = g_malloc(sizeof(struct xrdp_config), 1); + self->xrdp_config = g_new0(struct xrdp_config, 1); return self; } @@ -546,7 +548,7 @@ xrdp_wm_init(struct xrdp_wm *self) struct list *names; struct list *values; char *q; - char *r; + const char *r; char param[256]; char section_name[256]; char cfg_file[256]; @@ -594,9 +596,9 @@ xrdp_wm_init(struct xrdp_wm *self) { /* if no domain is passed, and no autorun in xrdp.ini, use the first item in the xrdp.ini - file thats not named + file that's not named 'globals' or 'Logging' or 'channels' */ - /* TODO: change this and have a 'autologin' + /* TODO: change this and have an 'autologin' line in globals section */ file_read_sections(fd, names); for (index = 0; index < names->count; index++) @@ -677,9 +679,9 @@ xrdp_wm_init(struct xrdp_wm *self) else { /* requested module name not found in xrdp.ini */ - g_writeln(" xrdp_wm_init: file_read_section returned non-zero, requested section not found in xrdp.ini"); - xrdp_wm_log_msg(self, "ERROR: The requested xrdp module not found in xrdp.ini," - " falling back to login window"); + xrdp_wm_log_msg(self, LOG_LEVEL_ERROR, + "Section \"%s\" not configured in xrdp.ini", + section_name); } list_delete(names); @@ -810,8 +812,8 @@ xrdp_wm_xor_pat(struct xrdp_wm *self, int x, int y, int cx, int cy) 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.x_origin = 0; + self->painter->brush.x_origin = 0; self->painter->brush.style = 3; self->painter->bg_color = self->black; self->painter->fg_color = self->white; @@ -1725,8 +1727,8 @@ callback(long id, int msg, long param1, long param2, long param3, long param4) rv = xrdp_wm_process_input_mousex(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 */ + /* like the rest, it's from RDP_PDU_DATA with code 33 */ + /* it's the rdp client asking for a screen update */ MAKERECT(rect, param1, param2, param3, param4); rv = xrdp_bitmap_invalidate(wm->screen, &rect); break; @@ -1763,7 +1765,7 @@ xrdp_wm_login_mode_changed(struct xrdp_wm *self) /* this is the initial 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); + xrdp_wm_delete_all_children(self); self->dragging = 0; xrdp_wm_init(self); } @@ -1772,7 +1774,7 @@ xrdp_wm_login_mode_changed(struct xrdp_wm *self) 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); + xrdp_wm_delete_all_children(self); self->dragging = 0; } else @@ -1782,7 +1784,7 @@ xrdp_wm_login_mode_changed(struct xrdp_wm *self) } else if (self->login_mode == 10) { - xrdp_wm_delete_all_childs(self); + xrdp_wm_delete_all_children(self); self->dragging = 0; xrdp_wm_set_login_mode(self, 11); } @@ -1857,22 +1859,21 @@ xrdp_wm_log_wnd_notify(struct xrdp_bitmap *wnd, return 0; } -void add_string_to_logwindow(char *msg, struct list *log) +static void +add_string_to_logwindow(const char *msg, struct list *log) { - - char *new_part_message; - char *current_pointer = msg ; - int processedlen = 0; + const char *new_part_message; + const char *current_pointer = msg; + int len_done = 0; do { - new_part_message = g_strndup(current_pointer, LOG_WINDOW_CHAR_PER_LINE) ; - g_writeln("%s",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)); + new_part_message = g_strndup(current_pointer, LOG_WINDOW_CHAR_PER_LINE); + g_writeln("%s", new_part_message); + list_add_item(log, (tintptr) new_part_message); + len_done += g_strlen(new_part_message); + current_pointer += g_strlen(new_part_message); + } while ((len_done < g_strlen(msg)) && (len_done < DEFAULT_STRING_LEN)); } /*****************************************************************************/ @@ -1884,6 +1885,10 @@ xrdp_wm_show_log(struct xrdp_wm *self) int h; int xoffset; int yoffset; + int index; + int primary_x_offset; + int primary_y_offset; + if (self->hide_log_window) { @@ -1912,6 +1917,23 @@ xrdp_wm_show_log(struct xrdp_wm *self) yoffset = 2; } + primary_x_offset = 0; + primary_y_offset = 0; + + /* multimon scenario, draw log window on primary monitor */ + if (self->client_info->monitorCount > 1) + { + for (index = 0; index < self->client_info->monitorCount; index++) + { + if (self->client_info->minfo_wm[index].is_primary) + { + primary_x_offset = self->client_info->minfo_wm[index].left; + primary_y_offset = self->client_info->minfo_wm[index].top; + break; + } + } + } + /* log window */ self->log_wnd = xrdp_bitmap_create(w, h, self->screen->bpp, WND_TYPE_WND, self); @@ -1919,8 +1941,8 @@ xrdp_wm_show_log(struct xrdp_wm *self) 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; + self->log_wnd->left = primary_x_offset + xoffset; + self->log_wnd->top = primary_y_offset + 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); @@ -1945,8 +1967,17 @@ xrdp_wm_show_log(struct xrdp_wm *self) /*****************************************************************************/ int APP_CC -xrdp_wm_log_msg(struct xrdp_wm *self, char *msg) +xrdp_wm_log_msg(struct xrdp_wm *self, enum logLevels loglevel, + const char *fmt, ...) { + va_list ap; + char msg[256]; + + va_start(ap, fmt); + vsnprintf(msg, sizeof(msg), fmt, ap); + va_end(ap); + + log_message(loglevel, "xrdp_wm_log_msg: %s", msg); add_string_to_logwindow(msg, self->log); return 0; } |
