Optimizations for managing new windows (do not all take effect if

2002-10-21  Havoc Pennington  <hp@redhat.com>

	Optimizations for managing new windows (do not all take effect if
	METACITY_DEBUG=1). Bug #96404

	* src/keybindings.c (meta_change_keygrab): use error trap nesting
	and conditionalize on meta_is_verbose() to avoid a ton of XSync

	* src/display.c (meta_change_button_grab): ditto

	Throughout: move to new error trap setup to save on XSync calls,
	new setup is:

	* src/errors.c (meta_error_trap_push_with_return): new function,
	an error trap that needs to care about return value and thus
	sync even if an outer trap still exists
	(meta_error_trap_pop_with_return): new function
	(meta_error_trap_pop): add "last_request_was_roundtrip"
	argument allowing us to avoid XSync() if we just did
	a GetProperty or whatever.

	* src/util.c (meta_warning): flush the warning file descriptor

	* src/Makefile.am (INCLUDES): define G_LOG_DOMAIN
This commit is contained in:
Havoc Pennington 2002-10-21 21:44:35 +00:00 committed by Havoc Pennington
parent 37a1e6f57b
commit c6b475b251
21 changed files with 391 additions and 229 deletions

View File

@ -1,3 +1,28 @@
2002-10-21 Havoc Pennington <hp@redhat.com>
Optimizations for managing new windows (do not all take effect if
METACITY_DEBUG=1). Bug #96404
* src/keybindings.c (meta_change_keygrab): use error trap nesting
and conditionalize on meta_is_verbose() to avoid a ton of XSync
* src/display.c (meta_change_button_grab): ditto
Throughout: move to new error trap setup to save on XSync calls,
new setup is:
* src/errors.c (meta_error_trap_push_with_return): new function,
an error trap that needs to care about return value and thus
sync even if an outer trap still exists
(meta_error_trap_pop_with_return): new function
(meta_error_trap_pop): add "last_request_was_roundtrip"
argument allowing us to avoid XSync() if we just did
a GetProperty or whatever.
* src/util.c (meta_warning): flush the warning file descriptor
* src/Makefile.am (INCLUDES): define G_LOG_DOMAIN
2002-10-20 Havoc Pennington <hp@pobox.com>
* src/ui.c (meta_image_window_new): put multihead stuff in

View File

@ -3,3 +3,4 @@ Focus windows on map: see http://bugzilla.gnome.org/show_bug.cgi?id=82921
Keep panel always on top: http://bugzilla.gnome.org/show_bug.cgi?id=81551
Edge flipping: http://bugzilla.gnome.org/show_bug.cgi?id=82917
Opaque resize: http://bugzilla.gnome.org/show_bug.cgi?id=92618
Super+click to resize: http://bugzilla.gnome.org/show_bug.cgi?id=79315

View File

@ -1,7 +1,7 @@
SUBDIRS=wm-tester tools themes
INCLUDES=@METACITY_CFLAGS@ -DMETACITY_LIBEXECDIR=\"$(libexecdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMETACITY_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMETACITY_PKGDATADIR=\"$(pkgdatadir)\" -DMETACITY_DATADIR=\"$(datadir)\"
INCLUDES=@METACITY_CFLAGS@ -DMETACITY_LIBEXECDIR=\"$(libexecdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMETACITY_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMETACITY_PKGDATADIR=\"$(pkgdatadir)\" -DMETACITY_DATADIR=\"$(datadir)\" -DG_LOG_DOMAIN=\"metacity\"
EGGFILES= \
eggaccelerators.c \

View File

@ -371,7 +371,7 @@ meta_window_delete (MetaWindow *window,
window->desc);
XKillClient (window->display->xdisplay, window->xwindow);
}
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
meta_display_ping_window (window->display,
window,
@ -438,7 +438,7 @@ meta_window_kill (MetaWindow *window)
window->desc);
meta_error_trap_push (window->display);
XKillClient (window->display->xdisplay, window->xwindow);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
void

View File

