static void associate_window_with_surface_op_free (AssociateWindowWithSurfaceOp *op) { if (op->later_id != 0) meta_later_remove (op->later_id); g_signal_handlers_disconnect_by_func (op->window, (gpointer) associate_window_with_surface_window_unmanaged, op); g_free (op); }
void meta_stack_tracker_free (MetaStackTracker *tracker) { if (tracker->sync_stack_later) meta_later_remove (tracker->sync_stack_later); g_array_free (tracker->server_stack, TRUE); if (tracker->predicted_stack) g_array_free (tracker->predicted_stack, TRUE); g_queue_foreach (tracker->queued_requests, (GFunc)meta_stack_op_free, NULL); g_queue_free (tracker->queued_requests); tracker->queued_requests = NULL; g_free (tracker); }
/** * meta_stack_tracker_sync_stack: * @tracker: a #MetaStackTracker * * Informs the compositor of the current stacking order of windows, * based on the predicted view maintained by the #MetaStackTracker. */ void meta_stack_tracker_sync_stack (MetaStackTracker *tracker) { GList *meta_windows; Window *windows; int n_windows; int i; if (tracker->sync_stack_later) { meta_later_remove (tracker->sync_stack_later); tracker->sync_stack_later = 0; } meta_stack_tracker_get_stack (tracker, &windows, &n_windows); meta_windows = NULL; for (i = 0; i < n_windows; i++) { MetaWindow *meta_window; meta_window = meta_display_lookup_x_window (tracker->screen->display, windows[i]); /* When mapping back from xwindow to MetaWindow we have to be a bit careful; * children of the root could include unmapped windows created by toolkits * for internal purposes, including ones that we have registered in our * XID => window table. (Wine uses a toplevel for _NET_WM_USER_TIME_WINDOW; * see window-prop.c:reload_net_wm_user_time_window() for registration.) */ if (meta_window && (windows[i] == meta_window->xwindow || (meta_window->frame && windows[i] == meta_window->frame->xwindow))) meta_windows = g_list_prepend (meta_windows, meta_window); } if (tracker->screen->display->compositor) meta_compositor_sync_stack (tracker->screen->display->compositor, tracker->screen, meta_windows); g_list_free (meta_windows); meta_screen_restacked (tracker->screen); }