got enter and esc keys working on login screen

ulab-original
jsorg71 20 years ago
parent e61e379a92
commit 272eaf7003

@ -1140,9 +1140,13 @@ int xrdp_bitmap_def_proc(struct xrdp_bitmap* self, int msg,
struct xrdp_bitmap* focus_out_control; struct xrdp_bitmap* focus_out_control;
if (self == 0) if (self == 0)
{
return 0; return 0;
}
if (self->wm == 0) if (self->wm == 0)
{
return 0; return 0;
}
if (self->type == WND_TYPE_WND) if (self->type == WND_TYPE_WND)
{ {
if (msg == WM_KEYDOWN) if (msg == WM_KEYDOWN)
@ -1154,19 +1158,25 @@ int xrdp_bitmap_def_proc(struct xrdp_bitmap* self, int msg,
shift = self->wm->keys[42] || self->wm->keys[54]; shift = self->wm->keys[42] || self->wm->keys[54];
i = -1; i = -1;
if (self->child_list != 0) if (self->child_list != 0)
{
i = xrdp_list_index_of(self->child_list, (long)self->focused_control); i = xrdp_list_index_of(self->child_list, (long)self->focused_control);
}
if (shift) if (shift)
{ {
i--; i--;
if (i < 0) if (i < 0)
{
i = self->child_list->count - 1; i = self->child_list->count - 1;
} }
}
else else
{ {
i++; i++;
if (i >= self->child_list->count) if (i >= self->child_list->count)
{
i = 0; i = 0;
} }
}
n = self->child_list->count; n = self->child_list->count;
b = (struct xrdp_bitmap*)xrdp_list_get_item(self->child_list, i); b = (struct xrdp_bitmap*)xrdp_list_get_item(self->child_list, i);
while (b != self->focused_control && b != 0 && n > 0) while (b != self->focused_control && b != 0 && n > 0)
@ -1184,17 +1194,45 @@ int xrdp_bitmap_def_proc(struct xrdp_bitmap* self, int msg,
{ {
i--; i--;
if (i < 0) if (i < 0)
{
i = self->child_list->count - 1; i = self->child_list->count - 1;
} }
}
else else
{ {
i++; i++;
if (i >= self->child_list->count) if (i >= self->child_list->count)
{
i = 0; i = 0;
} }
}
b = (struct xrdp_bitmap*)xrdp_list_get_item(self->child_list, i); b = (struct xrdp_bitmap*)xrdp_list_get_item(self->child_list, i);
} }
} }
else if (scan_code == 28) /* enter */
{
if (self->default_button != 0)
{
if (self->notify != 0)
{
/* I think this should use def_proc */
self->notify(self, self->default_button, 1, 0, 0);
return 0;
}
}
}
else if (scan_code == 1) /* esc */
{
if (self->esc_button != 0)
{
if (self->notify != 0)
{
/* I think this should use def_proc */
self->notify(self, self->esc_button, 1, 0, 0);
return 0;
}
}
}
} }
if (self->focused_control != 0) if (self->focused_control != 0)
{ {

@ -124,7 +124,7 @@ int xrdp_wm_setup_mod(struct xrdp_wm* self,
/* id self->mod is null, there must be a problem */ /* id self->mod is null, there must be a problem */
if (self->mod == 0) if (self->mod == 0)
{ {
DEBUG(("problem loading lib in xrdp_wm_setup_mod")); DEBUG(("problem loading lib in xrdp_wm_setup_mod\n\r"));
return 1; return 1;
} }
return 0; return 0;
@ -196,6 +196,8 @@ int xrdp_wm_login_notify(struct xrdp_bitmap* wnd,
set_string(&but->caption1, "OK"); set_string(&but->caption1, "OK");
/* draw it */ /* draw it */
help->focused_control = but; help->focused_control = but;
help->default_button = but;
help->esc_button = but;
xrdp_bitmap_invalidate(help, 0); xrdp_bitmap_invalidate(help, 0);
xrdp_wm_set_focused(wnd->wm, help); xrdp_wm_set_focused(wnd->wm, help);
} }
@ -494,6 +496,7 @@ int xrdp_login_wnd_create(struct xrdp_wm* self)
but->id = 3; but->id = 3;
set_string(&but->caption1, "OK"); set_string(&but->caption1, "OK");
but->tab_stop = 1; but->tab_stop = 1;
self->login_window->default_button = but;
/* button */ /* button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self); but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
@ -505,6 +508,7 @@ int xrdp_login_wnd_create(struct xrdp_wm* self)
but->id = 2; but->id = 2;
set_string(&but->caption1, "Cancel"); set_string(&but->caption1, "Cancel");
but->tab_stop = 1; but->tab_stop = 1;
self->login_window->esc_button = but;
/* button */ /* button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self); but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);

@ -487,6 +487,10 @@ struct xrdp_bitmap
struct xrdp_bitmap* focused_control; struct xrdp_bitmap* focused_control;
struct xrdp_bitmap* owner; /* window that created us */ struct xrdp_bitmap* owner; /* window that created us */
struct xrdp_bitmap* parent; /* window contained in */ struct xrdp_bitmap* parent; /* window contained in */
/* for modal dialog */
struct xrdp_bitmap* default_button; /* button when enter is pressed */
struct xrdp_bitmap* esc_button; /* button when esc is pressed */
/* list of child windows */
struct xrdp_list* child_list; struct xrdp_list* child_list;
/* for edit */ /* for edit */
int edit_pos; int edit_pos;

Loading…
Cancel
Save