Marco Trevisan (Treviño) has proposed merging
~3v1n0/ubuntu/+source/mutter:ubuntu/master into
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
Requested reviews:
Ubuntu Desktop (ubuntu-desktop)
Related bugs:
Bug #1826176 in gnome-shell (Ubuntu): "Applications do not receive focus in
Wayland sessions"
https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1826176
Bug #1826182 in mutter (Ubuntu): "[DisplayLink][fixed upstream] GNOME
libmutter crash on hotplugging a dock with a monitor"
https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1826182
Bug #1826933 in gnome-shell (Ubuntu): "gnome-shell crashes in
meta_monitor_mode_get_resolution -> calculate_scale ->
meta_monitor_calculate_mode_scale derive_calculated_global_scale ->
meta_monitor_manager_rebuild_logical_monitors_derived"
https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1826933
Bug #1826936 in gnome-shell (Ubuntu): "Upgrade to 3.32.1 and SRU it"
https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1826936
For more details, see:
https://code.launchpad.net/~3v1n0/ubuntu/+source/mutter/+git/mutter/+merge/366666
Merge 3.32 with debian, fix scale computation crash.
--
Your team Ubuntu Desktop is requested to review the proposed merge of
~3v1n0/ubuntu/+source/mutter:ubuntu/master into
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
diff --git a/NEWS b/NEWS
index 720e28d..5606ee4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,33 @@
+3.32.1
+======
+* Fix fallback app menu on wayland [Florian; #493]
+* Fix elogind support [Tom; !491]
+* Fix startup notifications not timing out [Carlos; #501]
+* Fix keyboard accessibility toggle from keys
+ [Olivier, Carlos; !501, #529, !531]
+* Fix touchscreen input on rotated displays [Carlos; #514]
+* Work around hangul text input bug [Carlos; #1365]
+* Fix blurry wallpaper scaling [Daniel; !505]
+* Fix placement of window menu when using fractional scaling [Jan; #527]
+* Fix repaint issues of offscreen effects on secondary monitors [Daniel; !511]
+* Fix windows not getting focus after launch [Daniel; #505]
+* Properly advertise support for 'underscan' property [Jonas; !507]
+* Improve power-saving handling [Jonas; !506]
+* Fix moving windows by super+touch [Jonas D.; !495]
+* Misc. bug fixes and cleanups [Benjamin, Florian, Adam, Marco, Pablo,
+ Erik, Jonas, Heiher, Pekka, Daniel, Olivier, Carlos; !478, !475, !480,
+ !482, #490, !488, #491, #480, !477, !496, !492, !485, !515, !519, !521,
+ !216, !538, #541, #523]
+
+Contributors:
+ Jonas Ådahl, Pablo Barciela, Benjamin Berg, Tom Briden, Jonas Dreßler,
+ Olivier Fourdan, Carlos Garnacho, Jan Alexander Steffens (heftig), Heiher,
+ Adam Jackson, Erik Kurzinger, Florian Müllner, Pekka Paalanen,
+ Marco Trevisan (Treviño), Daniel van Vugt
+
+Translators:
+ Khaled Hosny [ar], Goran Vidović [hr], Daniel Mustieles [es]
+
3.32.0
======
* Fix deadlock when cancelling a theme sound [Andrea; !474]
diff --git a/clutter/clutter/clutter-device-manager.c b/clutter/clutter/clutter-device-manager.c
index 1800d01..c676384 100644
--- a/clutter/clutter/clutter-device-manager.c
+++ b/clutter/clutter/clutter-device-manager.c
@@ -550,13 +550,7 @@ static gboolean
are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
ClutterKbdA11ySettings *b)
{
- return (a->controls == b->controls &&
- a->slowkeys_delay == b->slowkeys_delay &&
- a->debounce_delay == b->debounce_delay &&
- a->timeout_delay == b->timeout_delay &&
- a->mousekeys_init_delay == b->mousekeys_init_delay &&
- a->mousekeys_max_speed == b->mousekeys_max_speed &&
- a->mousekeys_accel_time == b->mousekeys_accel_time);
+ return (memcmp (a, b, sizeof (ClutterKbdA11ySettings)) == 0);
}
void
diff --git a/clutter/clutter/evdev/clutter-input-device-evdev.c b/clutter/clutter/evdev/clutter-input-device-evdev.c
index b52689e..2ac2e11 100644
--- a/clutter/clutter/evdev/clutter-input-device-evdev.c
+++ b/clutter/clutter/evdev/clutter-input-device-evdev.c
@@ -1132,13 +1132,13 @@ clutter_input_device_evdev_process_kbd_a11y_event (ClutterEvent *e
if (event->key.flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)
goto emit_event;
- if (!(device_evdev->a11y_flags & CLUTTER_A11Y_KEYBOARD_ENABLED))
- goto emit_event;
-
- if (event->type == CLUTTER_KEY_PRESS)
- handle_enablekeys_press (event, device_evdev);
- else
- handle_enablekeys_release (event, device_evdev);
+ if (device_evdev->a11y_flags & CLUTTER_A11Y_KEYBOARD_ENABLED)
+ {
+ if (event->type == CLUTTER_KEY_PRESS)
+ handle_enablekeys_press (event, device_evdev);
+ else
+ handle_enablekeys_release (event, device_evdev);
+ }
if (device_evdev->a11y_flags & CLUTTER_A11Y_MOUSE_KEYS_ENABLED)
{
diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c
index 2623d02..235cfe8 100644
--- a/cogl/cogl/winsys/cogl-winsys-glx.c
+++ b/cogl/cogl/winsys/cogl-winsys-glx.c
@@ -99,9 +99,9 @@ typedef struct _CoglOnscreenGLX
CoglOnscreenXlib _parent;
GLXDrawable glxwin;
uint32_t last_swap_vsync_counter;
- gboolean pending_sync_notify;
- gboolean pending_complete_notify;
- gboolean pending_resize_notify;
+ uint32_t pending_sync_notify;
+ uint32_t pending_complete_notify;
+ uint32_t pending_resize_notify;
GThread *swap_wait_thread;
GQueue *swap_wait_queue;
@@ -347,35 +347,35 @@ flush_pending_notifications_cb (void *data,
{
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
CoglOnscreenGLX *glx_onscreen = onscreen->winsys;
- gboolean pending_sync_notify = glx_onscreen->pending_sync_notify;
- gboolean pending_complete_notify = glx_onscreen->pending_complete_notify;
- /* If swap_region is called then notifying the sync event could
- * potentially immediately queue a subsequent pending notify so
- * we need to clear the flag before invoking the callback */
- glx_onscreen->pending_sync_notify = FALSE;
- glx_onscreen->pending_complete_notify = FALSE;
-
- if (pending_sync_notify)
+ while (glx_onscreen->pending_sync_notify > 0 ||
+ glx_onscreen->pending_complete_notify > 0 ||
+ glx_onscreen->pending_resize_notify > 0)
{
- CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos);
-
- _cogl_onscreen_notify_frame_sync (onscreen, info);
- }
+ if (glx_onscreen->pending_sync_notify > 0)
+ {
+ CoglFrameInfo *info =
+ g_queue_peek_head (&onscreen->pending_frame_infos);
- if (pending_complete_notify)
- {
- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos);
+ _cogl_onscreen_notify_frame_sync (onscreen, info);
+ glx_onscreen->pending_sync_notify--;
+ }
- _cogl_onscreen_notify_complete (onscreen, info);
+ if (glx_onscreen->pending_complete_notify > 0)
+ {
+ CoglFrameInfo *info =
+ g_queue_pop_head (&onscreen->pending_frame_infos);
- cogl_object_unref (info);
- }
+ _cogl_onscreen_notify_complete (onscreen, info);
+ cogl_object_unref (info);
+ glx_onscreen->pending_complete_notify--;
+ }
- if (glx_onscreen->pending_resize_notify)
- {
- _cogl_onscreen_notify_resize (onscreen);
- glx_onscreen->pending_resize_notify = FALSE;
+ if (glx_onscreen->pending_resize_notify > 0)
+ {
+ _cogl_onscreen_notify_resize (onscreen);
+ glx_onscreen->pending_resize_notify--;
+ }
}
}
}
@@ -417,7 +417,7 @@ set_sync_pending (CoglOnscreen *onscreen)
NULL);
}
- glx_onscreen->pending_sync_notify = TRUE;
+ glx_onscreen->pending_sync_notify++;
}
static void
@@ -440,7 +440,7 @@ set_complete_pending (CoglOnscreen *onscreen)
NULL);
}
- glx_onscreen->pending_complete_notify = TRUE;
+ glx_onscreen->pending_complete_notify++;
}
static void
@@ -533,7 +533,7 @@ notify_resize (CoglContext *context,
NULL);
}
- glx_onscreen->pending_resize_notify = TRUE;
+ glx_onscreen->pending_resize_notify++;
if (!xlib_onscreen->is_foreign_xwin)
{
diff --git a/debian/changelog b/debian/changelog
index cd3e63e..353a3fe 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,29 @@
+mutter (3.32.1-1ubuntu1) UNRELEASED; urgency=medium
+
+ * Merge with debian
+ - Update to 3.32.1 upstream version (LP: #1826936)
+ - Fix applications aren't focused in Wayland session (LP: #1826176)
+ - Fix crash on hotplugging a dock with a monitor (LP: #1826182)
+ Remaining changes:
+ + debian/control:
+ - Update VCS flags to point to launchpad
+ - Update maintainer to ubuntu
+ + debian/gbp.conf: update branch to point to ubuntu/master
+ + debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch:
+ - X11: Add support for fractional scaling using Randr
+ * d/p/x11-Add-support-for-fractional-scaling-using-Randr.patch:
+ - Fixed crash on calculation of global scale (LP: #1826933)
+
+ -- Marco Trevisan (Treviño) <[email protected]> Mon, 29 Apr 2019 16:08:24 -0500
+
+mutter (3.32.1-1) experimental; urgency=medium
+
+ * New upstream release
+ * debian/patches: disable mousekeys with Numlock ON to match the
+ documentation (cherry picked from the 3.32 branch)
+
+ -- Laurent Bigonville <[email protected]> Mon, 22 Apr 2019 21:57:33 +0200
+
mutter (3.32.0+git20190410-2) experimental; urgency=medium
[ Gunnar Hjalmarsson ]
diff --git a/debian/patches/clutter-evdev-disable-mousekeys-with-Numlock-ON.patch b/debian/patches/clutter-evdev-disable-mousekeys-with-Numlock-ON.patch
new file mode 100644
index 0000000..5c70efe
--- /dev/null
+++ b/debian/patches/clutter-evdev-disable-mousekeys-with-Numlock-ON.patch
@@ -0,0 +1,64 @@
+From: Olivier Fourdan <[email protected]>
+Date: Tue, 9 Apr 2019 13:39:59 +0200
+Subject: clutter/evdev: disable mousekeys with Numlock ON
+
+The clutter/evdev implementation of mousekeys is designed after the
+current implementation in X11, and works when the setting is enabled
+regardless of the status of NumLock.
+
+The GNOME documentation on accessibility features states however that
+mousekeys work only when NumLock is OFF:
+
+ https://help.gnome.org/users/gnome-help/stable/mouse-mousekeys.html
+
+Change the clutter/evdev implementation to match the documentation, i.e.
+disable mousekeys when NumLock in ON so that switching NumLock ON
+restores the numeric keypad behaviour.
+
+Closes: https://gitlab.gnome.org/GNOME/mutter/issues/530
+(cherry picked from commit 471b61bd1400435b7af977c47c21b8fc747530d9)
+---
+ clutter/clutter/evdev/clutter-input-device-evdev.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/clutter/clutter/evdev/clutter-input-device-evdev.c b/clutter/clutter/evdev/clutter-input-device-evdev.c
+index 2ac2e11..73072b4 100644
+--- a/clutter/clutter/evdev/clutter-input-device-evdev.c
++++ b/clutter/clutter/evdev/clutter-input-device-evdev.c
+@@ -855,6 +855,14 @@ emulate_pointer_motion (ClutterInputDeviceEvdev *device,
+ clutter_virtual_input_device_notify_relative_motion (device->mousekeys_virtual_device,
+ time_us, dx_motion, dy_motion);
+ }
++static gboolean
++is_numlock_active (ClutterInputDeviceEvdev *device)
++{
++ ClutterSeatEvdev *seat = device->seat;
++ return xkb_state_mod_name_is_active (seat->xkb,
++ "Mod2",
++ XKB_STATE_MODS_LOCKED);
++}
+
+ static void
+ enable_mousekeys (ClutterInputDeviceEvdev *device)
+@@ -1013,6 +1021,10 @@ handle_mousekeys_press (ClutterEvent *event,
+ if (!(event->key.flags & CLUTTER_EVENT_FLAG_SYNTHETIC))
+ stop_mousekeys_move (device);
+
++ /* Do not handle mousekeys if NumLock is ON */
++ if (is_numlock_active (device))
++ return FALSE;
++
+ /* Button selection */
+ switch (event->key.keyval)
+ {
+@@ -1084,6 +1096,10 @@ static gboolean
+ handle_mousekeys_release (ClutterEvent *event,
+ ClutterInputDeviceEvdev *device)
+ {
++ /* Do not handle mousekeys if NumLock is ON */
++ if (is_numlock_active (device))
++ return FALSE;
++
+ switch (event->key.keyval)
+ {
+ case XKB_KEY_KP_0:
diff --git a/debian/patches/clutter-x11-disable-mousekeys-with-Numlock-ON.patch b/debian/patches/clutter-x11-disable-mousekeys-with-Numlock-ON.patch
new file mode 100644
index 0000000..d33c9aa
--- /dev/null
+++ b/debian/patches/clutter-x11-disable-mousekeys-with-Numlock-ON.patch
@@ -0,0 +1,85 @@
+From: Olivier Fourdan <[email protected]>
+Date: Tue, 9 Apr 2019 16:25:57 +0200
+Subject: clutter/x11: disable mousekeys with Numlock ON
+
+GNOME documentation on accessibility features states that mousekeys
+work only when NumLock is OFF:
+
+ https://help.gnome.org/users/gnome-help/stable/mouse-mousekeys.html
+
+Change the clutter/x11 implementation to match the documentation, i.e.
+disable mousekeys when NumLock in ON so that switching NumLock ON
+restores the numeric keypad behaviour.
+
+Closes: https://gitlab.gnome.org/GNOME/mutter/issues/530
+(cherry picked from commit 251fa024c416b1507a8cb1c9115082be87d25632)
+---
+ clutter/clutter/x11/clutter-backend-x11.c | 20 ++++++++++++++++++++
+ clutter/clutter/x11/clutter-xkb-a11y-x11.c | 9 +++++++--
+ 2 files changed, 27 insertions(+), 2 deletions(-)
+
+diff --git a/clutter/clutter/x11/clutter-backend-x11.c b/clutter/clutter/x11/clutter-backend-x11.c
+index 0ddd0f8..8c5ebc8 100644
+--- a/clutter/clutter/x11/clutter-backend-x11.c
++++ b/clutter/clutter/x11/clutter-backend-x11.c
+@@ -54,6 +54,7 @@
+ #include "clutter-main.h"
+ #include "clutter-private.h"
+ #include "clutter-settings-private.h"
++#include "clutter-xkb-a11y-x11.h"
+
+ G_DEFINE_TYPE (ClutterBackendX11, clutter_backend_x11, CLUTTER_TYPE_BACKEND)
+
+@@ -276,6 +277,20 @@ clutter_backend_x11_create_device_manager (ClutterBackendX11 *backend_x11)
+ _clutter_backend_add_event_translator (backend, translator);
+ }
+
++static void
++on_keymap_state_change (ClutterKeymapX11 *keymap_x11,
++ gpointer data)
++{
++ ClutterDeviceManager *device_manager = CLUTTER_DEVICE_MANAGER (data);
++ ClutterKbdA11ySettings kbd_a11y_settings;
++
++ /* On keymaps state change, just reapply the current settings, it'll
++ * take care of enabling/disabling mousekeys based on NumLock state.
++ */
++ clutter_device_manager_get_kbd_a11y_settings (device_manager, &kbd_a11y_settings);
++ clutter_device_manager_x11_apply_kbd_a11y_settings (device_manager, &kbd_a11y_settings);
++}
++
+ static void
+ clutter_backend_x11_create_keymap (ClutterBackendX11 *backend_x11)
+ {
+@@ -292,6 +307,11 @@ clutter_backend_x11_create_keymap (ClutterBackendX11 *backend_x11)
+ backend = CLUTTER_BACKEND (backend_x11);
+ translator = CLUTTER_EVENT_TRANSLATOR (backend_x11->keymap);
+ _clutter_backend_add_event_translator (backend, translator);
++
++ g_signal_connect (backend_x11->keymap,
++ "state-changed",
++ G_CALLBACK (on_keymap_state_change),
++ backend->device_manager);
+ }
+ }
+
+diff --git a/clutter/clutter/x11/clutter-xkb-a11y-x11.c b/clutter/clutter/x11/clutter-xkb-a11y-x11.c
+index 6adde81..6b782c7 100644
+--- a/clutter/clutter/x11/clutter-xkb-a11y-x11.c
++++ b/clutter/clutter/x11/clutter-xkb-a11y-x11.c
+@@ -241,8 +241,13 @@ clutter_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *devi
+ }
+
+ /* mouse keys */
+- if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
+- CLUTTER_A11Y_MOUSE_KEYS_ENABLED, XkbMouseKeysMask | XkbMouseKeysAccelMask))
++ if (clutter_keymap_get_num_lock_state (CLUTTER_KEYMAP (backend_x11->keymap)))
++ {
++ /* Disable mousekeys when NumLock is ON */
++ desc->ctrls->enabled_ctrls &= ~(XkbMouseKeysMask | XkbMouseKeysAccelMask);
++ }
++ else if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
++ CLUTTER_A11Y_MOUSE_KEYS_ENABLED, XkbMouseKeysMask | XkbMouseKeysAccelMask))
+ {
+ gint mk_max_speed;
+ gint mk_accel_time;
diff --git a/debian/patches/series b/debian/patches/series
index 5e2b370..71d998d 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,4 +2,6 @@ theme-use-gtk_render_icon_suface-to-paint-button-icon.patch
theme-load-icons-as-Gtk-does-with-fallback-and-RTL-suppor.patch
meson-add-back-default_driver-option.patch
debian/synaptics-support.patch
+clutter-evdev-disable-mousekeys-with-Numlock-ON.patch
+clutter-x11-disable-mousekeys-with-Numlock-ON.patch
x11-Add-support-for-fractional-scaling-using-Randr.patch
diff --git a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
index 7717be1..ea517c1 100644
--- a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
+++ b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch
@@ -1,5 +1,5 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]>
-Date: Wed, 3 Apr 2019 19:18:03 -0400
+Date: Wed, 3 Apr 2019 17:18:03 -0600
Subject: x11-Add-support-for-fractional-scaling-using-Randr
Add scaling support using randr under x11.
@@ -724,7 +724,7 @@ index cdb8f42..bf586ea 100644
meta_monitor_manager_get_capabilities (MetaMonitorManager *manager);
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
-index 2d898c7..a78fb37 100644
+index 2d898c7..d8cf3ae 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -110,8 +110,18 @@ static gboolean
@@ -838,7 +838,7 @@ index 2d898c7..a78fb37 100644
- if (!monitor || !meta_monitor_is_active (monitor))
- monitor = meta_monitor_manager_get_active_monitor (manager);
-+ if (monitor)
++ if (monitor && meta_monitor_is_active (monitor))
+ {
+ scale = calculate_monitor_scale (manager, monitor);
+ if (meta_monitor_manager_is_scale_supported_by_other_monitors (manager,
diff --git a/meson.build b/meson.build
index 6ce9e59..1c86575 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('mutter', 'c',
- version: '3.32.0',
+ version: '3.32.1',
meson_version: '>= 0.48.0',
license: 'GPLv2+'
)
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 086e8e4..dbfc97a 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -3787,16 +3787,13 @@ gpu_kms_is_hardware_rendering (MetaRendererNative *renderer_native,
return data->secondary.is_hardware_rendering;
}
-static MetaRendererNativeGpuData *
-create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
- MetaGpuKms *gpu_kms,
- GError **error)
+static EGLDisplay
+init_gbm_egl_display (MetaRendererNative *renderer_native,
+ struct gbm_device *gbm_device,
+ GError **error)
{
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
- struct gbm_device *gbm_device;
EGLDisplay egl_display;
- int kms_fd;
- MetaRendererNativeGpuData *renderer_gpu_data;
if (!meta_egl_has_extensions (egl, EGL_NO_DISPLAY, NULL,
"EGL_MESA_platform_gbm",
@@ -3808,9 +3805,31 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"Missing extension for GBM renderer: EGL_KHR_platform_gbm");
- return NULL;
+ return EGL_NO_DISPLAY;
}
+ egl_display = meta_egl_get_platform_display (egl,
+ EGL_PLATFORM_GBM_KHR,
+ gbm_device, NULL, error);
+ if (egl_display == EGL_NO_DISPLAY)
+ return EGL_NO_DISPLAY;
+
+ if (!meta_egl_initialize (egl, egl_display, error))
+ return EGL_NO_DISPLAY;
+
+ return egl_display;
+}
+
+static MetaRendererNativeGpuData *
+create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
+ MetaGpuKms *gpu_kms,
+ GError **error)
+{
+ struct gbm_device *gbm_device;
+ int kms_fd;
+ MetaRendererNativeGpuData *renderer_gpu_data;
+ g_autoptr (GError) local_error = NULL;
+
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
gbm_device = gbm_create_device (kms_fd);
@@ -3822,26 +3841,25 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
return NULL;
}
- egl_display = meta_egl_get_platform_display (egl,
- EGL_PLATFORM_GBM_KHR,
- gbm_device, NULL, error);
- if (egl_display == EGL_NO_DISPLAY)
- {
- gbm_device_destroy (gbm_device);
- return NULL;
- }
-
- if (!meta_egl_initialize (egl, egl_display, error))
- return NULL;
-
renderer_gpu_data = meta_create_renderer_native_gpu_data (gpu_kms);
renderer_gpu_data->renderer_native = renderer_native;
renderer_gpu_data->gbm.device = gbm_device;
renderer_gpu_data->mode = META_RENDERER_NATIVE_MODE_GBM;
- renderer_gpu_data->egl_display = egl_display;
- init_secondary_gpu_data (renderer_gpu_data);
+ renderer_gpu_data->egl_display = init_gbm_egl_display (renderer_native,
+ gbm_device,
+ &local_error);
+ if (renderer_gpu_data->egl_display == EGL_NO_DISPLAY)
+ {
+ g_debug ("GBM EGL init for %s failed: %s",
+ meta_gpu_kms_get_file_path (gpu_kms),
+ local_error->message);
+ init_secondary_gpu_data_cpu (renderer_gpu_data);
+ return renderer_gpu_data;
+ }
+
+ init_secondary_gpu_data (renderer_gpu_data);
return renderer_gpu_data;
}
@@ -4134,8 +4152,8 @@ on_gpu_added (MetaMonitorManager *monitor_manager,
}
static MetaGpuKms *
-choose_primary_gpu (MetaMonitorManager *manager,
- MetaRendererNative *renderer_native)
+choose_primary_gpu_unchecked (MetaMonitorManager *manager,
+ MetaRendererNative *renderer_native)
{
GList *gpus = meta_monitor_manager_get_gpus (manager);
GList *l;
@@ -4184,6 +4202,28 @@ choose_primary_gpu (MetaMonitorManager *manager,
return NULL;
}
+static MetaGpuKms *
+choose_primary_gpu (MetaMonitorManager *manager,
+ MetaRendererNative *renderer_native,
+ GError **error)
+{
+ MetaGpuKms *gpu_kms;
+ MetaRendererNativeGpuData *renderer_gpu_data;
+
+ gpu_kms = choose_primary_gpu_unchecked (manager, renderer_native);
+ renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
+ gpu_kms);
+ if (renderer_gpu_data->egl_display == EGL_NO_DISPLAY)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "The GPU %s chosen as primary is not supported by EGL.",
+ meta_gpu_kms_get_file_path (gpu_kms));
+ return NULL;
+ }
+
+ return gpu_kms;
+}
+
static gboolean
meta_renderer_native_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -4207,7 +4247,10 @@ meta_renderer_native_initable_init (GInitable *initable,
}
renderer_native->primary_gpu_kms = choose_primary_gpu (monitor_manager,
- renderer_native);
+ renderer_native,
+ error);
+ if (!renderer_native->primary_gpu_kms)
+ return FALSE;
return TRUE;
}
diff --git a/src/core/display.c b/src/core/display.c
index e1477d3..0de99ed 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -2236,7 +2236,7 @@ meta_display_get_tab_list (MetaDisplay *display,
MetaWindow *l_window = w->data;
if (l_window->wm_state_demands_attention &&
- l_window->workspace != workspace &&
+ !meta_window_located_on_workspace (l_window, workspace) &&
IN_TAB_CHAIN (l_window, type))
tab_list = g_list_prepend (tab_list, l_window);
}
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 478d4d8..a99899f 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -2214,6 +2214,8 @@ meta_keybindings_process_event (MetaDisplay *display,
{
case CLUTTER_BUTTON_PRESS:
case CLUTTER_BUTTON_RELEASE:
+ case CLUTTER_TOUCH_BEGIN:
+ case CLUTTER_TOUCH_END:
keys->overlay_key_only_pressed = FALSE;
return FALSE;
diff --git a/src/core/startup-notification.c b/src/core/startup-notification.c
index d2d0d13..4cd51ac 100644
--- a/src/core/startup-notification.c
+++ b/src/core/startup-notification.c
@@ -37,7 +37,7 @@
* OpenOffice or whatever seems to stop launching - people
* might decide they need to launch it again.
*/
-#define STARTUP_TIMEOUT 15000000
+#define STARTUP_TIMEOUT_MS 15000
enum
{
@@ -61,12 +61,19 @@ enum
enum
{
+ SEQ_COMPLETE,
+ N_SEQ_SIGNALS
+};
+
+enum
+{
CHANGED,
N_SIGNALS
};
static guint sn_signals[N_SIGNALS];
static GParamSpec *sn_props[N_PROPS];
+static guint seq_signals[N_SEQ_SIGNALS];
static GParamSpec *seq_props[N_SEQ_PROPS];
typedef struct
@@ -106,12 +113,26 @@ G_DEFINE_TYPE_WITH_PRIVATE (MetaStartupSequence,
static void meta_startup_notification_ensure_timeout (MetaStartupNotification *sn);
+static gboolean
+meta_startup_notification_has_pending_sequences (MetaStartupNotification *sn)
+{
+ GSList *l;
+
+ for (l = sn->startup_sequences; l; l = l->next)
+ {
+ if (!meta_startup_sequence_get_completed (l->data))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
meta_startup_notification_update_feedback (MetaStartupNotification *sn)
{
MetaDisplay *display = sn->display;
- if (sn->startup_sequences != NULL)
+ if (meta_startup_notification_has_pending_sequences (sn))
{
meta_topic (META_DEBUG_STARTUP,
"Setting busy cursor\n");
@@ -239,6 +260,14 @@ meta_startup_sequence_class_init (MetaStartupSequenceClass *klass)
object_class->set_property = meta_startup_sequence_set_property;
object_class->get_property = meta_startup_sequence_get_property;
+ seq_signals[SEQ_COMPLETE] =
+ g_signal_new ("complete",
+ META_TYPE_STARTUP_SEQUENCE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MetaStartupSequenceClass, complete),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
seq_props[PROP_SEQ_ID] =
g_param_spec_string ("id",
"ID",
@@ -317,7 +346,6 @@ meta_startup_sequence_get_timestamp (MetaStartupSequence *seq)
void
meta_startup_sequence_complete (MetaStartupSequence *seq)
{
- MetaStartupSequenceClass *klass;
MetaStartupSequencePrivate *priv;
g_return_if_fail (META_IS_STARTUP_SEQUENCE (seq));
@@ -327,10 +355,7 @@ meta_startup_sequence_complete (MetaStartupSequence *seq)
return;
priv->completed = TRUE;
- klass = META_STARTUP_SEQUENCE_GET_CLASS (seq);
-
- if (klass->complete)
- klass->complete (seq);
+ g_signal_emit (seq, seq_signals[SEQ_COMPLETE], 0);
}
gboolean
@@ -399,12 +424,22 @@ meta_startup_sequence_get_wmclass (MetaStartupSequence *seq)
return priv->wmclass;
}
+static void
+on_sequence_completed (MetaStartupSequence *seq,
+ MetaStartupNotification *sn)
+{
+ meta_startup_notification_update_feedback (sn);
+ g_signal_emit (sn, sn_signals[CHANGED], 0, seq);
+}
+
void
meta_startup_notification_add_sequence (MetaStartupNotification *sn,
MetaStartupSequence *seq)
{
sn->startup_sequences = g_slist_prepend (sn->startup_sequences,
g_object_ref (seq));
+ g_signal_connect (seq, "complete",
+ G_CALLBACK (on_sequence_completed), sn);
meta_startup_notification_ensure_timeout (sn);
meta_startup_notification_update_feedback (sn);
@@ -425,10 +460,10 @@ collect_timed_out_foreach (void *element,
meta_topic (META_DEBUG_STARTUP,
"Sequence used %" G_GINT64_FORMAT " ms vs. %d max: %s\n",
- elapsed, STARTUP_TIMEOUT,
+ elapsed, STARTUP_TIMEOUT_MS,
meta_startup_sequence_get_id (sequence));
- if (elapsed > STARTUP_TIMEOUT)
+ if (elapsed > STARTUP_TIMEOUT_MS)
ctod->list = g_slist_prepend (ctod->list, sequence);
}
@@ -440,7 +475,7 @@ startup_sequence_timeout (void *data)
GSList *l;
ctod.list = NULL;
- ctod.now = g_get_monotonic_time ();
+ ctod.now = g_get_monotonic_time () / 1000;
g_slist_foreach (sn->startup_sequences,
collect_timed_out_foreach,
&ctod);
@@ -494,6 +529,8 @@ meta_startup_notification_remove_sequence (MetaStartupNotification *sn,
sn->startup_sequences = g_slist_remove (sn->startup_sequences, seq);
meta_startup_notification_update_feedback (sn);
+ g_signal_handlers_disconnect_by_func (seq, on_sequence_completed, sn);
+
if (sn->startup_sequences == NULL &&
sn->startup_sequence_timeout != 0)
{
diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c
index 7695d86..099e87a 100644
--- a/src/wayland/meta-wayland-outputs.c
+++ b/src/wayland/meta-wayland-outputs.c
@@ -624,14 +624,14 @@ meta_xdg_output_manager_get_xdg_output (struct wl_client *client,
wl_resource_get_version (resource),
id);
- wl_resource_set_implementation (xdg_output_resource,
- &meta_xdg_output_interface,
- NULL, meta_xdg_output_destructor);
-
wayland_output = wl_resource_get_user_data (output);
if (!wayland_output)
return;
+ wl_resource_set_implementation (xdg_output_resource,
+ &meta_xdg_output_interface,
+ wayland_output, meta_xdg_output_destructor);
+
wayland_output->xdg_output_resources =
g_list_prepend (wayland_output->xdg_output_resources, xdg_output_resource);
diff --git a/src/x11/meta-startup-notification-x11.c b/src/x11/meta-startup-notification-x11.c
index d681492..99fcf45 100644
--- a/src/x11/meta-startup-notification-x11.c
+++ b/src/x11/meta-startup-notification-x11.c
@@ -151,7 +151,7 @@ meta_startup_sequence_x11_new (SnStartupSequence *seq)
{
gint64 timestamp;
- timestamp = sn_startup_sequence_get_timestamp (seq) * 1000;
+ timestamp = sn_startup_sequence_get_timestamp (seq);
return g_object_new (META_TYPE_STARTUP_SEQUENCE_X11,
"id", sn_startup_sequence_get_id (seq),
"icon-name", sn_startup_sequence_get_icon_name (seq),
--
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop