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
|
3.23.2
|
||||||
======
|
======
|
||||||
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
|
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
|
||||||
|
@@ -47,8 +47,13 @@
|
|||||||
#include "cogl-util-gl-private.h"
|
#include "cogl-util-gl-private.h"
|
||||||
|
|
||||||
#if defined (COGL_HAS_EGL_SUPPORT)
|
#if defined (COGL_HAS_EGL_SUPPORT)
|
||||||
#include <GLES2/gl2.h>
|
#include "cogl-egl-defines.h"
|
||||||
#include <GLES2/gl2ext.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
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
|||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [23])
|
m4_define([mutter_minor_version], [23])
|
||||||
m4_define([mutter_micro_version], [2])
|
m4_define([mutter_micro_version], [3])
|
||||||
|
|
||||||
m4_define([mutter_version],
|
m4_define([mutter_version],
|
||||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||||
|
@@ -98,6 +98,9 @@ typedef struct _MetaOnscreenNative
|
|||||||
|
|
||||||
gboolean pending_set_crtc;
|
gboolean pending_set_crtc;
|
||||||
|
|
||||||
|
int64_t pending_queue_swap_notify_frame_count;
|
||||||
|
int64_t pending_swap_notify_frame_count;
|
||||||
|
|
||||||
MetaRendererView *view;
|
MetaRendererView *view;
|
||||||
int pending_flips;
|
int pending_flips;
|
||||||
} MetaOnscreenNative;
|
} MetaOnscreenNative;
|
||||||
@@ -166,16 +169,19 @@ flush_pending_swap_notify (CoglFramebuffer *framebuffer)
|
|||||||
|
|
||||||
if (onscreen_native->pending_swap_notify)
|
if (onscreen_native->pending_swap_notify)
|
||||||
{
|
{
|
||||||
CoglFrameInfo *info =
|
CoglFrameInfo *info;
|
||||||
g_queue_pop_head (&onscreen->pending_frame_infos);
|
|
||||||
|
|
||||||
_cogl_onscreen_notify_frame_sync (onscreen, info);
|
while ((info = g_queue_peek_head (&onscreen->pending_frame_infos)) &&
|
||||||
_cogl_onscreen_notify_complete (onscreen, info);
|
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;
|
onscreen_native->pending_swap_notify = FALSE;
|
||||||
cogl_object_unref (onscreen);
|
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;
|
CoglRendererEGL *egl_renderer = cogl_renderer->winsys;
|
||||||
MetaRendererNative *renderer_native = egl_renderer->platform;
|
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)
|
if (onscreen_native->pending_swap_notify)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -850,6 +859,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
|||||||
onscreen_native->pending_set_crtc = FALSE;
|
onscreen_native->pending_set_crtc = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onscreen_native->pending_queue_swap_notify_frame_count = renderer_native->frame_counter;
|
||||||
meta_onscreen_native_flip_crtcs (onscreen);
|
meta_onscreen_native_flip_crtcs (onscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -172,6 +172,11 @@ static void
|
|||||||
meta_wayland_surface_role_shell_surface_managed (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
meta_wayland_surface_role_shell_surface_managed (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||||
MetaWindow *window);
|
MetaWindow *window);
|
||||||
|
|
||||||
|
static void
|
||||||
|
surface_actor_mapped_notify (MetaSurfaceActorWayland *surface_actor,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
MetaWaylandSurface *surface);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
unset_param_value (GParameter *param)
|
unset_param_value (GParameter *param)
|
||||||
{
|
{
|
||||||
@@ -406,6 +411,10 @@ meta_wayland_surface_destroy_window (MetaWaylandSurface *surface)
|
|||||||
MetaDisplay *display = meta_get_display ();
|
MetaDisplay *display = meta_get_display ();
|
||||||
guint32 timestamp = meta_display_get_current_time_roundtrip (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);
|
meta_window_unmanage (surface->window, timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1286,6 +1295,14 @@ surface_actor_painting (MetaSurfaceActorWayland *surface_actor,
|
|||||||
meta_wayland_surface_update_outputs (surface);
|
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 *
|
MetaWaylandSurface *
|
||||||
meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
||||||
struct wl_client *client,
|
struct wl_client *client,
|
||||||
@@ -1309,6 +1326,10 @@ meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
|||||||
G_CALLBACK (surface_actor_painting),
|
G_CALLBACK (surface_actor_painting),
|
||||||
surface,
|
surface,
|
||||||
0);
|
0);
|
||||||
|
g_signal_connect_object (surface->surface_actor,
|
||||||
|
"notify::mapped",
|
||||||
|
G_CALLBACK (surface_actor_mapped_notify),
|
||||||
|
surface, 0);
|
||||||
|
|
||||||
sync_drag_dest_funcs (surface);
|
sync_drag_dest_funcs (surface);
|
||||||
|
|
||||||
|
@@ -839,6 +839,17 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
|
|||||||
|
|
||||||
xdg_popup->popup = 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
|
static void
|
||||||
|
@@ -117,24 +117,11 @@ static void
|
|||||||
meta_window_wayland_focus (MetaWindow *window,
|
meta_window_wayland_focus (MetaWindow *window,
|
||||||
guint32 timestamp)
|
guint32 timestamp)
|
||||||
{
|
{
|
||||||
MetaWaylandSurface *surface = window->surface;
|
if (window->input)
|
||||||
MetaWaylandSurfaceRoleShellSurface *shell_surface_role =
|
meta_display_set_input_focus_window (window->display,
|
||||||
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role);
|
window,
|
||||||
|
FALSE,
|
||||||
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
|
timestamp);
|
||||||
* 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -546,6 +546,8 @@ static WaylandSelectionData *
|
|||||||
wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
||||||
MetaWaylandCompositor *compositor)
|
MetaWaylandCompositor *compositor)
|
||||||
{
|
{
|
||||||
|
MetaDisplay *display = meta_get_display ();
|
||||||
|
MetaScreen *screen = display->screen;
|
||||||
MetaWaylandDataDevice *data_device;
|
MetaWaylandDataDevice *data_device;
|
||||||
MetaWaylandDataSource *wayland_source;
|
MetaWaylandDataSource *wayland_source;
|
||||||
MetaSelectionBridge *selection;
|
MetaSelectionBridge *selection;
|
||||||
@@ -595,7 +597,8 @@ wayland_selection_data_new (XSelectionRequestEvent *request_event,
|
|||||||
data->window = meta_display_lookup_x_window (meta_get_display (),
|
data->window = meta_display_lookup_x_window (meta_get_display (),
|
||||||
data->request_event.requestor);
|
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
|
/* Not a managed window, set the PropertyChangeMask
|
||||||
* for INCR deletion notifications.
|
* for INCR deletion notifications.
|
||||||
@@ -629,10 +632,12 @@ reply_selection_request (XSelectionRequestEvent *request_event,
|
|||||||
static void
|
static void
|
||||||
wayland_selection_data_free (WaylandSelectionData *data)
|
wayland_selection_data_free (WaylandSelectionData *data)
|
||||||
{
|
{
|
||||||
if (!data->window)
|
MetaDisplay *display = meta_get_display ();
|
||||||
{
|
MetaScreen *screen = display->screen;
|
||||||
MetaDisplay *display = meta_get_display ();
|
|
||||||
|
|
||||||
|
/* 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);
|
meta_error_trap_push (display);
|
||||||
XSelectInput (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
XSelectInput (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
||||||
data->request_event.requestor, NoEventMask);
|
data->request_event.requestor, NoEventMask);
|
||||||
|
Reference in New Issue
Block a user