ewmhints.c revision 4b9d6701570cb98fd36e209314239d104ec584d3
/* -*- c-basic-offset: 8 -*-
rdesktop: A Remote Desktop Protocol client.
Support functions for Extended Window Manager Hints,
Copyright 2005 Peter Astrand <astrand@cendio.se> for Cendio AB
Copyright 2007 Pierre Ossman <ossman@cendio.se> for Cendio AB
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Oracle GPL Disclaimer: For the avoidance of doubt, except that if any license choice
* other than GPL or LGPL is available it will apply instead, Oracle elects to use only
* the General Public License version 2 (GPLv2) at this time for any software where
* a choice of GPL license versions is made available with the language indicating
* that GPLv2 or any later version may be used, or where a choice of which version
* of the GPL is applied is otherwise unspecified.
*/
#include "rdesktop.h"
#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */
/*
Get window property value (32 bit format)
Returns zero on success, -1 on error
*/
static int
{
int result;
int actual_format_return;
unsigned long bytes_after_return;
{
return (-1);
}
max_length, /* long_length */
False, /* delete */
AnyPropertyType, /* req_type */
{
return (-1);
}
{
if (!nowarn)
return (-1);
}
if (bytes_after_return)
{
return (-1);
}
if (actual_format_return != 32)
{
return (-1);
}
return (0);
}
/*
Get current desktop number
Returns -1 on error
*/
static int
get_current_desktop(void)
{
unsigned long nitems_return;
unsigned char *prop_return;
int current_desktop;
&prop_return, 0) < 0)
return (-1);
if (nitems_return != 1)
{
return (-1);
}
return current_desktop;
}
/*
Get workarea geometry
Returns zero on success, -1 on error
*/
int
{
int current_desktop;
unsigned long nitems_return;
unsigned char *prop_return;
const uint32 net_workarea_x_offset = 0;
&prop_return, 0) < 0)
return (-1);
if (nitems_return % 4)
{
return (-1);
}
if (current_desktop < 0)
return -1;
return (0);
}
void
{
/* FIXME: Use XInternAtoms */
}
/*
*/
#ifndef MAKE_PROTO
int
{
unsigned long nitems_return;
unsigned char *prop_return;
unsigned long item;
return SEAMLESSRDP_NORMAL;
{
}
if (maximized_vert && maximized_horz)
return SEAMLESSRDP_MAXIMIZED;
else if (hidden)
return SEAMLESSRDP_MINIMIZED;
else
return SEAMLESSRDP_NORMAL;
}
static int
{
int result;
unsigned long nitems;
unsigned char *props;
/* The spec states that the window manager must respect any
_NET_WM_STATE attributes on a withdrawn window. In order words, we
modify the attributes directly for withdrawn windows and ask the WM
to do it for active windows. */
{
}
if (state == WithdrawnState)
{
if (add)
{
nitems = 1;
if (atom2)
{
nitems = 2;
}
}
else
{
int i;
return 0;
for (i = 0; i < nitems; i++)
{
{
if (i != (nitems - 1))
nitems--;
i--;
}
}
}
return 0;
}
if (add)
else
if (!status)
return -1;
return 0;
}
/*
Returns -1 on failure.
*/
int
{
/*
* Deal with the max atoms
*/
if (state == SEAMLESSRDP_MAXIMIZED)
{
return -1;
}
else
{
return -1;
}
return 0;
}
int
{
unsigned long nitems_return;
unsigned char *prop_return;
int desktop;
return (-1);
if (nitems_return != 1)
{
return (-1);
}
desktop = *prop_return;
return desktop;
}
int
{
if (!status)
return -1;
return 0;
}
void
{
int len;
}
int
{
return -1;
return 0;
}
int
{
return -1;
return 0;
}
void
{
unsigned long nitems, i;
unsigned char *props;
{
for (i = 0; i < nitems;)
{
break;
}
if (i != nitems)
else
{
}
}
else
{
}
/* Convert RGBA -> ARGB */
{
icon[i + 2] =
}
if (cur_set)
if (new_set)
}
void
{
unsigned char *props;
return;
for (i = 0; i < nitems;)
{
break;
}
if (i == nitems)
goto out;
if (i != 0)
out:
}
int
{
return -1;
return 0;
}
#endif /* MAKE_PROTO */
#if 0
/* FIXME: _NET_MOVERESIZE_WINDOW is for pagers, not for
applications. We should implement _NET_WM_MOVERESIZE instead */
int
{
if (!moveresize)
{
return -1;
}
if (!status)
return -1;
return 0;
}
#endif