mirror of https://github.com/FreeRDP/FreeRDP
xfreerdp: handled RAIL window minimize events
This commit is contained in:
parent
f46d3d51c6
commit
aaa2f22b10
|
@ -418,6 +418,28 @@ boolean xf_event_ConfigureNotify(xfInfo* xfi, XEvent* event, boolean app)
|
|||
return True;
|
||||
}
|
||||
|
||||
boolean xf_event_MapNotify(xfInfo* xfi, XEvent* event, boolean app)
|
||||
{
|
||||
xfWindow* xfw;
|
||||
rdpWindow* window;
|
||||
|
||||
if (app != True)
|
||||
return True;
|
||||
|
||||
window = window_list_get_by_extra_id(xfi->rail->list, (void*) event->xany.window);
|
||||
|
||||
if (window != NULL)
|
||||
{
|
||||
xfw = (xfWindow*) window->extra;
|
||||
|
||||
/* local maximize event */
|
||||
|
||||
XFlush(xfi->display);
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
boolean xf_event_process(freerdp* instance, XEvent* event)
|
||||
{
|
||||
boolean app = False;
|
||||
|
@ -434,7 +456,7 @@ boolean xf_event_process(freerdp* instance, XEvent* event)
|
|||
app = True;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
if (event->type != MotionNotify)
|
||||
printf("X11 %s Event\n", X11_EVENT_STRINGS[event->type]);
|
||||
#endif
|
||||
|
@ -496,6 +518,7 @@ boolean xf_event_process(freerdp* instance, XEvent* event)
|
|||
break;
|
||||
|
||||
case MapNotify:
|
||||
status = xf_event_MapNotify(xfi, event, app);
|
||||
break;
|
||||
|
||||
case ReparentNotify:
|
||||
|
|
|
@ -100,6 +100,17 @@ void xf_rail_MoveWindow(rdpRail* rail, rdpWindow* window)
|
|||
window->windowWidth, window->windowHeight);
|
||||
}
|
||||
|
||||
void xf_rail_ShowWindow(rdpRail* rail, rdpWindow* window, uint8 state)
|
||||
{
|
||||
xfInfo* xfi;
|
||||
xfWindow* xfw;
|
||||
|
||||
xfi = (xfInfo*) rail->extra;
|
||||
xfw = (xfWindow*) window->extra;
|
||||
|
||||
xf_ShowWindow((xfInfo*) rail->extra, xfw, state);
|
||||
}
|
||||
|
||||
void xf_rail_SetWindowText(rdpRail* rail, rdpWindow* window)
|
||||
{
|
||||
xfInfo* xfi;
|
||||
|
@ -137,6 +148,7 @@ void xf_rail_register_callbacks(xfInfo* xfi, rdpRail* rail)
|
|||
rail->extra = (void*) xfi;
|
||||
rail->CreateWindow = xf_rail_CreateWindow;
|
||||
rail->MoveWindow = xf_rail_MoveWindow;
|
||||
rail->ShowWindow = xf_rail_ShowWindow;
|
||||
rail->SetWindowText = xf_rail_SetWindowText;
|
||||
rail->SetWindowIcon = xf_rail_SetWindowIcon;
|
||||
rail->DestroyWindow = xf_rail_DestroyWindow;
|
||||
|
|
|
@ -309,6 +309,32 @@ void xf_MoveWindow(xfInfo* xfi, xfWindow* window, int x, int y, int width, int h
|
|||
window->height = height;
|
||||
}
|
||||
|
||||
void xf_ShowWindow(xfInfo* xfi, xfWindow* window, uint8 state)
|
||||
{
|
||||
printf("xf_ShowWindow:%d\n", state);
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case WINDOW_HIDE:
|
||||
XIconifyWindow(xfi->display, window->handle, xfi->screen_number);
|
||||
break;
|
||||
|
||||
case WINDOW_SHOW_MINIMIZED:
|
||||
XIconifyWindow(xfi->display, window->handle, xfi->screen_number);
|
||||
break;
|
||||
|
||||
case WINDOW_SHOW_MAXIMIZED:
|
||||
XRaiseWindow(xfi->display, window->handle);
|
||||
break;
|
||||
|
||||
case WINDOW_SHOW:
|
||||
XRaiseWindow(xfi->display, window->handle);
|
||||
break;
|
||||
}
|
||||
|
||||
XFlush(xfi->display);
|
||||
}
|
||||
|
||||
void xf_SetWindowIcon(xfInfo* xfi, xfWindow* window, rdpIcon* icon)
|
||||
{
|
||||
Atom atom;
|
||||
|
|
|
@ -51,6 +51,7 @@ xfWindow* desktop_create(xfInfo* xfi, char* name);
|
|||
|
||||
xfWindow* xf_CreateWindow(xfInfo* xfi, int x, int y, int width, int height, char* name);
|
||||
void xf_MoveWindow(xfInfo* xfi, xfWindow* window, int x, int y, int width, int height);
|
||||
void xf_ShowWindow(xfInfo* xfi, xfWindow* window, uint8 state);
|
||||
void xf_SetWindowIcon(xfInfo* xfi, xfWindow* window, rdpIcon* icon);
|
||||
void xf_DestroyWindow(xfInfo* xfi, xfWindow* window);
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ typedef struct rdp_rail rdpRail;
|
|||
typedef void (*railCreateWindow)(rdpRail* rail, rdpWindow* window);
|
||||
typedef void (*railDestroyWindow)(rdpRail* rail, rdpWindow* window);
|
||||
typedef void (*railMoveWindow)(rdpRail* rail, rdpWindow* window);
|
||||
typedef void (*railShowWindow)(rdpRail* rail, rdpWindow* window, uint8 state);
|
||||
typedef void (*railSetWindowText)(rdpRail* rail, rdpWindow* window);
|
||||
typedef void (*railSetWindowIcon)(rdpRail* rail, rdpWindow* window, rdpIcon* icon);
|
||||
|
||||
|
@ -50,6 +51,7 @@ struct rdp_rail
|
|||
railCreateWindow CreateWindow;
|
||||
railDestroyWindow DestroyWindow;
|
||||
railMoveWindow MoveWindow;
|
||||
railShowWindow ShowWindow;
|
||||
railSetWindowText SetWindowText;
|
||||
railSetWindowIcon SetWindowIcon;
|
||||
};
|
||||
|
|
|
@ -867,6 +867,12 @@ typedef struct _SURFACE_BITS_COMMAND SURFACE_BITS_COMMAND;
|
|||
#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER 0x00000010
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND 0x00000020
|
||||
|
||||
/* Window Show States */
|
||||
#define WINDOW_HIDE 0x00
|
||||
#define WINDOW_SHOW_MINIMIZED 0x02
|
||||
#define WINDOW_SHOW_MAXIMIZED 0x03
|
||||
#define WINDOW_SHOW 0x05
|
||||
|
||||
/* Update Interface */
|
||||
|
||||
typedef struct rdp_update rdpUpdate;
|
||||
|
|
|
@ -173,7 +173,7 @@ void rail_UpdateWindow(rdpRail* rail, rdpWindow* window)
|
|||
|
||||
if (window->fieldFlags & WINDOW_ORDER_FIELD_SHOW)
|
||||
{
|
||||
|
||||
IFCALL(rail->ShowWindow, rail, window, window->showState);
|
||||
}
|
||||
|
||||
if (window->fieldFlags & WINDOW_ORDER_FIELD_TITLE)
|
||||
|
|
Loading…
Reference in New Issue