Compare commits
8 Commits
wip/garnac
...
3.19.1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8899b9da01 | ||
![]() |
76e816a14f | ||
![]() |
2750db2a89 | ||
![]() |
86a913d37a | ||
![]() |
2857fdbdb8 | ||
![]() |
69a7d5ff02 | ||
![]() |
a4f763ac3b | ||
![]() |
f2afa7aa6c |
14
NEWS
14
NEWS
@@ -1,3 +1,17 @@
|
|||||||
|
3.19.1
|
||||||
|
======
|
||||||
|
* wayland: Allow to trigger popups through keyboard/touch [Carlos; #756296]
|
||||||
|
* Fix modifiers-only input source switching on Ubuntu [Alberts; #756543]
|
||||||
|
* Misc. bug fixes [Jonas, Rui, Giovanni, Florian; #756675, #756660, #746420,
|
||||||
|
#756548, #756796, #757101, #757148]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Ådahl, Giovanni Campagna, Carlos Garnacho, Rui Matos,
|
||||||
|
Alberts Muktupāvels, Florian Müllner
|
||||||
|
|
||||||
|
Translations:
|
||||||
|
Daniel Șerbănescu [ro]
|
||||||
|
|
||||||
3.18.1
|
3.18.1
|
||||||
======
|
======
|
||||||
* Misc. crash fixes [Jonas, Rui, Carlos, Owen, Florian; #755096, #754979,
|
* Misc. crash fixes [Jonas, Rui, Carlos, Owen, Florian; #755096, #754979,
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
AC_PREREQ(2.62)
|
AC_PREREQ(2.62)
|
||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [18])
|
m4_define([mutter_minor_version], [19])
|
||||||
m4_define([mutter_micro_version], [1])
|
m4_define([mutter_micro_version], [1])
|
||||||
|
|
||||||
m4_define([mutter_version],
|
m4_define([mutter_version],
|
||||||
@@ -58,7 +58,7 @@ CANBERRA_GTK_VERSION=0.26
|
|||||||
CLUTTER_PACKAGE=clutter-1.0
|
CLUTTER_PACKAGE=clutter-1.0
|
||||||
|
|
||||||
MUTTER_PC_MODULES="
|
MUTTER_PC_MODULES="
|
||||||
gtk+-3.0 >= 3.9.11
|
gtk+-3.0 >= 3.19.1
|
||||||
gio-unix-2.0 >= 2.35.1
|
gio-unix-2.0 >= 2.35.1
|
||||||
pango >= 1.2.0
|
pango >= 1.2.0
|
||||||
cairo >= 1.10.0
|
cairo >= 1.10.0
|
||||||
|
@@ -82,6 +82,7 @@ struct _MetaBackendX11Private
|
|||||||
gchar *keymap_layouts;
|
gchar *keymap_layouts;
|
||||||
gchar *keymap_variants;
|
gchar *keymap_variants;
|
||||||
gchar *keymap_options;
|
gchar *keymap_options;
|
||||||
|
int locked_group;
|
||||||
};
|
};
|
||||||
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
typedef struct _MetaBackendX11Private MetaBackendX11Private;
|
||||||
|
|
||||||
@@ -297,15 +298,23 @@ handle_host_xevent (MetaBackend *backend,
|
|||||||
|
|
||||||
if (event->type == priv->xkb_event_base)
|
if (event->type == priv->xkb_event_base)
|
||||||
{
|
{
|
||||||
XkbAnyEvent *xkb_ev = (XkbAnyEvent *) event;
|
XkbEvent *xkb_ev = (XkbEvent *) event;
|
||||||
|
|
||||||
if (xkb_ev->device == META_VIRTUAL_CORE_KEYBOARD_ID)
|
if (xkb_ev->any.device == META_VIRTUAL_CORE_KEYBOARD_ID)
|
||||||
{
|
{
|
||||||
switch (xkb_ev->xkb_type)
|
switch (xkb_ev->any.xkb_type)
|
||||||
{
|
{
|
||||||
case XkbNewKeyboardNotify:
|
case XkbNewKeyboardNotify:
|
||||||
case XkbMapNotify:
|
case XkbMapNotify:
|
||||||
keymap_changed (backend);
|
keymap_changed (backend);
|
||||||
|
break;
|
||||||
|
case XkbStateNotify:
|
||||||
|
if (xkb_ev->state.changed & XkbGroupLockMask)
|
||||||
|
{
|
||||||
|
if (priv->locked_group != xkb_ev->state.locked_group)
|
||||||
|
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, priv->locked_group);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -776,6 +785,7 @@ meta_backend_x11_lock_layout_group (MetaBackend *backend,
|
|||||||
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
|
|
||||||
|
priv->locked_group = idx;
|
||||||
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, idx);
|
XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -808,6 +808,15 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
|
|||||||
{
|
{
|
||||||
GBytes *edid;
|
GBytes *edid;
|
||||||
|
|
||||||
|
/* Get this first so that if there are no valid modes we
|
||||||
|
can immediately skip to the next output without having
|
||||||
|
to unwind all the assignments below. */
|
||||||
|
output_get_modes (manager, meta_output, output);
|
||||||
|
if (meta_output->n_modes == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
meta_output->preferred_mode = meta_output->modes[0];
|
||||||
|
|
||||||
meta_output->winsys_id = resources->outputs[i];
|
meta_output->winsys_id = resources->outputs[i];
|
||||||
meta_output->name = g_strdup (output->name);
|
meta_output->name = g_strdup (output->name);
|
||||||
|
|
||||||
@@ -824,8 +833,6 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
|
|||||||
meta_output->connector_type = output_get_connector_type (manager_xrandr, meta_output);
|
meta_output->connector_type = output_get_connector_type (manager_xrandr, meta_output);
|
||||||
|
|
||||||
output_get_tile_info (manager_xrandr, meta_output);
|
output_get_tile_info (manager_xrandr, meta_output);
|
||||||
output_get_modes (manager, meta_output, output);
|
|
||||||
meta_output->preferred_mode = meta_output->modes[0];
|
|
||||||
|
|
||||||
meta_output->n_possible_crtcs = output->ncrtc;
|
meta_output->n_possible_crtcs = output->ncrtc;
|
||||||
meta_output->possible_crtcs = g_new0 (MetaCRTC *, meta_output->n_possible_crtcs);
|
meta_output->possible_crtcs = g_new0 (MetaCRTC *, meta_output->n_possible_crtcs);
|
||||||
|
@@ -3534,10 +3534,7 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
const MetaMonitorInfo *old, *new;
|
const MetaMonitorInfo *old, *new;
|
||||||
|
|
||||||
if (window->type == META_WINDOW_DESKTOP)
|
if (window->override_redirect || window->type == META_WINDOW_DESKTOP)
|
||||||
return;
|
|
||||||
|
|
||||||
if (window->override_redirect)
|
|
||||||
{
|
{
|
||||||
meta_window_update_monitor (window, FALSE);
|
meta_window_update_monitor (window, FALSE);
|
||||||
return;
|
return;
|
||||||
|
@@ -929,6 +929,7 @@ static GtkStyleContext *
|
|||||||
create_style_context (GType widget_type,
|
create_style_context (GType widget_type,
|
||||||
GtkStyleContext *parent_style,
|
GtkStyleContext *parent_style,
|
||||||
GtkCssProvider *provider,
|
GtkCssProvider *provider,
|
||||||
|
const char *object_name,
|
||||||
const char *first_class,
|
const char *first_class,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
@@ -948,6 +949,9 @@ create_style_context (GType widget_type,
|
|||||||
|
|
||||||
gtk_widget_path_append_type (path, widget_type);
|
gtk_widget_path_append_type (path, widget_type);
|
||||||
|
|
||||||
|
if (object_name)
|
||||||
|
gtk_widget_path_iter_set_object_name (path, -1, object_name);
|
||||||
|
|
||||||
va_start (ap, first_class);
|
va_start (ap, first_class);
|
||||||
for (name = first_class; name; name = va_arg (ap, const char *))
|
for (name = first_class; name; name = va_arg (ap, const char *))
|
||||||
gtk_widget_path_iter_add_class (path, -1, name);
|
gtk_widget_path_iter_add_class (path, -1, name);
|
||||||
@@ -987,6 +991,7 @@ meta_theme_create_style_info (GdkScreen *screen,
|
|||||||
create_style_context (META_TYPE_FRAMES,
|
create_style_context (META_TYPE_FRAMES,
|
||||||
NULL,
|
NULL,
|
||||||
provider,
|
provider,
|
||||||
|
"decoration",
|
||||||
GTK_STYLE_CLASS_BACKGROUND,
|
GTK_STYLE_CLASS_BACKGROUND,
|
||||||
"window-frame",
|
"window-frame",
|
||||||
"ssd",
|
"ssd",
|
||||||
@@ -995,6 +1000,7 @@ meta_theme_create_style_info (GdkScreen *screen,
|
|||||||
create_style_context (GTK_TYPE_HEADER_BAR,
|
create_style_context (GTK_TYPE_HEADER_BAR,
|
||||||
style_info->styles[META_STYLE_ELEMENT_FRAME],
|
style_info->styles[META_STYLE_ELEMENT_FRAME],
|
||||||
provider,
|
provider,
|
||||||
|
NULL,
|
||||||
GTK_STYLE_CLASS_TITLEBAR,
|
GTK_STYLE_CLASS_TITLEBAR,
|
||||||
GTK_STYLE_CLASS_HORIZONTAL,
|
GTK_STYLE_CLASS_HORIZONTAL,
|
||||||
"default-decoration",
|
"default-decoration",
|
||||||
@@ -1004,12 +1010,14 @@ meta_theme_create_style_info (GdkScreen *screen,
|
|||||||
create_style_context (GTK_TYPE_LABEL,
|
create_style_context (GTK_TYPE_LABEL,
|
||||||
style_info->styles[META_STYLE_ELEMENT_TITLEBAR],
|
style_info->styles[META_STYLE_ELEMENT_TITLEBAR],
|
||||||
provider,
|
provider,
|
||||||
|
NULL,
|
||||||
GTK_STYLE_CLASS_TITLE,
|
GTK_STYLE_CLASS_TITLE,
|
||||||
NULL);
|
NULL);
|
||||||
style_info->styles[META_STYLE_ELEMENT_BUTTON] =
|
style_info->styles[META_STYLE_ELEMENT_BUTTON] =
|
||||||
create_style_context (GTK_TYPE_BUTTON,
|
create_style_context (GTK_TYPE_BUTTON,
|
||||||
style_info->styles[META_STYLE_ELEMENT_TITLEBAR],
|
style_info->styles[META_STYLE_ELEMENT_TITLEBAR],
|
||||||
provider,
|
provider,
|
||||||
|
NULL,
|
||||||
GTK_STYLE_CLASS_BUTTON,
|
GTK_STYLE_CLASS_BUTTON,
|
||||||
"titlebutton",
|
"titlebutton",
|
||||||
NULL);
|
NULL);
|
||||||
@@ -1017,6 +1025,7 @@ meta_theme_create_style_info (GdkScreen *screen,
|
|||||||
create_style_context (GTK_TYPE_IMAGE,
|
create_style_context (GTK_TYPE_IMAGE,
|
||||||
style_info->styles[META_STYLE_ELEMENT_BUTTON],
|
style_info->styles[META_STYLE_ELEMENT_BUTTON],
|
||||||
provider,
|
provider,
|
||||||
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
return style_info;
|
return style_info;
|
||||||
}
|
}
|
||||||
|
@@ -933,22 +933,26 @@ set_surface_is_on_output (MetaWaylandSurface *surface,
|
|||||||
MetaWaylandOutput *wayland_output,
|
MetaWaylandOutput *wayland_output,
|
||||||
gboolean is_on_output)
|
gboolean is_on_output)
|
||||||
{
|
{
|
||||||
gboolean was_on_output = g_hash_table_contains (surface->outputs,
|
gpointer orig_id;
|
||||||
wayland_output);
|
gboolean was_on_output = g_hash_table_lookup_extended (surface->outputs_to_destroy_notify_id,
|
||||||
|
wayland_output,
|
||||||
|
NULL, &orig_id);
|
||||||
|
|
||||||
if (!was_on_output && is_on_output)
|
if (!was_on_output && is_on_output)
|
||||||
{
|
{
|
||||||
g_signal_connect (wayland_output, "output-destroyed",
|
gulong id;
|
||||||
G_CALLBACK (surface_handle_output_destroy),
|
|
||||||
surface);
|
id = g_signal_connect (wayland_output, "output-destroyed",
|
||||||
g_hash_table_add (surface->outputs, wayland_output);
|
G_CALLBACK (surface_handle_output_destroy),
|
||||||
|
surface);
|
||||||
|
g_hash_table_insert (surface->outputs_to_destroy_notify_id, wayland_output,
|
||||||
|
GSIZE_TO_POINTER ((gsize)id));
|
||||||
surface_entered_output (surface, wayland_output);
|
surface_entered_output (surface, wayland_output);
|
||||||
}
|
}
|
||||||
else if (was_on_output && !is_on_output)
|
else if (was_on_output && !is_on_output)
|
||||||
{
|
{
|
||||||
g_hash_table_remove (surface->outputs, wayland_output);
|
g_hash_table_remove (surface->outputs_to_destroy_notify_id, wayland_output);
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handler_disconnect (wayland_output, (gulong) GPOINTER_TO_SIZE (orig_id));
|
||||||
wayland_output, (gpointer)surface_handle_output_destroy, surface);
|
|
||||||
surface_left_output (surface, wayland_output);
|
surface_left_output (surface, wayland_output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -986,6 +990,12 @@ update_surface_output_state (gpointer key, gpointer value, gpointer user_data)
|
|||||||
set_surface_is_on_output (surface, wayland_output, is_on_output);
|
set_surface_is_on_output (surface, wayland_output, is_on_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
surface_output_disconnect_signal (gpointer key, gpointer value, gpointer user_data)
|
||||||
|
{
|
||||||
|
g_signal_handler_disconnect (key, (gulong) GPOINTER_TO_SIZE (value));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_wayland_surface_update_outputs (MetaWaylandSurface *surface)
|
meta_wayland_surface_update_outputs (MetaWaylandSurface *surface)
|
||||||
{
|
{
|
||||||
@@ -1036,7 +1046,8 @@ wl_surface_destructor (struct wl_resource *resource)
|
|||||||
|
|
||||||
meta_wayland_compositor_destroy_frame_callbacks (compositor, surface);
|
meta_wayland_compositor_destroy_frame_callbacks (compositor, surface);
|
||||||
|
|
||||||
g_hash_table_unref (surface->outputs);
|
g_hash_table_foreach (surface->outputs_to_destroy_notify_id, surface_output_disconnect_signal, surface);
|
||||||
|
g_hash_table_unref (surface->outputs_to_destroy_notify_id);
|
||||||
|
|
||||||
wl_list_for_each_safe (cb, next, &surface->pending_frame_callback_list, link)
|
wl_list_for_each_safe (cb, next, &surface->pending_frame_callback_list, link)
|
||||||
wl_resource_destroy (cb->resource);
|
wl_resource_destroy (cb->resource);
|
||||||
@@ -1081,7 +1092,7 @@ meta_wayland_surface_create (MetaWaylandCompositor *compositor,
|
|||||||
|
|
||||||
sync_drag_dest_funcs (surface);
|
sync_drag_dest_funcs (surface);
|
||||||
|
|
||||||
surface->outputs = g_hash_table_new (NULL, NULL);
|
surface->outputs_to_destroy_notify_id = g_hash_table_new (NULL, NULL);
|
||||||
|
|
||||||
pending_state_init (&surface->pending);
|
pending_state_init (&surface->pending);
|
||||||
return surface;
|
return surface;
|
||||||
|
@@ -147,7 +147,7 @@ struct _MetaWaylandSurface
|
|||||||
int scale;
|
int scale;
|
||||||
int32_t offset_x, offset_y;
|
int32_t offset_x, offset_y;
|
||||||
GList *subsurfaces;
|
GList *subsurfaces;
|
||||||
GHashTable *outputs;
|
GHashTable *outputs_to_destroy_notify_id;
|
||||||
|
|
||||||
/* List of pending frame callbacks that needs to stay queued longer than one
|
/* List of pending frame callbacks that needs to stay queued longer than one
|
||||||
* commit sequence, such as when it has not yet been assigned a role.
|
* commit sequence, such as when it has not yet been assigned a role.
|
||||||
|
@@ -863,7 +863,7 @@ meta_window_x11_grab_op_began (MetaWindow *window,
|
|||||||
if (window->sync_request_counter != None)
|
if (window->sync_request_counter != None)
|
||||||
meta_window_x11_create_sync_request_alarm (window);
|
meta_window_x11_create_sync_request_alarm (window);
|
||||||
|
|
||||||
if (window->size_hints.width_inc > 1 || window->size_hints.height_inc > 1)
|
if (window->size_hints.width_inc > 2 || window->size_hints.height_inc > 2)
|
||||||
{
|
{
|
||||||
priv->showing_resize_popup = TRUE;
|
priv->showing_resize_popup = TRUE;
|
||||||
meta_window_refresh_resize_popup (window);
|
meta_window_refresh_resize_popup (window);
|
||||||
|
Reference in New Issue
Block a user