summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xrdp/xrdp_login_wnd.c27
-rw-r--r--xrdp/xrdp_wm.c22
2 files changed, 44 insertions, 5 deletions
diff --git a/xrdp/xrdp_login_wnd.c b/xrdp/xrdp_login_wnd.c
index c0bd0c6f..70c17066 100644
--- a/xrdp/xrdp_login_wnd.c
+++ b/xrdp/xrdp_login_wnd.c
@@ -618,9 +618,15 @@ xrdp_login_wnd_create(struct xrdp_wm *self)
int log_width;
int log_height;
int regular;
+ int i = 0;
+ int primaryxoffset = 0;
+ int primaryyoffset = 0;
globals = &self->xrdp_config->cfg_globals;
+ primaryxoffset = self->screen->width / 2;
+ primaryyoffset = self->screen->height / 2;
+
log_width = globals->ls_width;
log_height = globals->ls_height;
regular = 1;
@@ -639,6 +645,20 @@ xrdp_login_wnd_create(struct xrdp_wm *self)
regular = 0;
}
+ /* multimon scenario, draw login window on primary monitor */
+ if (self->client_info->monitorCount > 1)
+ {
+ for (i = 0; i < self->client_info->monitorCount; ++i)
+ {
+ if (self->client_info->minfo[i].is_primary)
+ {
+ primaryxoffset = self->screen->width - (self->client_info->minfo[i].right / 2) - 1;
+ primaryyoffset = self->screen->height - (self->client_info->minfo[i].bottom / 2) - 1;
+ break;
+ }
+ }
+ }
+
/* draw login window */
self->login_window = xrdp_bitmap_create(log_width, log_height, self->screen->bpp,
WND_TYPE_WND, self);
@@ -647,12 +667,13 @@ xrdp_login_wnd_create(struct xrdp_wm *self)
self->login_window->owner = self->screen;
self->login_window->bg_color = globals->ls_bg_color;
- self->login_window->left = self->screen->width / 2 -
- self->login_window->width / 2;
+ self->login_window->left = primaryxoffset -
+ self->login_window->width / 2;
- self->login_window->top = self->screen->height / 2 -
+ self->login_window->top = primaryyoffset -
self->login_window->height / 2;
+
self->login_window->notify = xrdp_wm_login_notify;
/* if window title not specified, use hostname as default */
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index 4e545b26..9f85d0db 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -1884,6 +1884,10 @@ xrdp_wm_show_log(struct xrdp_wm *self)
int h;
int xoffset;
int yoffset;
+ int i;
+ int primaryxoffset = 0;
+ int primaryyoffset = 0;
+
if (self->hide_log_window)
{
@@ -1912,6 +1916,20 @@ xrdp_wm_show_log(struct xrdp_wm *self)
yoffset = 2;
}
+ /* multimon scenario, draw log window on primary monitor */
+ if (self->client_info->monitorCount > 1)
+ {
+ for (i = 0; i < self->client_info->monitorCount; ++i)
+ {
+ if (self->client_info->minfo[i].is_primary)
+ {
+ primaryxoffset = self->screen->width - self->client_info->minfo[i].right - 1;
+ primaryyoffset = self->screen->height - self->client_info->minfo[i].bottom - 1;
+ break;
+ }
+ }
+ }
+
/* log window */
self->log_wnd = xrdp_bitmap_create(w, h, self->screen->bpp,
WND_TYPE_WND, self);
@@ -1919,8 +1937,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 = primaryxoffset + xoffset;
+ self->log_wnd->top = primaryyoffset + 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);