Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
46b8624833 | ||
![]() |
76012506ff | ||
![]() |
1ab6ac2996 | ||
![]() |
c98d5448ec | ||
![]() |
cfafb0bfca | ||
![]() |
71077d582b | ||
![]() |
5eb5f72434 |
10
NEWS
10
NEWS
@@ -1,3 +1,13 @@
|
||||
3.23.3
|
||||
======
|
||||
* Fix frequent freezes in multihead setups on wayland [Rui; #774557]
|
||||
* Preserve root window mask on XSelectionRequest [Olivier; #776128]
|
||||
* Misc. bug fixes [Carlos, Florian, Rui, Olivier; #775478, #774891, #775986,
|
||||
#776036]
|
||||
|
||||
Contributors:
|
||||
Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
|
||||
|
||||
3.23.2
|
||||
======
|
||||
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
|
||||
|
@@ -47,8 +47,13 @@
|
||||
#include "cogl-util-gl-private.h"
|
||||
|
||||
#if defined (COGL_HAS_EGL_SUPPORT)
|
||||
#include <GLES2/gl2.h>
|
||||
#include <GLES2/gl2ext.h>
|
||||
#include "cogl-egl-defines.h"
|
||||
# ifndef COGL_HAS_GLES2
|
||||
/* We need this define from GLES2, but can't include the header
|
||||
as its type definitions may conflict with the GL ones
|
||||
*/
|
||||
# define GL_TEXTURE_EXTERNAL_OES 0x8D65
|
||||
# endif
|
||||
#endif
|
||||
|
||||
void
|
||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [23])
|
||||
m4_define([mutter_micro_version], [2])
|
||||
m4_define([mutter_micro_version], [3])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
|
@@ -98,6 +98,9 @@ typedef struct _MetaOnscreenNative
|
||||
|
||||
gboolean pending_set_crtc;
|
||||
|
||||
int64_t pending_queue_swap_notify_frame_count;
|
||||
int64_t pending_swap_notify_frame_count;
|
||||
|
||||
MetaRendererView *view;
|
||||
int pending_flips;
|
||||
} MetaOnscreenNative;
|
||||
@@ -166,16 +169,19 @@ flush_pending_swap_notify (CoglFramebuffer *framebuffer)
|
||||
|
||||
if (onscreen_native->pending_swap_notify)
|
||||
{
|
||||
CoglFrameInfo *info =
|
||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
||||
CoglFrameInfo *info;
|
||||
|
||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||
_cogl_onscreen_notify_complete (onscreen, info);
|
||||
while ((info = g_queue_peek_head (&onscreen->pending_frame_infos)) &&
|
||||
info->global_frame_counter <= onscreen_native->pending_swap_notify_frame_count)
|
||||
{
|
||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
||||
_cogl_onscreen_notify_complete (onscreen, info);
|
||||
cogl_object_unref (info);
|
||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
||||
}
|
||||
|
||||
onscreen_native->pending_swap_notify = FALSE;
|
||||
cogl_object_unref (onscreen);
|
||||
|
||||
cogl_object_unref (info);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -242,6 +248,9 @@ meta_onscreen_native_queue_swap_notify (CoglOnscreen *onscreen)
|
||||
CoglRendererEGL *egl_renderer = cogl_renderer->winsys;
|
||||
MetaRendererNative *renderer_native = egl_renderer->platform;
|
||||
|
||||
onscreen_native->pending_swap_notify_frame_count =
|
||||
onscreen_native->pending_queue_swap_notify_frame_count;
|
||||
|
||||
if (onscreen_native->pending_swap_notify)
|
||||
return;
|
||||
|
||||
@@ -850,6 +859,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||
onscreen_native->pending_set_crtc = FALSE;
|
||||
}
|
||||
|
||||
onscreen_native->pending_queue_swap_notify_frame_count = renderer_native->frame_counter;
|
||||
meta_onscreen_native_flip_crtcs (onscreen);
|
||||
}
|
||||
|
||||
|
@@ -172,6 +172,11 @@ static void
|
||||
meta_wayland_surface_role_shell_surface_managed (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
MetaWindow *window);
|
||||
|
||||
static void
|
||||
surface_actor_mapped_notify (MetaSurfaceActorWayland *surface_actor,
|
||||
GParamSpec *pspec,
|
||||
MetaWaylandSurface *surface);
|
||||
|
||||
static void
|
||||
unset_param_value (GParameter *param)
|
||||
{
|
||||
@@ -406,6 +411,10 @@ meta_wayland_surface_destroy_window (MetaWaylandSurface *surface)
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
guint32 timestamp = meta_display_get_current_time_roundtrip (display);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (surface->surface_actor,
|
||||
surface_actor_mapped_notify,
|
||||
surface);
|
||||
|
||||
meta_window_unmanage (surface->window, timestamp);
|
||||
}
|
||||
|
||||
@@ -1286,6 +1295,14 @@ surface_actor_painting (MetaSurfaceActorWayland *surface_actor,
|
||||
meta_wayland_surface_update_outputs (surface);
|
||||
}
|
||||
|
||||
static void
|
||||
surface_actor_mapped_notify (MetaSurfaceActorWayland *surface_actor,
|
||||
GParamSpec *pspec,
|
||||
MetaWaylandSurface *surface)
|
||||
{
|
||||
meta_wayland_surface_update_outputs (surface);
|
||||
}
|
||||
|
||||
MetaWaylandSurface *
|
||||
meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
||||
struct wl_client *client,
|
||||
@@ -1309,6 +1326,10 @@ meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
||||
G_CALLBACK (surface_actor_painting),
|
||||
surface,
|
||||
0);
|
||||
g_signal_connect_object (surface->surface_actor,
|
||||
"notify::mapped",
|
||||
G_CALLBACK (surface_actor_mapped_notify),
|
||||
surface, 0);
|
||||
|
||||
sync_drag_dest_funcs (surface);
|
||||
|
||||
|
@@ -839,6 +839,17 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
|
||||
|
||||
xdg_popup->popup = popup;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
|
||||
* is pretty undefined. Same applies for subsurfaces, but in practice,
|
||||
* subsurfaces never receive keyboard focus, so it makes sense to
|
||||
* do the same for non-grabbing popups.
|
||||
*
|
||||
* See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24
|
||||
*/
|
||||
window->input = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -117,24 +117,11 @@ static void
|
||||
meta_window_wayland_focus (MetaWindow *window,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWaylandSurface *surface = window->surface;
|
||||
MetaWaylandSurfaceRoleShellSurface *shell_surface_role =
|
||||
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role);
|
||||
|
||||
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
|
||||
* is pretty undefined. Same applies for subsurfaces, but in practice,
|
||||
* subsurfaces never receive keyboard focus, so it makes sense to
|
||||
* do the same for non-grabbing popups.
|
||||
*
|
||||
* See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24
|
||||
*/
|
||||
if (META_IS_WAYLAND_XDG_POPUP (shell_surface_role))
|
||||
return;
|
||||
|
||||
meta_display_set_input_focus_window (window->display,
|
||||
window,
|
||||
FALSE,
|
||||
timestamp);
|
||||
if (window->input)
|
||||
meta_display_set_input_focus_window (window->display,
|
||||
window,
|
||||
FALSE,
|
||||
timestamp);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -546,6 +546,8 @@ static WaylandSelectionData *
|
||||
wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
||||
MetaWaylandCompositor *compositor)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaScreen *screen = display->screen;
|
||||
MetaWaylandDataDevice *data_device;
|
||||
MetaWaylandDataSource *wayland_source;
|
||||
MetaSelectionBridge *selection;
|
||||
@@ -595,7 +597,8 @@ wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
||||
data->window = meta_display_lookup_x_window (meta_get_display (),
|
||||
data->request_event.requestor);
|
||||
|
||||
if (!data->window)
|
||||
/* Do *not* change the event mask on the root window, bugger! */
|
||||
if (!data->window && data->request_event.requestor != screen->xroot)
|
||||
{
|
||||
/* Not a managed window, set the PropertyChangeMask
|
||||
* for INCR deletion notifications.
|
||||
@@ -629,10 +632,12 @@ reply_selection_request (XSelectionRequestEvent *request_event,
|
||||
static void
|
||||
wayland_selection_data_free (WaylandSelectionData *data)
|
||||
{
|
||||
if (!data->window)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaScreen *screen = display->screen;
|
||||
|
||||
/* Do *not* change the event mask on the root window, bugger! */
|
||||
if (!data->window && data->request_event.requestor != screen->xroot)
|
||||
{
|
||||
meta_error_trap_push (display);
|
||||
XSelectInput (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||
data->request_event.requestor, NoEventMask);
|
||||
|
Reference in New Issue
Block a user