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.c91
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;
}