Support for hiding WM decorations
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@261 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
578665e472
commit
1ad250fcba
@ -55,6 +55,7 @@ BOOL encryption = True;
|
|||||||
BOOL desktop_save = True;
|
BOOL desktop_save = True;
|
||||||
BOOL fullscreen = False;
|
BOOL fullscreen = False;
|
||||||
BOOL grab_keyboard = True;
|
BOOL grab_keyboard = True;
|
||||||
|
BOOL hide_decorations = False;
|
||||||
|
|
||||||
/* Display usage information */
|
/* Display usage information */
|
||||||
static void
|
static void
|
||||||
@ -79,6 +80,7 @@ usage(char *program)
|
|||||||
fprintf(stderr, " -m: do not send motion events\n");
|
fprintf(stderr, " -m: do not send motion events\n");
|
||||||
fprintf(stderr, " -K: keep window manager key bindings\n");
|
fprintf(stderr, " -K: keep window manager key bindings\n");
|
||||||
fprintf(stderr, " -T: window title\n");
|
fprintf(stderr, " -T: window title\n");
|
||||||
|
fprintf(stderr, " -D: hide window manager decorations\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
@ -138,7 +140,7 @@ main(int argc, char *argv[])
|
|||||||
domain[0] = password[0] = shell[0] = directory[0] = 0;
|
domain[0] = password[0] = shell[0] = directory[0] = 0;
|
||||||
strcpy(keymapname, "en-us");
|
strcpy(keymapname, "en-us");
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "u:d:s:c:p:n:k:g:fbemKT:h?")) != -1)
|
while ((c = getopt(argc, argv, "u:d:s:c:p:n:k:g:fbemKT:Dh?")) != -1)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@ -218,6 +220,10 @@ main(int argc, char *argv[])
|
|||||||
STRNCPY(title, optarg, sizeof(title));
|
STRNCPY(title, optarg, sizeof(title));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'D':
|
||||||
|
hide_decorations = True;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
case '?':
|
case '?':
|
||||||
default:
|
default:
|
||||||
|
40
xwin.c
40
xwin.c
@ -29,6 +29,7 @@ extern int height;
|
|||||||
extern BOOL sendmotion;
|
extern BOOL sendmotion;
|
||||||
extern BOOL fullscreen;
|
extern BOOL fullscreen;
|
||||||
extern BOOL grab_keyboard;
|
extern BOOL grab_keyboard;
|
||||||
|
extern BOOL hide_decorations;
|
||||||
extern char title[];
|
extern char title[];
|
||||||
BOOL enable_compose = False;
|
BOOL enable_compose = False;
|
||||||
BOOL focused;
|
BOOL focused;
|
||||||
@ -55,6 +56,20 @@ static BOOL xserver_be;
|
|||||||
static BOOL ownbackstore;
|
static BOOL ownbackstore;
|
||||||
static Pixmap backstore;
|
static Pixmap backstore;
|
||||||
|
|
||||||
|
/* MWM decorations */
|
||||||
|
#define MWM_HINTS_DECORATIONS (1L << 1)
|
||||||
|
#define PROP_MOTIF_WM_HINTS_ELEMENTS 5
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
long inputMode;
|
||||||
|
unsigned long status;
|
||||||
|
}
|
||||||
|
PropMotifWmHints;
|
||||||
|
|
||||||
|
|
||||||
#define FILL_RECTANGLE(x,y,cx,cy)\
|
#define FILL_RECTANGLE(x,y,cx,cy)\
|
||||||
{ \
|
{ \
|
||||||
XFillRectangle(display, wnd, gc, x, y, cx, cy); \
|
XFillRectangle(display, wnd, gc, x, y, cx, cy); \
|
||||||
@ -91,6 +106,28 @@ static int rop2_map[] = {
|
|||||||
#define SET_FUNCTION(rop2) { if (rop2 != ROP2_COPY) XSetFunction(display, gc, rop2_map[rop2]); }
|
#define SET_FUNCTION(rop2) { if (rop2 != ROP2_COPY) XSetFunction(display, gc, rop2_map[rop2]); }
|
||||||
#define RESET_FUNCTION(rop2) { if (rop2 != ROP2_COPY) XSetFunction(display, gc, GXcopy); }
|
#define RESET_FUNCTION(rop2) { if (rop2 != ROP2_COPY) XSetFunction(display, gc, GXcopy); }
|
||||||
|
|
||||||
|
void
|
||||||
|
mwm_hide_decorations(void)
|
||||||
|
{
|
||||||
|
PropMotifWmHints motif_hints;
|
||||||
|
Atom hintsatom;
|
||||||
|
|
||||||
|
/* setup the property */
|
||||||
|
motif_hints.flags = MWM_HINTS_DECORATIONS;
|
||||||
|
motif_hints.decorations = 0;
|
||||||
|
|
||||||
|
/* get the atom for the property */
|
||||||
|
hintsatom = XInternAtom(display, "_MOTIF_WM_HINTS", False);
|
||||||
|
if (!hintsatom)
|
||||||
|
{
|
||||||
|
error("Failed to get atom _MOTIF_WM_HINTS\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
XChangeProperty(display, wnd, hintsatom, hintsatom, 32, PropModeReplace,
|
||||||
|
(unsigned char *) &motif_hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
translate8(uint8 * data, uint8 * out, uint8 * end)
|
translate8(uint8 * data, uint8 * out, uint8 * end)
|
||||||
{
|
{
|
||||||
@ -328,6 +365,9 @@ ui_create_window(void)
|
|||||||
|
|
||||||
XStoreName(display, wnd, title);
|
XStoreName(display, wnd, title);
|
||||||
|
|
||||||
|
if (hide_decorations)
|
||||||
|
mwm_hide_decorations();
|
||||||
|
|
||||||
classhints = XAllocClassHint();
|
classhints = XAllocClassHint();
|
||||||
if (classhints != NULL)
|
if (classhints != NULL)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user