mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
use meta_prop_get_size_hints
2002-10-28 Havoc Pennington <hp@redhat.com> * src/window.c (update_size_hints): use meta_prop_get_size_hints * src/xprops.c: add support for getting XSizeHints
This commit is contained in:
parent
c7d9042e5d
commit
b3a1122b2a
@ -1,3 +1,9 @@
|
|||||||
|
2002-10-28 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* src/window.c (update_size_hints): use meta_prop_get_size_hints
|
||||||
|
|
||||||
|
* src/xprops.c: add support for getting XSizeHints
|
||||||
|
|
||||||
2002-10-28 Havoc Pennington <hp@pobox.com>
|
2002-10-28 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
* src/window.c, src/display.c: store the window menu on the
|
* src/window.c, src/display.c: store the window menu on the
|
||||||
|
30
src/window.c
30
src/window.c
@ -4022,6 +4022,7 @@ update_size_hints (MetaWindow *window)
|
|||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
gulong supplied;
|
gulong supplied;
|
||||||
XSizeHints old_hints;
|
XSizeHints old_hints;
|
||||||
|
XSizeHints *new_hints;
|
||||||
|
|
||||||
meta_topic (META_DEBUG_GEOMETRY, "Updating WM_NORMAL_HINTS for %s\n", window->desc);
|
meta_topic (META_DEBUG_GEOMETRY, "Updating WM_NORMAL_HINTS for %s\n", window->desc);
|
||||||
|
|
||||||
@ -4038,21 +4039,28 @@ update_size_hints (MetaWindow *window)
|
|||||||
|
|
||||||
window->size_hints.flags = 0;
|
window->size_hints.flags = 0;
|
||||||
supplied = 0;
|
supplied = 0;
|
||||||
|
new_hints = NULL;
|
||||||
|
|
||||||
meta_error_trap_push (window->display);
|
meta_prop_get_size_hints (window->display,
|
||||||
XGetWMNormalHints (window->display->xdisplay,
|
window->xwindow,
|
||||||
window->xwindow,
|
XA_WM_NORMAL_HINTS,
|
||||||
&window->size_hints,
|
&new_hints,
|
||||||
&supplied);
|
&supplied);
|
||||||
meta_error_trap_pop (window->display, TRUE);
|
|
||||||
|
|
||||||
/* as far as I can tell, "supplied" is just
|
/* as far as I can tell, "supplied" is just to check whether we had
|
||||||
* to check whether we had old-style normal hints
|
* old-style normal hints without gravity, base size as returned by
|
||||||
* without gravity, base size as returned by
|
* XGetNormalHints(), so we don't really use it as we fixup
|
||||||
* XGetNormalHints()
|
* window->size_hints to have those fields if they're missing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Put it back. */
|
if (new_hints != NULL)
|
||||||
|
{
|
||||||
|
window->size_hints = *new_hints;
|
||||||
|
XFree (new_hints);
|
||||||
|
new_hints = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Put back saved ConfigureRequest. */
|
||||||
window->size_hints.x = x;
|
window->size_hints.x = x;
|
||||||
window->size_hints.y = y;
|
window->size_hints.y = y;
|
||||||
window->size_hints.width = w;
|
window->size_hints.width = w;
|
||||||
|
143
src/xprops.c
143
src/xprops.c
@ -3,6 +3,11 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2001 Havoc Pennington
|
* Copyright (C) 2001 Havoc Pennington
|
||||||
* Copyright (C) 2002 Red Hat Inc.
|
* Copyright (C) 2002 Red Hat Inc.
|
||||||
|
*
|
||||||
|
* Some trivial property-unpacking code from Xlib:
|
||||||
|
* Copyright 1987, 1988, 1998 The Open Group
|
||||||
|
* Copyright 1988 by Wyse Technology, Inc., San Jose, Ca,
|
||||||
|
* Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
@ -20,6 +25,59 @@
|
|||||||
* 02111-1307, USA.
|
* 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/***********************************************************
|
||||||
|
Copyright 1988 by Wyse Technology, Inc., San Jose, Ca,
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||||
|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||||
|
EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||||
|
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
|
||||||
|
USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright 1987, 1988, 1998 The Open Group
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
the above copyright notice appear in all copies and that both that
|
||||||
|
copyright notice and this permission notice appear in supporting
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of The Open Group shall
|
||||||
|
not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
other dealings in this Software without prior written authorization
|
||||||
|
from The Open Group.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include "xprops.h"
|
#include "xprops.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
@ -703,6 +761,82 @@ meta_prop_get_class_hint (MetaDisplay *display,
|
|||||||
return class_hint_from_results (&results, class_hint);
|
return class_hint_from_results (&results, class_hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
size_hints_from_results (GetPropertyResults *results,
|
||||||
|
XSizeHints **hints_p,
|
||||||
|
gulong *flags_p)
|
||||||
|
{
|
||||||
|
xPropSizeHints *raw;
|
||||||
|
XSizeHints *hints;
|
||||||
|
|
||||||
|
*hints_p = NULL;
|
||||||
|
*flags_p = 0;
|
||||||
|
|
||||||
|
if (!validate_or_free_results (results, 32, XA_WM_SIZE_HINTS, FALSE))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (results->n_items < OldNumPropSizeElements)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
raw = (xPropSizeHints*) results->prop;
|
||||||
|
|
||||||
|
hints = ag_Xmalloc (sizeof (XSizeHints));
|
||||||
|
|
||||||
|
/* XSizeHints misdeclares these as int instead of long */
|
||||||
|
hints->flags = raw->flags;
|
||||||
|
hints->x = cvtINT32toInt (raw->x);
|
||||||
|
hints->y = cvtINT32toInt (raw->y);
|
||||||
|
hints->width = cvtINT32toInt (raw->width);
|
||||||
|
hints->height = cvtINT32toInt (raw->height);
|
||||||
|
hints->min_width = cvtINT32toInt (raw->minWidth);
|
||||||
|
hints->min_height = cvtINT32toInt (raw->minHeight);
|
||||||
|
hints->max_width = cvtINT32toInt (raw->maxWidth);
|
||||||
|
hints->max_height = cvtINT32toInt (raw->maxHeight);
|
||||||
|
hints->width_inc = cvtINT32toInt (raw->widthInc);
|
||||||
|
hints->height_inc = cvtINT32toInt (raw->heightInc);
|
||||||
|
hints->min_aspect.x = cvtINT32toInt (raw->minAspectX);
|
||||||
|
hints->min_aspect.y = cvtINT32toInt (raw->minAspectY);
|
||||||
|
hints->max_aspect.x = cvtINT32toInt (raw->maxAspectX);
|
||||||
|
hints->max_aspect.y = cvtINT32toInt (raw->maxAspectY);
|
||||||
|
|
||||||
|
*flags_p = (USPosition | USSize | PAllHints);
|
||||||
|
if (results->n_items >= NumPropSizeElements)
|
||||||
|
{
|
||||||
|
hints->base_width= cvtINT32toInt (raw->baseWidth);
|
||||||
|
hints->base_height= cvtINT32toInt (raw->baseHeight);
|
||||||
|
hints->win_gravity= cvtINT32toInt (raw->winGravity);
|
||||||
|
*flags_p |= (PBaseSize | PWinGravity);
|
||||||
|
}
|
||||||
|
|
||||||
|
hints->flags &= (*flags_p); /* get rid of unwanted bits */
|
||||||
|
|
||||||
|
XFree (results->prop);
|
||||||
|
results->prop = NULL;
|
||||||
|
|
||||||
|
*hints_p = hints;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_prop_get_size_hints (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
XSizeHints **hints_p,
|
||||||
|
gulong *flags_p)
|
||||||
|
{
|
||||||
|
GetPropertyResults results;
|
||||||
|
|
||||||
|
*hints_p = NULL;
|
||||||
|
*flags_p = 0;
|
||||||
|
|
||||||
|
if (!get_property (display, xwindow, xatom, XA_WM_SIZE_HINTS,
|
||||||
|
&results))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return size_hints_from_results (&results, hints_p, flags_p);
|
||||||
|
}
|
||||||
|
|
||||||
static AgGetPropertyTask*
|
static AgGetPropertyTask*
|
||||||
get_task (MetaDisplay *display,
|
get_task (MetaDisplay *display,
|
||||||
Window xwindow,
|
Window xwindow,
|
||||||
@ -772,6 +906,9 @@ meta_prop_get_values (MetaDisplay *display,
|
|||||||
case META_PROP_VALUE_CLASS_HINT:
|
case META_PROP_VALUE_CLASS_HINT:
|
||||||
values[i].required_type = XA_STRING;
|
values[i].required_type = XA_STRING;
|
||||||
break;
|
break;
|
||||||
|
case META_PROP_VALUE_SIZE_HINTS:
|
||||||
|
values[i].required_type = XA_WM_SIZE_HINTS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -890,6 +1027,12 @@ meta_prop_get_values (MetaDisplay *display,
|
|||||||
if (!class_hint_from_results (&results, &values[i].v.class_hint))
|
if (!class_hint_from_results (&results, &values[i].v.class_hint))
|
||||||
values[i].type = META_PROP_VALUE_INVALID;
|
values[i].type = META_PROP_VALUE_INVALID;
|
||||||
break;
|
break;
|
||||||
|
case META_PROP_VALUE_SIZE_HINTS:
|
||||||
|
if (!size_hints_from_results (&results,
|
||||||
|
&values[i].v.size_hints.hints,
|
||||||
|
&values[i].v.size_hints.flags))
|
||||||
|
values[i].type = META_PROP_VALUE_INVALID;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
next:
|
next:
|
||||||
|
15
src/xprops.h
15
src/xprops.h
@ -122,6 +122,12 @@ gboolean meta_prop_get_class_hint (MetaDisplay *display,
|
|||||||
Atom xatom,
|
Atom xatom,
|
||||||
XClassHint *class_hint);
|
XClassHint *class_hint);
|
||||||
|
|
||||||
|
gboolean meta_prop_get_size_hints (MetaDisplay *display,
|
||||||
|
Window xwindow,
|
||||||
|
Atom xatom,
|
||||||
|
XSizeHints **hints_p,
|
||||||
|
gulong *flags_p);
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
META_PROP_VALUE_INVALID,
|
META_PROP_VALUE_INVALID,
|
||||||
@ -135,7 +141,8 @@ typedef enum
|
|||||||
META_PROP_VALUE_ATOM_LIST,
|
META_PROP_VALUE_ATOM_LIST,
|
||||||
META_PROP_VALUE_TEXT_PROPERTY, /* comes back as UTF-8 string */
|
META_PROP_VALUE_TEXT_PROPERTY, /* comes back as UTF-8 string */
|
||||||
META_PROP_VALUE_WM_HINTS,
|
META_PROP_VALUE_WM_HINTS,
|
||||||
META_PROP_VALUE_CLASS_HINT
|
META_PROP_VALUE_CLASS_HINT,
|
||||||
|
META_PROP_VALUE_SIZE_HINTS
|
||||||
} MetaPropValueType;
|
} MetaPropValueType;
|
||||||
|
|
||||||
/* used to request/return/store property values */
|
/* used to request/return/store property values */
|
||||||
@ -154,6 +161,12 @@ typedef struct
|
|||||||
XWMHints *wm_hints;
|
XWMHints *wm_hints;
|
||||||
XClassHint class_hint;
|
XClassHint class_hint;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
XSizeHints *hints;
|
||||||
|
unsigned long flags;
|
||||||
|
} size_hints;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
gulong *cardinals;
|
gulong *cardinals;
|
||||||
|
Loading…
Reference in New Issue
Block a user