diff --git a/src/backends/x11/meta-clutter-backend-x11.c b/src/backends/x11/meta-clutter-backend-x11.c index ceb3dff2b..f60cb95f3 100644 --- a/src/backends/x11/meta-clutter-backend-x11.c +++ b/src/backends/x11/meta-clutter-backend-x11.c @@ -68,10 +68,6 @@ static const gchar *atom_names[] = { /* various flags corresponding to pre init setup calls */ static gboolean clutter_enable_stereo = FALSE; -/* X error trap */ -static int TrappedErrorCode = 0; -static int (* old_error_handler) (Display *, XErrorEvent *); - static gboolean meta_clutter_backend_x11_finish_init (ClutterBackend *clutter_backend, GError **error) @@ -259,29 +255,6 @@ meta_clutter_backend_x11_new (MetaBackend *backend) return clutter_backend_x11; } -static int -error_handler (Display *xdisplay, - XErrorEvent *error) -{ - TrappedErrorCode = error->error_code; - return 0; -} - -void -meta_clutter_x11_trap_x_errors (void) -{ - TrappedErrorCode = 0; - old_error_handler = XSetErrorHandler (error_handler); -} - -gint -meta_clutter_x11_untrap_x_errors (void) -{ - XSetErrorHandler (old_error_handler); - - return TrappedErrorCode; -} - void meta_clutter_x11_set_use_stereo_stage (gboolean use_stereo) { diff --git a/src/backends/x11/meta-clutter-backend-x11.h b/src/backends/x11/meta-clutter-backend-x11.h index ed0e8c0b9..95e4e0801 100644 --- a/src/backends/x11/meta-clutter-backend-x11.h +++ b/src/backends/x11/meta-clutter-backend-x11.h @@ -58,8 +58,5 @@ G_DECLARE_FINAL_TYPE (MetaClutterBackendX11, meta_clutter_backend_x11, MetaClutterBackendX11 * meta_clutter_backend_x11_new (MetaBackend *backend); -void meta_clutter_x11_trap_x_errors (void); -gint meta_clutter_x11_untrap_x_errors (void); - void meta_clutter_x11_set_use_stereo_stage (gboolean use_stereo); gboolean meta_clutter_x11_get_use_stereo_stage (void); diff --git a/src/backends/x11/meta-input-device-x11.c b/src/backends/x11/meta-input-device-x11.c index eb1a838fb..81cda767f 100644 --- a/src/backends/x11/meta-input-device-x11.c +++ b/src/backends/x11/meta-input-device-x11.c @@ -26,6 +26,7 @@ #include "backends/x11/meta-clutter-backend-x11.h" #include "backends/x11/meta-input-device-x11.h" #include "backends/x11/meta-seat-x11.h" +#include "mtk/mtk-x11.h" struct _MetaInputDeviceX11 { @@ -291,12 +292,12 @@ meta_input_device_x11_get_dimensions (ClutterInputDevice *device, static gboolean atoms_initialized = FALSE; static Atom abs_axis_atoms[4] = { 0, }; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); info = XIQueryDevice (xdisplay, device_x11->device_id, &n_info); *width = *height = w = h = 0; - if (meta_clutter_x11_untrap_x_errors ()) + if (mtk_x11_error_trap_pop_with_return (xdisplay)) return FALSE; if (!info) @@ -402,6 +403,7 @@ meta_input_device_x11_query_pointer_location (MetaInputDeviceX11 *device_xi2) MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat); MetaBackendX11 *backend_x11 = META_BACKEND_X11 (meta_seat_x11_get_backend (seat_x11)); + Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11); Window xroot_window, xchild_window; double xroot_x, xroot_y, xwin_x, xwin_y; XIButtonState button_state = { 0 }; @@ -409,7 +411,7 @@ meta_input_device_x11_query_pointer_location (MetaInputDeviceX11 *device_xi2) XIGroupState group_state; int result; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); result = XIQueryPointer (meta_backend_x11_get_xdisplay (backend_x11), device_xi2->device_id, meta_backend_x11_get_root_xwindow (backend_x11), @@ -420,7 +422,7 @@ meta_input_device_x11_query_pointer_location (MetaInputDeviceX11 *device_xi2) &button_state, &mod_state, &group_state); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_free (button_state.mask); diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c index 451a20d3e..0a2bbb23e 100644 --- a/src/backends/x11/meta-input-settings-x11.c +++ b/src/backends/x11/meta-input-settings-x11.c @@ -31,7 +31,7 @@ #include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-input-device-x11.h" #include "core/display-private.h" -#include "meta/meta-x11-errors.h" +#include "mtk/mtk-x11.h" typedef struct { @@ -64,9 +64,9 @@ device_handle_free (gpointer user_data) MetaBackend *backend = get_backend (settings); Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend)); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XCloseDevice (xdisplay, handle->xdev); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_free (handle); } @@ -85,9 +85,9 @@ device_ensure_xdevice (MetaInputSettings *settings, if (handle) return handle->xdev; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); xdev = XOpenDevice (xdisplay, device_id); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (xdev) { @@ -123,11 +123,11 @@ get_property (ClutterInputDevice *device, device_id = meta_input_device_x11_get_device_id (device); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, device_id, property_atom, 0, 10, False, type, &type_ret, &format_ret, &nitems_ret, &bytes_after_ret, &data_ret); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (rc == Success && type_ret == type && format_ret == format && nitems_ret >= nitems) return data_ret; @@ -162,11 +162,12 @@ change_property (MetaInputSettings *settings, if (!data_ret) return; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XIChangeProperty (xdisplay, device_id, property_atom, type, format, XIPropModeReplace, data, nitems); XSync (xdisplay, False); - err = meta_clutter_x11_untrap_x_errors (); + + err = mtk_x11_error_trap_pop_with_return (xdisplay); if (err) { g_warning ("XIChangeProperty failed on device %d property \"%s\" with X error %d", @@ -604,7 +605,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings, XDevice *xdev; /* Grab the puke bucket! */ - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); xdev = device_ensure_xdevice (settings, device); if (xdev) { @@ -613,7 +614,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings, Absolute : Relative); } - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); } static gboolean @@ -753,7 +754,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti XDevice *xdev; /* Grab the puke bucket! */ - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); xdev = device_ensure_xdevice (settings, device); if (xdev) { @@ -771,7 +772,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti XSetDeviceButtonMapping (xdisplay, xdev, map, G_N_ELEMENTS (map)); } - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); } static void diff --git a/src/backends/x11/meta-output-xrandr.c b/src/backends/x11/meta-output-xrandr.c index 08e584a03..87f8518d5 100644 --- a/src/backends/x11/meta-output-xrandr.c +++ b/src/backends/x11/meta-output-xrandr.c @@ -44,6 +44,7 @@ #include "backends/meta-crtc.h" #include "backends/x11/meta-monitor-manager-xrandr.h" #include "meta/util.h" +#include "mtk/mtk-x11.h" struct _MetaOutputXrandr { @@ -453,11 +454,11 @@ output_get_max_bpc_range_xrandr (Display *xdisplay, atom = XInternAtom (xdisplay, "max bpc", False); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); property_info = XRRQueryOutputProperty (xdisplay, (XID) output_id, atom); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (!property_info) return FALSE; diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c index 1461bb0b8..ca9fca789 100644 --- a/src/backends/x11/meta-seat-x11.c +++ b/src/backends/x11/meta-seat-x11.c @@ -39,6 +39,7 @@ #include "clutter/clutter-mutter.h" #include "core/bell.h" #include "meta-seat-x11.h" +#include "mtk/mtk-x11.h" enum { @@ -301,13 +302,13 @@ is_touchpad_device (MetaSeatX11 *seat_x11, if (prop == None) return FALSE; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, info->deviceid, prop, 0, 1, False, XA_INTEGER, &type, &format, &nitems, &bytes_after, (guchar **) &data); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); /* We don't care about the data */ XFree (data); @@ -330,13 +331,13 @@ get_device_ids (MetaSeatX11 *seat_x11, int rc, format; Atom type; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, info->deviceid, XInternAtom (xdisplay, "Device Product ID", False), 0, 2, False, XA_INTEGER, &type, &format, &nitems, &bytes_after, (guchar **) &data); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (rc != Success || type != XA_INTEGER || format != 32 || nitems != 2) { @@ -369,14 +370,14 @@ get_device_node_path (MetaSeatX11 *seat_x11, if (prop == None) return NULL; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, info->deviceid, prop, 0, 1024, False, XA_STRING, &type, &format, &nitems, &bytes_after, (guchar **) &data); - if (meta_clutter_x11_untrap_x_errors ()) + if (mtk_x11_error_trap_pop_with_return (xdisplay)) return NULL; if (rc != Success || type != XA_STRING || format != 8) @@ -442,13 +443,13 @@ guess_source_from_wacom_type (MetaSeatX11 *seat_x11, if (prop == None) return FALSE; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, info->deviceid, prop, 0, 1, False, XA_ATOM, &type, &format, &nitems, &bytes_after, (guchar **) &data); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (rc != Success || type != XA_ATOM || format != 32 || nitems != 1) { @@ -697,7 +698,7 @@ pad_passive_button_grab (MetaSeatX11 *seat_x11, XISetMask (xi_event_mask.mask, XI_ButtonPress); XISetMask (xi_event_mask.mask, XI_ButtonRelease); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGrabButton (xdisplay, device_id, XIAnyButton, root_xwindow, None, @@ -713,7 +714,7 @@ pad_passive_button_grab (MetaSeatX11 *seat_x11, XIAllowEvents (xdisplay, device_id, XIAsyncDevice, CLUTTER_CURRENT_TIME); } - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_free (xi_event_mask.mask); } @@ -864,12 +865,12 @@ device_get_tool_serial (MetaSeatX11 *seat_x11, if (prop == None) return 0; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); rc = XIGetProperty (xdisplay, meta_input_device_x11_get_device_id (device), prop, 0, 4, FALSE, XA_INTEGER, &type, &format, &nitems, &bytes_after, (guchar **) &data); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (rc == Success && type == XA_INTEGER && format == 32 && nitems >= 4) serial_id = data[3]; @@ -899,11 +900,11 @@ translate_hierarchy_event (ClutterBackend *clutter_backend, g_debug ("Hierarchy event: device enabled"); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &n_devices); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); if (info != NULL) { ClutterInputDevice *device; @@ -1652,14 +1653,14 @@ meta_seat_x11_warp_pointer (ClutterSeat *seat, Display *xdisplay = xdisplay_from_seat (seat_x11); Window root_xwindow = root_xwindow_from_seat (seat_x11); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XIWarpPointer (xdisplay, seat_x11->pointer_id, None, root_xwindow, 0, 0, 0, 0, x, y); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); } static void @@ -1671,14 +1672,14 @@ meta_seat_x11_init_pointer_position (ClutterSeat *seat, Display *xdisplay = xdisplay_from_seat (seat_x11); Window root_xwindow = root_xwindow_from_seat (seat_x11); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XIWarpPointer (xdisplay, seat_x11->pointer_id, None, root_xwindow, 0, 0, 0, 0, (int) x, (int) y); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); } static uint32_t @@ -1744,14 +1745,14 @@ meta_seat_x11_query_state (ClutterSeat *seat, XIModifierState modifier_state; XIGroupState group_state; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XIQueryPointer (xdisplay, seat_x11->pointer_id, meta_backend_x11_get_xwindow (backend_x11), &root_ret, &child_ret, &root_x, &root_y, &win_x, &win_y, &button_state, &modifier_state, &group_state); - if (meta_clutter_x11_untrap_x_errors ()) + if (mtk_x11_error_trap_pop_with_return (xdisplay)) { g_free (button_state.mask); return FALSE; diff --git a/src/backends/x11/meta-xkb-a11y-x11.c b/src/backends/x11/meta-xkb-a11y-x11.c index e4aa46d15..6e13d2499 100644 --- a/src/backends/x11/meta-xkb-a11y-x11.c +++ b/src/backends/x11/meta-xkb-a11y-x11.c @@ -29,7 +29,7 @@ #include "backends/x11/meta-clutter-backend-x11.h" #include "backends/x11/meta-seat-x11.h" #include "core/display-private.h" -#include "meta/meta-x11-errors.h" +#include "mtk/mtk-x11.h" #define DEFAULT_XKB_SET_CONTROLS_MASK XkbSlowKeysMask | \ XkbBounceKeysMask | \ @@ -56,14 +56,14 @@ get_xkb_desc_rec (Display *xdisplay) XkbDescRec *desc; Status status = Success; - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); desc = XkbGetMap (xdisplay, XkbAllMapComponentsMask, XkbUseCoreKbd); if (desc != NULL) { desc->ctrls = NULL; status = XkbGetControls (xdisplay, XkbAllControlsMask, desc); } - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_return_val_if_fail (desc != NULL, NULL); g_return_val_if_fail (desc->ctrls != NULL, NULL); @@ -76,10 +76,10 @@ static void set_xkb_desc_rec (Display *xdisplay, XkbDescRec *desc) { - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); XkbSetControls (xdisplay, DEFAULT_XKB_SET_CONTROLS_MASK, desc); XSync (xdisplay, FALSE); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); } void diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 43b549444..b25d993d8 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -43,8 +43,8 @@ #include "core/meta-workspace-manager-private.h" #include "core/workspace-private.h" #include "meta/compositor.h" -#include "meta/meta-x11-errors.h" #include "meta/prefs.h" +#include "mtk/mtk-x11.h" #include "x11/meta-x11-display-private.h" #include "x11/window-x11.h" @@ -1203,7 +1203,7 @@ meta_change_button_grab (MetaKeyBindingManager *keys, mods = calc_grab_modifiers (keys, modmask); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); if (window->frame) xwindow = window->frame->xwindow; @@ -1225,7 +1225,7 @@ meta_change_button_grab (MetaKeyBindingManager *keys, XSync (xdisplay, False); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_array_free (mods, TRUE); } @@ -1447,7 +1447,7 @@ meta_change_keygrab (MetaKeyBindingManager *keys, mods = calc_grab_modifiers (keys, resolved_combo->mask); - meta_clutter_x11_trap_x_errors (); + mtk_x11_error_trap_push (xdisplay); for (i = 0; i < resolved_combo->len; i++) { @@ -1473,7 +1473,7 @@ meta_change_keygrab (MetaKeyBindingManager *keys, XSync (xdisplay, False); - meta_clutter_x11_untrap_x_errors (); + mtk_x11_error_trap_pop (xdisplay); g_array_free (mods, TRUE); }