(20/09/01) Erwann Chenede - <erwann.chenede@sun.com>

* gdkevents-x11.c : fixed gdk_net_wm_supports_for_screen to work properly on multihead
		    more fixes for move_resize* string
This commit is contained in:
Erwann Chenede
2001-09-20 12:23:38 +00:00
parent 9cde6f277f
commit a1525ddf07
4 changed files with 42 additions and 22 deletions

View File

@@ -599,7 +599,6 @@ gdk_event_translate (GdkDisplay *display,
}
if (window &&
g_object_get_data (G_OBJECT (display), "moveresize_window") &&
(xevent->xany.type == MotionNotify ||
xevent->xany.type == ButtonRelease))
{
@@ -1410,9 +1409,8 @@ gdk_event_translate (GdkDisplay *display,
{
window_private->resize_count -= 1;
if (window_private->resize_count == 0 &&
window == g_object_get_data (G_OBJECT(display), "moveresize_window"))
_gdk_moveresize_configure_done (display);
if (window_private->resize_count == 0)
_gdk_moveresize_configure_done (display, window);
}
}
break;
@@ -2038,13 +2036,17 @@ gdk_x11_get_server_time (GdkWindow *window)
return xevent.xproperty.time;
}
typedef struct
{
Atom *atoms;
gulong n_atoms;
} _NetWmSupportedAtoms;
gboolean
gdk_net_wm_supports_for_screen (GdkScreen *screen,
GdkAtom property)
{
static GdkAtom *atoms = NULL;
static gulong n_atoms = 0;
Atom type;
gint format;
gulong nitems;
@@ -2052,21 +2054,30 @@ gdk_net_wm_supports_for_screen (GdkScreen *screen,
Window *xwindow;
gulong i;
GdkScreenImplX11 *screen_impl;
GdkDisplayImplX11 *display_impl;
_NetWmSupportedAtoms *supported_atoms;
g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
screen_impl = GDK_SCREEN_IMPL_X11 (screen);
display_impl = GDK_DISPLAY_IMPL_X11 (screen_impl->display);
supported_atoms = g_object_get_data (G_OBJECT (screen),
"net_wm_supported_atom");
if (!supported_atoms)
{
supported_atoms = g_new0 (_NetWmSupportedAtoms, 1);
g_object_set_data (G_OBJECT (screen), "net_wm_supported_atom",
supported_atoms);
}
if (screen_impl->wmspec_check_window != None)
{
if (atoms == NULL)
if (supported_atoms->atoms == NULL)
return FALSE;
i = 0;
while (i < n_atoms)
while (i < supported_atoms->n_atoms)
{
if (atoms[i] == gdk_x11_get_real_atom (screen_impl->display, property))
if (supported_atoms->atoms[i] ==
gdk_x11_get_real_atom (screen_impl->display, property))
return TRUE;
++i;
@@ -2075,11 +2086,11 @@ gdk_net_wm_supports_for_screen (GdkScreen *screen,
return FALSE;
}
if (atoms)
XFree (atoms);
if (supported_atoms->atoms)
XFree (supported_atoms->atoms);
atoms = NULL;
n_atoms = 0;
supported_atoms->atoms = NULL;
supported_atoms->n_atoms = 0;
/* This function is very slow on every call if you are not running a
* spec-supporting WM. For now not optimized, because it isn't in
@@ -2115,7 +2126,8 @@ gdk_net_wm_supports_for_screen (GdkScreen *screen,
gdk_x11_get_real_atom_by_name (screen_impl->display,
"_NET_SUPPORTED"),
0, G_MAXLONG, False, XA_ATOM, &type, &format,
&n_atoms, &bytes_after, (guchar **)&atoms);
&supported_atoms->n_atoms, &bytes_after,
(guchar **)&supported_atoms->atoms);
if (type != XA_ATOM)
return FALSE;
@@ -2126,12 +2138,13 @@ gdk_net_wm_supports_for_screen (GdkScreen *screen,
/* since wmspec_check_window != None this isn't infinite. ;-) */
return gdk_net_wm_supports_for_screen (screen, property);
}
#ifndef GDK_MULTIHEAD_SAFE
gboolean
gdk_net_wm_supports (GdkAtom property)
{
return gdk_net_wm_supports_for_screen (gdk_get_default_screen (), property);
}
#endif
static struct
{

View File

@@ -102,7 +102,8 @@ void _gdk_region_get_xrectangles (GdkRegion *region,
gint *n_rects);
gboolean _gdk_moveresize_handle_event (XEvent *event);
void _gdk_moveresize_configure_done (GdkDisplay *display);
gboolean _gdk_moveresize_configure_done (GdkDisplay *display,
GdkWindow *window);
void _gdk_keymap_state_changed (GdkDisplay *display);

View File

@@ -3830,9 +3830,11 @@ _gdk_moveresize_handle_event (XEvent *event)
GdkDisplayImplX11 *display= gdk_lookup_xdisplay (event->xany.display);
_MoveResizeData *mv_resize = g_object_get_data (G_OBJECT (display), "moveresize");
if (mv_resize == NULL)
if (!g_object_get_data (G_OBJECT (display), "moveresize_window"))
return FALSE;
g_assert (mv_resize != NULL);
window_private = (GdkWindowObject *) mv_resize->_gdk_moveresize_window;
button_mask = GDK_BUTTON1_MASK << (mv_resize->moveresize_button - 1);
@@ -3878,14 +3880,18 @@ _gdk_moveresize_handle_event (XEvent *event)
return TRUE;
}
void
_gdk_moveresize_configure_done (GdkDisplay * display)
gboolean
_gdk_moveresize_configure_done (GdkDisplay * display,
GdkWindow * window)
{
XEvent *tmp_event;
_MoveResizeData *mv_resize = g_object_get_data (G_OBJECT (display), "moveresize");
g_assert (mv_resize != NULL);
if (window != g_object_get_data (G_OBJECT (display), "moveresize_window"))
return FALSE;
if (mv_resize->moveresize_pending_event)
{
tmp_event = mv_resize->moveresize_pending_event;

View File

@@ -176,11 +176,11 @@ gpointer gdk_xid_table_lookup (XID xid);
guint32 gdk_x11_get_server_time (GdkWindow *window);
/* returns TRUE if we support the given WM spec feature */
gboolean gdk_net_wm_supports (GdkAtom property);
gboolean gdk_net_wm_supports_for_screen (GdkScreen *screen,
GdkAtom property);
#ifndef GDK_MULTIHEAD_SAFE
gboolean gdk_net_wm_supports (GdkAtom property);
void gdk_x11_grab_server ();
void gdk_x11_ungrab_server ();
#endif