@ -84,7 +84,7 @@ static void update_window_grab_modifiers (MetaDisplay *display);
static void prefs_changed_callback (MetaPreference pref,
void *data);
static int
static void
set_utf8_string_hint (MetaDisplay *display,
Window xwindow,
Atom atom,
@ -95,7 +95,7 @@ set_utf8_string_hint (MetaDisplay *display,
xwindow, atom,
display->atom_utf8_string,
8, PropModeReplace, (guchar*) val, strlen (val));
return meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
}
static void
@ -258,6 +258,7 @@ meta_display_open (const char *name)
*/
display->name = g_strdup (XDisplayName (name));
display->xdisplay = xdisplay;
display->error_trap_synced_at_last_pop = TRUE;
display->error_traps = 0;
display->error_trap_handler = NULL;
display->server_grab_count = 0;
@ -497,7 +498,7 @@ meta_display_open (const char *name)
/* Force a new FocusIn (does this work?) */
XSetInputFocus (display->xdisplay, focus, ret_to, CurrentTime);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
}
meta_display_ungrab (display);
@ -667,10 +668,18 @@ meta_display_screen_for_xwindow (MetaDisplay *display,
Window xwindow)
{
XWindowAttributes attr;
int result;
meta_error_trap_push (display);
XGetWindowAttributes (display->xdisplay, xwindow, &attr);
if (meta_error_trap_pop (display) != Success)
attr.screen = NULL;
result = XGetWindowAttributes (display->xdisplay, xwindow, &attr);
meta_error_trap_pop (display, TRUE);
/* Note, XGetWindowAttributes is on all kinds of crack
* and returns 1 on success 0 on failure, rather than Success
* on success.
*/
if (result == 0 || attr.screen == NULL)
return NULL;
return meta_display_screen_for_x_screen (display, attr.screen);
@ -930,7 +939,7 @@ window_raise_with_delay_callback (void *data)
window->xwindow,
&root, &child,
&root_x, &root_y, &x, &y, &mask);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, TRUE);
if ((window->frame && POINT_IN_RECT (root_x, root_y, window->frame->rect)) ||
(window->frame == NULL && POINT_IN_RECT (root_x, root_y, window->rect)))
@ -1340,7 +1349,7 @@ event_callback (XEvent *event,
window->frame->xwindow);
meta_error_trap_push (display);
meta_window_destroy_frame (window->frame->window);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
}
else
{
@ -1452,7 +1461,7 @@ event_callback (XEvent *event,
meta_error_trap_push (display);
XConfigureWindow (display->xdisplay, event->xconfigurerequest.window,
xwcm, &xwc);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
}
else
{
@ -2043,7 +2052,7 @@ meta_spew_event (MetaDisplay *display,
meta_error_trap_push (display);
str = XGetAtomName (display->xdisplay,
event->xproperty.atom);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
if (event->xproperty.state == PropertyNewValue)
state = "PropertyNewValue";
@ -2077,7 +2086,7 @@ meta_spew_event (MetaDisplay *display,
meta_error_trap_push (display);
str = XGetAtomName (display->xdisplay,
event->xclient.message_type);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
extra = g_strdup_printf ("type: %s format: %d\n",
str ? str : "(unknown atom)",
event->xclient.format);
@ -2266,10 +2275,9 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
#define GRAB_MASK (PointerMotionMask | PointerMotionHintMask | \
ButtonPressMask | ButtonReleaseMask)
meta_error_trap_push (display);
if (change_pointer)
{
meta_error_trap_push_with_return (display);
XChangeActivePointerGrab (display->xdisplay,
GRAB_MASK,
cursor,
@ -2277,11 +2285,20 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
meta_topic (META_DEBUG_WINDOW_OPS,
"Changed pointer with XChangeActivePointerGrab()\n");
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Error trapped from XChangeActivePointerGrab()\n");
if (display->grab_have_pointer)
display->grab_have_pointer = FALSE;
}
}
else
{
g_assert (screen != NULL);
meta_error_trap_push (display);
if (XGrabPointer (display->xdisplay,
grab_xwindow,
False,
@ -2295,15 +2312,9 @@ meta_display_set_grab_op_cursor (MetaDisplay *display,
meta_topic (META_DEBUG_WINDOW_OPS,
"XGrabPointer() returned GrabSuccess\n");
}
meta_error_trap_pop (display, TRUE);
}
if (meta_error_trap_pop (display) != Success)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Error trapped from XGrabPointer()\n");
if (display->grab_have_pointer)
display->grab_have_pointer = FALSE;
}
#undef GRAB_MASK
if (cursor != None)
@ -2502,11 +2513,11 @@ meta_change_button_grab (MetaDisplay *display,
{
int ignored_mask;
meta_error_trap_push (display);
ignored_mask = 0;
while (ignored_mask < (int) display->ignored_modifier_mask)
{
int result;
if (ignored_mask & ~(display->ignored_modifier_mask))
{
/* Not a combination of ignored modifiers
@ -2516,7 +2527,9 @@ meta_change_button_grab (MetaDisplay *display,
continue;
}
meta_error_trap_push (display);
if (meta_is_debugging ())
meta_error_trap_push_with_return (display);
if (grab)
XGrabButton (display->xdisplay, button, modmask | ignored_mask,
xwindow, False,
@ -2529,14 +2542,22 @@ meta_change_button_grab (MetaDisplay *display,
XUngrabButton (display->xdisplay, button, modmask | ignored_mask,
xwindow);
result = meta_error_trap_pop (display);
if (meta_is_debugging ())
{
int result;
result = meta_error_trap_pop_with_return (display, FALSE);
if (result != Success)
meta_verbose ("Failed to grab button %d with mask 0x%x for window 0x%lx error code %d\n",
meta_verbose ("Failed to %s button %d with mask 0x%x for window 0x%lx error code %d\n",
grab ? "grab" : "ungrab",
button, modmask | ignored_mask, xwindow, result);
}
++ignored_mask;
}
meta_error_trap_pop (display, FALSE);
}
void
@ -2681,7 +2702,7 @@ meta_display_update_active_window_hint (MetaDisplay *display)
display->atom_net_active_window,
XA_WINDOW,
32, PropModeReplace, (guchar*) data, 2);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
tmp = tmp->next;
}
@ -3191,7 +3212,7 @@ convert_property (MetaDisplay *display,
conversion_targets[2] = display->atom_timestamp;
conversion_targets[3] = display->atom_version;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (target == display->atom_targets)
XChangeProperty (display->xdisplay, w, property,
XA_ATOM, 32, PropModeReplace,
@ -3206,16 +3227,17 @@ convert_property (MetaDisplay *display,
(unsigned char *)icccm_version, 2);
else
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, FALSE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
return FALSE;
/* Be sure the PropertyNotify has arrived so we
* can send SelectionNotify
*/
/* FIXME the error trap pop synced anyway, right? */
XSync (display->xdisplay, False);
return TRUE;
@ -3240,7 +3262,7 @@ process_selection_request (MetaDisplay *display,
meta_error_trap_push (display);
str = XGetAtomName (display->xdisplay,
event->xselectionrequest.selection);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
meta_verbose ("Selection request with selection %s window 0x%lx not a WM_Sn selection we recognize\n",
str ? str : "(bad atom)", event->xselectionrequest.owner);
@ -3267,13 +3289,18 @@ process_selection_request (MetaDisplay *display,
unsigned long num, rest;
unsigned char *data;
meta_error_trap_push (display);
XGetWindowProperty (display->xdisplay,
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay,
event->xselectionrequest.requestor,
event->xselectionrequest.property, 0, 256, False,
display->atom_atom_pair,
&type, &format, &num, &rest, &data);
if (meta_error_trap_pop (display) == Success)
&type, &format, &num, &rest, &data) != Success)
{
meta_error_trap_pop_with_return (display, TRUE);
return;
}
if (meta_error_trap_pop_with_return (display, TRUE) == Success)
{
/* FIXME: to be 100% correct, should deal with rest > 0,
* but since we have 4 possible targets, we will hardly ever
@ -3296,7 +3323,7 @@ process_selection_request (MetaDisplay *display,
event->xselectionrequest.property,
display->atom_atom_pair,
32, PropModeReplace, data, num);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
meta_XFree (data);
}
}
@ -3350,7 +3377,7 @@ process_selection_clear (MetaDisplay *display,
meta_error_trap_push (display);
str = XGetAtomName (display->xdisplay,
event->xselectionclear.selection);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
meta_verbose ("Selection clear with selection %s window 0x%lx not a WM_Sn selection we recognize\n",
str ? str : "(bad atom)", event->xselectionclear.window);

View File

@ -167,6 +167,7 @@ struct _MetaDisplay
guint static_gravity_works : 1;
/*< private-ish >*/
guint error_trap_synced_at_last_pop : 1;
MetaEventQueue *events;
GSList *screens;
GHashTable *window_ids;

View File

@ -26,6 +26,8 @@
#include <stdlib.h>
#include <gdk/gdk.h>
static int sync_count = 0;
static int x_error_handler (Display *display,
XErrorEvent *error);
static int x_io_error_handler (Display *display);
@ -37,13 +39,20 @@ meta_errors_init (void)
XSetIOErrorHandler (x_io_error_handler);
}
void
meta_error_trap_push (MetaDisplay *display)
static void
meta_error_trap_push_internal (MetaDisplay *display,
gboolean need_sync)
{
/* GDK resets the error handler on each push */
int (* old_error_handler) (Display *,
XErrorEvent *);
if (need_sync)
{
XSync (display->xdisplay, False);
++sync_count;
}
gdk_error_trap_push ();
/* old_error_handler will just be equal to x_error_handler
@ -60,17 +69,23 @@ meta_error_trap_push (MetaDisplay *display)
}
display->error_traps += 1;
meta_topic (META_DEBUG_ERRORS, "%d traps remain\n", display->error_traps);
}
int
meta_error_trap_pop (MetaDisplay *display)
static int
meta_error_trap_pop_internal (MetaDisplay *display,
gboolean need_sync)
{
int result;
g_assert (display->error_traps > 0);
/* just use GDK trap, but we do the sync since GDK doesn't */
if (need_sync)
{
XSync (display->xdisplay, False);
++sync_count;
}
result = gdk_error_trap_pop ();
@ -92,9 +107,75 @@ meta_error_trap_pop (MetaDisplay *display)
display->error_trap_handler = NULL;
}
meta_topic (META_DEBUG_ERRORS, "%d traps\n", display->error_traps);
return result;
}
void
meta_error_trap_push (MetaDisplay *display)
{
meta_error_trap_push_internal (display, FALSE);
}
void
meta_error_trap_pop (MetaDisplay *display,
gboolean last_request_was_roundtrip)
{
gboolean need_sync;
/* we only have to sync when popping the outermost trap */
need_sync = (display->error_traps == 1 && !last_request_was_roundtrip);
if (need_sync)
meta_topic (META_DEBUG_SYNC, "%d: Syncing on error_trap_pop, traps = %d, roundtrip = %d\n",
sync_count, display->error_traps, last_request_was_roundtrip);
display->error_trap_synced_at_last_pop = need_sync || last_request_was_roundtrip;
meta_error_trap_pop_internal (display, need_sync);
}
void
meta_error_trap_push_with_return (MetaDisplay *display)
{
gboolean need_sync;
/* We don't sync on push_with_return if there are no traps
* currently, because we assume that any errors were either covered
* by a previous pop, or were fatal.
*
* More generally, we don't sync if we were synchronized last time
* we popped. This is known to be the case if there are no traps,
* but we also keep a flag so we know whether it's the case otherwise.
*/
if (!display->error_trap_synced_at_last_pop)
need_sync = TRUE;
else
need_sync = FALSE;
if (need_sync)
meta_topic (META_DEBUG_SYNC, "%d: Syncing on error_trap_push_with_return, traps = %d\n",
sync_count, display->error_traps);
meta_error_trap_push_internal (display, FALSE);
}
int
meta_error_trap_pop_with_return (MetaDisplay *display,
gboolean last_request_was_roundtrip)
{
if (!last_request_was_roundtrip)
meta_topic (META_DEBUG_SYNC, "%d: Syncing on error_trap_pop_with_return, traps = %d, roundtrip = %d\n",
sync_count, display->error_traps, last_request_was_roundtrip);
display->error_trap_synced_at_last_pop = TRUE;
return meta_error_trap_pop_internal (display,
!last_request_was_roundtrip);
}
static int
x_error_handler (Display *xdisplay,
XErrorEvent *error)

View File

@ -27,7 +27,13 @@
void meta_errors_init (void);
void meta_error_trap_push (MetaDisplay *display);
void meta_error_trap_pop (MetaDisplay *display,
gboolean last_request_was_roundtrip);
void meta_error_trap_push_with_return (MetaDisplay *display);
/* returns X error code, or 0 for no error */
int meta_error_trap_pop (MetaDisplay *display);
int meta_error_trap_pop_with_return (MetaDisplay *display,
gboolean last_request_was_roundtrip);
#endif

View File

@ -124,7 +124,7 @@ meta_window_ensure_frame (MetaWindow *window)
window->rect.x,
window->rect.y);
/* FIXME handle this error */
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
/* stick frame to the window */
window->frame = frame;
@ -180,7 +180,7 @@ meta_window_destroy_frame (MetaWindow *window)
/* FIXME where to put it back depends on the gravity */
window->frame->rect.x,
window->frame->rect.y);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
meta_display_unregister_x_window (window->display,
frame->xwindow);

View File

@ -231,7 +231,7 @@ read_rgb_icon (MetaDisplay *display,
gulong *best_mini;
int mini_w, mini_h;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
type = None;
data = NULL;
result = XGetWindowProperty (display->xdisplay,
@ -241,7 +241,7 @@ read_rgb_icon (MetaDisplay *display,
False, XA_CARDINAL, &type, &format, &nitems,
&bytes_after, ((guchar **)&data));
err = meta_error_trap_pop (display);
err = meta_error_trap_pop_with_return (display, TRUE);
if (err != Success ||
result != Success)
@ -406,7 +406,7 @@ try_pixmap_and_mask (MetaDisplay *display,
w, h);
}
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
if (mask)
{
@ -470,7 +470,7 @@ get_kwm_win_icon (MetaDisplay *display,
*pixmap = None;
*mask = None;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
icons = NULL;
result = XGetWindowProperty (display->xdisplay, xwindow,
display->atom_kwm_win_icon,
@ -480,7 +480,7 @@ get_kwm_win_icon (MetaDisplay *display,
&type, &format, &nitems,
&bytes_after, (guchar **)&icons);
err = meta_error_trap_pop (display);
err = meta_error_trap_pop_with_return (display, TRUE);
if (err != Success ||
result != Success)
return;

View File

@ -799,7 +799,6 @@ meta_change_keygrab (MetaDisplay *display,
int keycode,
int modmask)
{
int result;
int ignored_mask;
/* Grab keycode/modmask, together with
@ -813,6 +812,9 @@ meta_change_keygrab (MetaDisplay *display,
keysym_name (keysym),
modmask, xwindow);
/* efficiency, avoid so many XSync() */
meta_error_trap_push (display);
ignored_mask = 0;
while (ignored_mask < (int) display->ignored_modifier_mask)
{
@ -825,7 +827,8 @@ meta_change_keygrab (MetaDisplay *display,
continue;
}
meta_error_trap_push (display);
if (meta_is_debugging ())
meta_error_trap_push_with_return (display);
if (grab)
XGrabKey (display->xdisplay, keycode,
modmask | ignored_mask,
@ -837,7 +840,11 @@ meta_change_keygrab (MetaDisplay *display,
modmask | ignored_mask,
xwindow);
result = meta_error_trap_pop (display);
if (meta_is_debugging ())
{
int result;
result = meta_error_trap_pop_with_return (display, FALSE);
if (grab && result != Success)
{
@ -848,9 +855,12 @@ meta_change_keygrab (MetaDisplay *display,
"Failed to grab key %s with modifiers %x\n",
keysym_name (keysym), modmask | ignored_mask);
}
}
++ignored_mask;
}
meta_error_trap_pop (display, FALSE);
}
static void
@ -894,12 +904,12 @@ ungrab_all_keys (MetaDisplay *display,
{
int result;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
XUngrabKey (display->xdisplay, AnyKey, AnyModifier,
xwindow);
result = meta_error_trap_pop (display);
result = meta_error_trap_pop_with_return (display, FALSE);
if (result != Success)
meta_topic (META_DEBUG_KEYBINDINGS,
@ -984,20 +994,27 @@ grab_keyboard (MetaDisplay *display,
/* Grab the keyboard, so we get key releases and all key
* presses
*/
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
XGrabKeyboard (display->xdisplay,
if (XGrabKeyboard (display->xdisplay,
xwindow, True,
GrabModeAsync, GrabModeAsync,
meta_display_get_current_time (display));
result = meta_error_trap_pop (display);
meta_display_get_current_time (display)) != GrabSuccess)
{
meta_error_trap_pop_with_return (display, TRUE);
meta_topic (META_DEBUG_KEYBINDINGS,
"XGrabKeyboard() returned failure\n");
}
else
{
result = meta_error_trap_pop_with_return (display, TRUE);
if (result != Success)
{
meta_topic (META_DEBUG_KEYBINDINGS,
"XGrabKeyboard() failed\n");
"XGrabKeyboard() resulted in an error\n");
return FALSE;
}
}
meta_topic (META_DEBUG_KEYBINDINGS, "Grabbed all keys\n");
@ -1017,7 +1034,7 @@ ungrab_keyboard (MetaDisplay *display)
"Ungrabbing keyboard with timestamp %lu\n",
timestamp);
XUngrabKeyboard (display->xdisplay, timestamp);
meta_error_trap_pop (display);
meta_error_trap_pop (display, FALSE);
}
gboolean

View File

@ -284,6 +284,9 @@ main (int argc, char **argv)
g_log_set_handler (NULL,
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
log_handler, NULL);
g_log_set_handler (G_LOG_DOMAIN,
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
log_handler, NULL);
g_log_set_handler ("Gtk",
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
log_handler, NULL);

View File

@ -404,11 +404,11 @@ meta_screen_new (MetaDisplay *display,
}
/* We want to find out when the current selection owner dies */
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
attrs.event_mask = StructureNotifyMask;
XChangeWindowAttributes (xdisplay,
current_wm_sn_owner, CWEventMask, &attrs);
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
current_wm_sn_owner = None; /* don't wait for it to die later on */
}
@ -477,7 +477,7 @@ meta_screen_new (MetaDisplay *display,
}
/* select our root window events */
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
/* We need to or with the existing event mask since
* gtk+ may be interested in other events.
@ -492,7 +492,7 @@ meta_screen_new (MetaDisplay *display,
KeyPressMask | KeyReleaseMask |
FocusChangeMask | StructureNotifyMask |
attr.your_event_mask);
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
{
meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"),
number, display->name);
@ -608,9 +608,9 @@ meta_screen_free (MetaScreen *screen)
meta_stack_free (screen->stack);
meta_error_trap_push (screen->display);
meta_error_trap_push_with_return (screen->display);
XSelectInput (screen->display->xdisplay, screen->xroot, 0);
if (meta_error_trap_pop (screen->display) != Success)
if (meta_error_trap_pop_with_return (screen->display, FALSE) != Success)
meta_warning (_("Could not release screen %d on display \"%s\"\n"),
screen->number, screen->display->name);
@ -638,13 +638,13 @@ meta_screen_manage_all_windows (MetaScreen *screen)
/* Must grab server to avoid obvious race condition */
meta_display_grab (screen->display);
meta_error_trap_push (screen->display);
meta_error_trap_push_with_return (screen->display);
XQueryTree (screen->display->xdisplay,
screen->xroot,
&ignored1, &ignored2, &children, &n_children);
if (meta_error_trap_pop (screen->display))
if (meta_error_trap_pop_with_return (screen->display, TRUE) != Success)
{
meta_display_ungrab (screen->display);
return;
@ -844,14 +844,14 @@ meta_screen_get_workspace_by_index (MetaScreen *screen,
return NULL;
}
static int
static void
set_number_of_spaces_hint (MetaScreen *screen,
int n_spaces)
{
unsigned long data[1];
if (screen->closing > 0)
return 0;
return;
data[0] = n_spaces;
@ -862,7 +862,7 @@ set_number_of_spaces_hint (MetaScreen *screen,
screen->display->atom_net_number_of_desktops,
XA_CARDINAL,
32, PropModeReplace, (guchar*) data, 1);
return meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
}
static void
@ -1411,7 +1411,7 @@ meta_create_offscreen_window (Display *xdisplay,
&attrs);
}
static int
static void
set_work_area_hint (MetaScreen *screen)
{
int num_workspaces;
@ -1448,7 +1448,7 @@ set_work_area_hint (MetaScreen *screen)
XA_CARDINAL, 32, PropModeReplace,
(guchar*) data, num_workspaces*4);
g_free (data);
return meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
}
static gboolean
@ -1564,7 +1564,7 @@ update_showing_desktop_hint (MetaScreen *screen)
screen->display->atom_net_showing_desktop,
XA_CARDINAL,
32, PropModeReplace, (guchar*) data, 1);
meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
}
static void

View File

@ -940,13 +940,13 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
* or restack any windows before using the XQueryTree results.
*/
meta_error_trap_push (screen->display);
meta_error_trap_push_with_return (screen->display);
XQueryTree (screen->display->xdisplay,
screen->xroot,
&ignored1, &ignored2, &children, &n_children);
if (meta_error_trap_pop (screen->display))
if (meta_error_trap_pop_with_return (screen->display, TRUE) != Success)
{
meta_topic (META_DEBUG_STACK,
"Error querying root children to raise window 0x%lx\n",
@ -991,7 +991,7 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
xwindow,
CWSibling | CWStackMode,
&changes);
meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
break;
}
@ -1007,7 +1007,7 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
meta_error_trap_push (screen->display);
XLowerWindow (screen->display->xdisplay,
xwindow);
meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
}
if (children)
@ -1176,7 +1176,7 @@ meta_stack_sync_to_server (MetaStack *stack)
}
}
meta_error_trap_pop (stack->screen->display);
meta_error_trap_pop (stack->screen->display, FALSE);
/* on error, a window was destroyed; it should eventually
* get removed from the stacking list when we unmanage it
* and we'll fix stacking at that time.

View File

@ -254,6 +254,10 @@ topic_name (MetaDebugTopic topic)
return "XINERAMA";
case META_DEBUG_KEYBINDINGS:
return "KEYBINDINGS";
case META_DEBUG_SYNC:
return "SYNC";
case META_DEBUG_ERRORS:
return "ERRORS";
}
return "Window manager";
@ -336,6 +340,8 @@ meta_warning (const char *format, ...)
utf8_fputs (_("Window manager warning: "), out);
utf8_fputs (str, out);
fflush (out);
g_free (str);
}

View File

@ -58,7 +58,9 @@ typedef enum
META_DEBUG_PLACEMENT = 1 << 9,
META_DEBUG_PING = 1 << 10,
META_DEBUG_XINERAMA = 1 << 11,
META_DEBUG_KEYBINDINGS = 1 << 12
META_DEBUG_KEYBINDINGS = 1 << 12,
META_DEBUG_SYNC = 1 << 13,
META_DEBUG_ERRORS = 1 << 14
} MetaDebugTopic;

View File

@ -2,6 +2,7 @@
/*
* Copyright (C) 2001 Havoc Pennington, Anders Carlsson
* Copyright (C) 2002 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@ -70,29 +71,29 @@ static void constrain_position (MetaWindow *window,
int *new_x,
int *new_y);
static int update_size_hints (MetaWindow *window);
static int update_title (MetaWindow *window);
static int update_protocols (MetaWindow *window);
static int update_wm_hints (MetaWindow *window);
static void update_size_hints (MetaWindow *window);
static void update_title (MetaWindow *window);
static void update_protocols (MetaWindow *window);
static void update_wm_hints (MetaWindow *window);
static void update_net_wm_state (MetaWindow *window);
static void update_mwm_hints (MetaWindow *window);
static int update_wm_class (MetaWindow *window);
static int update_transient_for (MetaWindow *window);
static void update_wm_class (MetaWindow *window);
static void update_transient_for (MetaWindow *window);
static void update_sm_hints (MetaWindow *window);
static void update_role (MetaWindow *window);
static void update_net_wm_type (MetaWindow *window);
static int update_initial_workspace (MetaWindow *window);
static int update_icon_name (MetaWindow *window);
static int update_icon (MetaWindow *window);
static void update_initial_workspace (MetaWindow *window);
static void update_icon_name (MetaWindow *window);
static void update_icon (MetaWindow *window);
static void redraw_icon (MetaWindow *window);
static void update_struts (MetaWindow *window);
static void recalc_window_type (MetaWindow *window);
static void recalc_window_features (MetaWindow *window);
static void recalc_do_not_cover_struts(MetaWindow *window);
static void invalidate_work_areas (MetaWindow *window);
static int set_wm_state (MetaWindow *window,
static void set_wm_state (MetaWindow *window,
int state);
static int set_net_wm_state (MetaWindow *window);
static void set_net_wm_state (MetaWindow *window);
static void send_configure_notify (MetaWindow *window);
static gboolean process_property_notify (MetaWindow *window,
XPropertyEvent *event);
@ -177,16 +178,20 @@ meta_window_new (MetaDisplay *display, Window xwindow,
/* Grab server */
meta_display_grab (display);
meta_error_trap_push (display); /* Push a trap over all of window
* creation, to reduce XSync() calls
*/
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
XGetWindowAttributes (display->xdisplay,
xwindow, &attrs);
if (meta_error_trap_pop (display))
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
{
meta_verbose ("Failed to get attributes for window 0x%lx\n",
xwindow);
meta_error_trap_pop (display, TRUE);
meta_display_ungrab (display);
return NULL;
}
@ -194,6 +199,7 @@ meta_window_new (MetaDisplay *display, Window xwindow,
if (attrs.override_redirect)
{
meta_verbose ("Deciding not to manage override_redirect window 0x%lx\n", xwindow);
meta_error_trap_pop (display, TRUE);
meta_display_ungrab (display);
return NULL;
}
@ -223,6 +229,7 @@ meta_window_new (MetaDisplay *display, Window xwindow,
(state == IconicState || state == NormalState)))
{
meta_verbose ("Deciding not to manage unmapped or unviewable window 0x%lx\n", xwindow);
meta_error_trap_pop (display, TRUE);
meta_display_ungrab (display);
return NULL;
}
@ -232,7 +239,7 @@ meta_window_new (MetaDisplay *display, Window xwindow,
wm_state_to_string (existing_wm_state));
}
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
XAddToSaveSet (display->xdisplay, xwindow);
@ -258,10 +265,11 @@ meta_window_new (MetaDisplay *display, Window xwindow,
&set_attrs);
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
{
meta_verbose ("Window 0x%lx disappeared just as we tried to manage it\n",
xwindow);
meta_error_trap_pop (display, FALSE);
meta_display_ungrab (display);
return NULL;
}
@ -646,6 +654,7 @@ meta_window_new (MetaDisplay *display, Window xwindow,
meta_window_queue_calc_showing (window);
meta_error_trap_pop (display, FALSE); /* pop the XSync()-reducing trap */
meta_display_ungrab (display);
return window;
@ -908,7 +917,7 @@ meta_window_free (MetaWindow *window)
window->xwindow,
window->display->atom_net_wm_state);
set_wm_state (window, WithdrawnState);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
else
{
@ -919,7 +928,7 @@ meta_window_free (MetaWindow *window)
{
meta_error_trap_push (window->display);
set_wm_state (window, NormalState);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
/* And we need to be sure the window is mapped so other WMs
@ -928,7 +937,7 @@ meta_window_free (MetaWindow *window)
meta_error_trap_push (window->display);
XMapWindow (window->display->xdisplay,
window->xwindow);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
meta_window_ungrab_keys (window);
@ -955,7 +964,7 @@ meta_window_free (MetaWindow *window)
window->xwindow,
NoEventMask);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
if (window->icon)
g_object_unref (G_OBJECT (window->icon));
@ -978,7 +987,7 @@ meta_window_free (MetaWindow *window)
g_free (window);
}
static int
static void
set_wm_state (MetaWindow *window,
int state)
{
@ -998,10 +1007,10 @@ set_wm_state (MetaWindow *window,
window->display->atom_wm_state,
window->display->atom_wm_state,
32, PropModeReplace, (guchar*) data, 2);
return meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
static int
static void
set_net_wm_state (MetaWindow *window)
{
int i;
@ -1063,7 +1072,7 @@ set_net_wm_state (MetaWindow *window)
window->display->atom_net_wm_state,
XA_ATOM,
32, PropModeReplace, (guchar*) data, i);
return meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
/* FIXME rename this, it makes it sound like map state is relevant */
@ -1441,7 +1450,7 @@ meta_window_show (MetaWindow *window)
window->unmaps_pending += 1;
meta_error_trap_push (window->display);
XUnmapWindow (window->display->xdisplay, window->xwindow);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
if (!window->iconic)
@ -1459,7 +1468,7 @@ meta_window_show (MetaWindow *window)
window->mapped = TRUE;
meta_error_trap_push (window->display);
XMapWindow (window->display->xdisplay, window->xwindow);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
did_show = TRUE;
}
@ -1545,7 +1554,7 @@ meta_window_hide (MetaWindow *window)
window->unmaps_pending += 1;
meta_error_trap_push (window->display);
XUnmapWindow (window->display->xdisplay, window->xwindow);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
did_hide = TRUE;
}
@ -2370,7 +2379,7 @@ meta_window_move_resize_internal (MetaWindow *window,
window->xwindow,
mask,
&values);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
if (!configure_frame_first && window->frame)
@ -2866,7 +2875,7 @@ meta_window_focus (MetaWindow *window,
window->display->expected_focus_window = window;
}
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
}
@ -2958,7 +2967,7 @@ meta_window_get_net_wm_desktop (MetaWindow *window)
return meta_workspace_index (window->workspaces->data);
}
int
void
meta_window_set_current_workspace_hint (MetaWindow *window)
{
/* FIXME if on more than one workspace, we claim to be "sticky",
@ -2969,7 +2978,7 @@ meta_window_set_current_workspace_hint (MetaWindow *window)
if (window->workspaces == NULL)
{
/* this happens when unmanaging windows */
return Success;
return;
}
data[0] = meta_window_get_net_wm_desktop (window);
@ -2982,7 +2991,7 @@ meta_window_set_current_workspace_hint (MetaWindow *window)
window->display->atom_net_wm_desktop,
XA_CARDINAL,
32, PropModeReplace, (guchar*) data, 1);
return meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
void
@ -3036,7 +3045,7 @@ meta_window_send_icccm_message (MetaWindow *window,
meta_error_trap_push (window->display);
XSendEvent (window->display->xdisplay,
window->xwindow, False, 0, (XEvent*) &ev);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
gboolean
@ -3308,14 +3317,14 @@ meta_window_client_message (MetaWindow *window,
char *str1;
char *str2;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
str1 = XGetAtomName (display->xdisplay, first);
if (meta_error_trap_pop (display))
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
str1 = NULL;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
str2 = XGetAtomName (display->xdisplay, second);
if (meta_error_trap_pop (display))
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
str2 = NULL;
meta_verbose ("Request to change _NET_WM_STATE action %ld atom1: %s atom2: %s\n",
@ -3528,7 +3537,7 @@ meta_window_client_message (MetaWindow *window,
&query_root_x, &query_root_y,
&x, &y,
&mask);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, TRUE);
if (mask & Button1Mask)
button = 1;
@ -3591,7 +3600,7 @@ meta_window_client_message (MetaWindow *window,
window->xwindow, window->display->atom_win_hints,
XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)data, 1);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
else
{
@ -3603,7 +3612,7 @@ meta_window_client_message (MetaWindow *window,
meta_error_trap_push (window->display);
XDeleteProperty (window->display->xdisplay,
window->xwindow, window->display->atom_win_hints);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
return TRUE;
@ -3705,7 +3714,7 @@ meta_window_notify_focus (MetaWindow *window,
meta_error_trap_push (window->display);
XInstallColormap (window->display->xdisplay,
window->colormap);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
/* move into FOCUSED_WINDOW layer */
meta_window_update_layer (window);
@ -3741,7 +3750,7 @@ meta_window_notify_focus (MetaWindow *window,
meta_error_trap_push (window->display);
XUninstallColormap (window->display->xdisplay,
window->colormap);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
/* move out of FOCUSED_WINDOW layer */
meta_window_update_layer (window);
@ -3922,7 +3931,7 @@ send_configure_notify (MetaWindow *window)
XSendEvent (window->display->xdisplay,
window->xwindow,
False, StructureNotifyMask, &event);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
#define FLAG_TOGGLED_ON(old,new,flag) \
@ -3985,7 +3994,7 @@ spew_size_hints_differences (const XSizeHints *old,
old->win_gravity, new->win_gravity);
}
static int
static void
update_size_hints (MetaWindow *window)
{
int x, y, w, h;
@ -4013,6 +4022,7 @@ update_size_hints (MetaWindow *window)
window->xwindow,
&window->size_hints,
&supplied);
meta_error_trap_pop (window->display, TRUE);
/* as far as I can tell, "supplied" is just
* to check whether we had old-style normal hints
@ -4165,17 +4175,13 @@ update_size_hints (MetaWindow *window)
recalc_window_features (window);
spew_size_hints_differences (&old_hints, &window->size_hints);
return meta_error_trap_pop (window->display);
}
static int
static void
update_title (MetaWindow *window)
{
char *str;
meta_error_trap_push (window->display);
if (window->title)
{
g_free (window->title);
@ -4222,11 +4228,9 @@ update_title (MetaWindow *window)
meta_ui_set_frame_title (window->screen->ui,
window->frame->xwindow,
window->title);
return meta_error_trap_pop (window->display);
}
static int
static void
update_protocols (MetaWindow *window)
{
Atom *protocols = NULL;
@ -4263,10 +4267,10 @@ update_protocols (MetaWindow *window)
window->desc, window->take_focus, window->delete_window,
window->net_wm_ping);
return meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, TRUE);
}
static int
static void
update_wm_hints (MetaWindow *window)
{
XWMHints *hints;
@ -4285,6 +4289,9 @@ update_wm_hints (MetaWindow *window)
hints = XGetWMHints (window->display->xdisplay,
window->xwindow);
meta_error_trap_pop (window->display, TRUE);
if (hints)
{
if (hints->flags & InputHint)
@ -4324,8 +4331,6 @@ update_wm_hints (MetaWindow *window)
/* ensure this window is listed in the group for this group leader */
meta_window_get_group (window);
}
return meta_error_trap_pop (window->display);
}
static void
@ -4530,7 +4535,7 @@ meta_window_get_icon_geometry (MetaWindow *window,
return FALSE;
}
static int
static void
update_wm_class (MetaWindow *window)
{
XClassHint ch;
@ -4543,14 +4548,14 @@ update_wm_class (MetaWindow *window)
window->res_class = NULL;
window->res_name = NULL;
meta_error_trap_push (window->display);
ch.res_name = NULL;
ch.res_class = NULL;
meta_error_trap_push (window->display);
XGetClassHint (window->display->xdisplay,
window->xwindow,
&ch);
meta_error_trap_pop (window->display, TRUE);
if (ch.res_name)
{
@ -4568,8 +4573,6 @@ update_wm_class (MetaWindow *window)
window->desc,
window->res_class ? window->res_class : "(null)",
window->res_name ? window->res_name : "(null)");
return meta_error_trap_pop (window->display);
}
static Window
@ -4683,7 +4686,7 @@ update_role (MetaWindow *window)
window->desc, window->role ? window->role : "null");
}
static int
static void
update_transient_for (MetaWindow *window)
{
Window w;
@ -4693,6 +4696,7 @@ update_transient_for (MetaWindow *window)
XGetTransientForHint (window->display->xdisplay,
window->xwindow,
&w);
meta_error_trap_pop (window->display, TRUE);
window->xtransient_for = w;
window->transient_parent_is_root_window =
@ -4709,8 +4713,6 @@ update_transient_for (MetaWindow *window)
/* update stacking constraints */
meta_stack_update_transient (window->screen->stack, window);
return meta_error_trap_pop (window->display);
}
static char*
@ -4740,7 +4742,7 @@ get_text_property (MetaDisplay *display,
meta_verbose ("XGetTextProperty() failed\n");
}
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
return retval;
}
@ -4836,7 +4838,7 @@ update_net_wm_type (MetaWindow *window)
{
meta_error_trap_push (window->display);
str = XGetAtomName (window->display->xdisplay, window->type_atom);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, TRUE);
}
meta_verbose ("Window %s type atom %s\n", window->desc,
@ -4849,7 +4851,7 @@ update_net_wm_type (MetaWindow *window)
recalc_window_type (window);
}
static int
static void
update_initial_workspace (MetaWindow *window)
{
gulong val = 0;
@ -4883,17 +4885,13 @@ update_initial_workspace (MetaWindow *window)
"Read legacy GNOME workspace prop %d for %s\n",
window->initial_workspace, window->desc);
}
return Success;
}
static int
static void
update_icon_name (MetaWindow *window)
{
char *str;
meta_error_trap_push (window->display);
if (window->icon_name)
{
g_free (window->icon_name);
@ -4929,11 +4927,9 @@ update_icon_name (MetaWindow *window)
if (window->icon_name == NULL)
window->icon_name = g_strdup ("");
return meta_error_trap_pop (window->display);
}
static int
static void
update_icon (MetaWindow *window)
{
GdkPixbuf *icon;
@ -4965,8 +4961,6 @@ update_icon (MetaWindow *window)
g_assert (window->icon);
g_assert (window->mini_icon);
return Success;
}
static void
@ -5228,15 +5222,13 @@ recalc_window_type (MetaWindow *window)
}
}
static int
static void
set_allowed_actions_hint (MetaWindow *window)
{
#define MAX_N_ACTIONS 8
unsigned long data[MAX_N_ACTIONS];
int i;
i = 0;
if (window->has_close_func)
{
@ -5284,7 +5276,7 @@ set_allowed_actions_hint (MetaWindow *window)
window->display->atom_net_wm_allowed_actions,
XA_ATOM,
32, PropModeReplace, (guchar*) data, i);
return meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
#undef MAX_N_ACTIONS
}
@ -6000,7 +5992,7 @@ window_query_root_pointer (MetaWindow *window,
&win_y_return,
&mask_return);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, TRUE);
if (x)
*x = root_x_return;
@ -6284,7 +6276,7 @@ meta_window_set_gravity (MetaWindow *window,
CWWinGravity,
&attrs);
meta_error_trap_pop (window->display);
meta_error_trap_pop (window->display, FALSE);
}
void
@ -6553,7 +6545,7 @@ warp_pointer (MetaWindow *window,
return FALSE;
}
meta_error_trap_push (window->display);
meta_error_trap_push_with_return (window->display);
XWarpPointer (window->display->xdisplay,
None,
@ -6562,7 +6554,7 @@ warp_pointer (MetaWindow *window,
*x,
*y);
if (meta_error_trap_pop (window->display))
if (meta_error_trap_pop_with_return (window->display, FALSE) != Success)
{
meta_verbose ("Failed to warp pointer for window %s\n", window->desc);
return FALSE;

View File

@ -372,7 +372,7 @@ gboolean meta_window_client_message (MetaWindow *window,
gboolean meta_window_notify_focus (MetaWindow *window,
XEvent *event);
int meta_window_set_current_workspace_hint (MetaWindow *window);
void meta_window_set_current_workspace_hint (MetaWindow *window);
unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);

View File

@ -24,7 +24,8 @@ double screen_y_fraction[3] = { 0, 0.5, 1.0 };
int screen_width;
int screen_height;
void calculate_position (int i, int *x, int *y)
static void
calculate_position (int i, int *x, int *y)
{
if (i == 9)
{

View File

@ -27,7 +27,7 @@
void meta_workspace_queue_calc_showing (MetaWorkspace *workspace);
static int set_active_space_hint (MetaScreen *screen);
static void set_active_space_hint (MetaScreen *screen);
MetaWorkspace*
meta_workspace_new (MetaScreen *screen)
@ -279,7 +279,7 @@ meta_workspace_list_windows (MetaWorkspace *workspace)
return workspace_windows;
}
static int
static void
set_active_space_hint (MetaScreen *screen)
{
unsigned long data[1];
@ -293,7 +293,7 @@ set_active_space_hint (MetaScreen *screen)
screen->display->atom_net_current_desktop,
XA_CARDINAL,
32, PropModeReplace, (guchar*) data, 1);
return meta_error_trap_pop (screen->display);
meta_error_trap_pop (screen->display, FALSE);
}
void

View File

@ -49,7 +49,7 @@ check_type_and_format (MetaDisplay *display,
type_name = XGetAtomName (display->xdisplay, type);
expected_name = XGetAtomName (display->xdisplay, expected_type);
prop_name = XGetAtomName (display->xdisplay, xatom);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
meta_warning (_("Window 0x%lx has property %s that was expected to have type %s format %d and actually has type %s format %d n_items %d\n"),
xwindow,
@ -85,18 +85,18 @@ meta_prop_get_atom_list (MetaDisplay *display,
*atoms_p = NULL;
*n_atoms_p = 0;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, XA_ATOM, &type, &format, &n_atoms,
&bytes_after, (guchar **)&atoms) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 32, XA_ATOM,
@ -128,18 +128,18 @@ meta_prop_get_cardinal_list (MetaDisplay *display,
*cardinals_p = NULL;
*n_cardinals_p = 0;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, XA_CARDINAL, &type, &format, &n_cardinals,
&bytes_after, (guchar **)&cardinals) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 32, XA_CARDINAL,
@ -174,18 +174,18 @@ meta_prop_get_motif_hints (MetaDisplay *display,
hints = NULL;
n_items = 0;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, MAX_ITEMS,
False, AnyPropertyType, &type, &format, &n_items,
&bytes_after, (guchar **)&hints) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (type == None || n_items <= 0)
@ -225,18 +225,18 @@ meta_prop_get_latin1_string (MetaDisplay *display,
*str_p = NULL;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, XA_STRING, &type, &format, &n_items,
&bytes_after, (guchar **)&str) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 8, XA_STRING,
@ -265,7 +265,7 @@ meta_prop_get_utf8_string (MetaDisplay *display,
*str_p = NULL;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, display->atom_utf8_string,
@ -273,11 +273,11 @@ meta_prop_get_utf8_string (MetaDisplay *display,
&bytes_after, (guchar **)&str) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 8,
@ -326,7 +326,7 @@ meta_prop_get_utf8_list (MetaDisplay *display,
*str_p = NULL;
*n_str_p = 0;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, display->atom_utf8_string,
@ -334,11 +334,11 @@ meta_prop_get_utf8_list (MetaDisplay *display,
&bytes_after, (guchar **)&val) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 8,
@ -377,7 +377,7 @@ meta_prop_get_utf8_list (MetaDisplay *display,
meta_error_trap_push (display);
name = XGetAtomName (display->xdisplay, xatom);
meta_error_trap_pop (display);
meta_error_trap_pop (display, TRUE);
meta_warning (_("Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"),
name, xwindow, i);
meta_XFree (name);
@ -415,18 +415,18 @@ meta_prop_get_window (MetaDisplay *display,
*window_p = None;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, XA_WINDOW, &type, &format, &n_items,
&bytes_after, (guchar **)&window) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 32, XA_WINDOW,
@ -469,18 +469,18 @@ meta_prop_get_cardinal_with_atom_type (MetaDisplay *display,
*cardinal_p = 0;
meta_error_trap_push (display);
meta_error_trap_push_with_return (display);
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
0, G_MAXLONG,
False, prop_type, &type, &format, &n_items,
&bytes_after, (guchar **)&cardinal) != Success ||
type == None)
{
meta_error_trap_pop (display);
meta_error_trap_pop_with_return (display, TRUE);
return FALSE;
}
if (meta_error_trap_pop (display) != Success)
if (meta_error_trap_pop_with_return (display, TRUE) != Success)
return FALSE;
if (!check_type_and_format (display, xwindow, xatom, 32, prop_type,