Compare commits
12 Commits
gbsneto/tt
...
3.29.4
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5ac7109aaa | ||
![]() |
7749f4d983 | ||
![]() |
22aea3dc67 | ||
![]() |
3d5784342d | ||
![]() |
fa9e330f2c | ||
![]() |
951219650f | ||
![]() |
49b23c7490 | ||
![]() |
644a618fb1 | ||
![]() |
1e3ac3cf2c | ||
![]() |
658c373580 | ||
![]() |
6d12d2eac2 | ||
![]() |
356cad094b |
14
NEWS
14
NEWS
@@ -1,10 +1,20 @@
|
||||
3.29.4
|
||||
======
|
||||
* Fix crash with parent-less modal dialogs [Olivier; #174]
|
||||
* Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera
|
||||
|
||||
Translators:
|
||||
Daniel Șerbănescu [ro]
|
||||
|
||||
3.29.3
|
||||
======
|
||||
* Fix Korean Hangul support on wayland [Changwoo; #152]
|
||||
* Improve support for proprietary Nvidia driver [Jonas; #790316]
|
||||
* Only upload HW cursor sprite to the GPU that will display them [Jonas; #77]
|
||||
* nvidia [Miguel; #2]
|
||||
* nvidia [Miguel; #782575]
|
||||
* Improve EGLstream support [Miguel; #2, #782575]
|
||||
* Remove MetaScreen to prepare for non-mandatary X11 dependency
|
||||
[Armin, Jonas; #759538]
|
||||
* Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834]
|
||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [29])
|
||||
m4_define([mutter_micro_version], [3])
|
||||
m4_define([mutter_micro_version], [4])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@@ -88,7 +88,6 @@ MUTTER_PC_MODULES="
|
||||
cairo >= 1.10.0
|
||||
gsettings-desktop-schemas >= 3.21.4
|
||||
json-glib-1.0
|
||||
upower-glib >= 0.99.0
|
||||
gnome-desktop-3.0
|
||||
xcomposite >= 0.2
|
||||
xcursor
|
||||
|
100
po/ro.po
100
po/ro.po
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.ro\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-06-07 13:00+0000\n"
|
||||
"PO-Revision-Date: 2018-06-17 21:51+0300\n"
|
||||
"POT-Creation-Date: 2018-07-13 13:37+0000\n"
|
||||
"PO-Revision-Date: 2018-07-17 18:56+0300\n"
|
||||
"Last-Translator: Florentina Mușat <florentina.musat.28 [at] gmail [dot] "
|
||||
"com>\n"
|
||||
"Language-Team: Gnome Romanian Translation Team\n"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2);;\n"
|
||||
"X-Generator: Poedit 2.0.8\n"
|
||||
"X-Generator: Poedit 2.0.9\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
@@ -550,22 +550,22 @@ msgstr "Comută monitorul"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Arată ajutorul virtual"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Afișaj integrat"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Necunoscut"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Afișaj necunoscut"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:936
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@@ -580,66 +580,65 @@ msgstr ""
|
||||
"Un alt administrator de ferestre de compunere rulează deja pe ecranul %i pe "
|
||||
"afișajul „%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Eveniment sonor"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Dezactivează conexiunea la administratorul de sesiune"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Înlocuiește administratorul de ferestre curent"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifică ID-ul administrării de sesiune"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Ecranul X ce va fi folosit"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inițializează sesiunea din fișierul salvat"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Realizează apelurile X sincron"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Rulează ca un compunător wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Rulează ca un compunător imbricat"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Rulează compunătorul wayland fără a porni Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Rulează ca server de afișare și nu ca server imbricat"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Rulează cu backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s” nu răspunde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplicația nu răspunde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -647,11 +646,11 @@ msgstr ""
|
||||
"Puteți alege între a aștepta pentru câteva secunde ca aplicația să continue "
|
||||
"sau a forța terminarea aplicației."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forțează închiderea"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Așteaptă"
|
||||
|
||||
@@ -679,26 +678,11 @@ msgstr "Afișează versiunea"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Modul Mutter de utilizat"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spațiu de lucru %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să utilizați "
|
||||
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||
"ferestre curent."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||
@@ -708,7 +692,31 @@ msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Comutator de mod: modul %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să utilizați "
|
||||
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||
"ferestre curent."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Nu s-a putut inițializa GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@@ -716,7 +724,7 @@ msgstr ""
|
||||
"Aceste ferestre nu suportă „salvează configurarea curentă” și vor trebui "
|
||||
"repornite manual următoarea dată când vă veți autentifica."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (pe %s)"
|
||||
|
@@ -17,6 +17,7 @@ dist_stacking_DATA = \
|
||||
$(srcdir)/tests/stacking/minimized.metatest \
|
||||
$(srcdir)/tests/stacking/mixed-windows.metatest \
|
||||
$(srcdir)/tests/stacking/set-parent.metatest \
|
||||
$(srcdir)/tests/stacking/set-parent-exported.metatest \
|
||||
$(srcdir)/tests/stacking/override-redirect.metatest
|
||||
|
||||
mutter-all.test: tests/mutter-all.test.in
|
||||
|
@@ -84,6 +84,8 @@ struct _MetaBackendClass
|
||||
const char *variants,
|
||||
const char *options);
|
||||
|
||||
gboolean (* is_lid_closed) (MetaBackend *backend);
|
||||
|
||||
struct xkb_keymap * (* get_keymap) (MetaBackend *backend);
|
||||
|
||||
xkb_layout_index_t (* get_keymap_layout_group) (MetaBackend *backend);
|
||||
@@ -144,6 +146,8 @@ struct xkb_keymap * meta_backend_get_keymap (MetaBackend *backend);
|
||||
|
||||
xkb_layout_index_t meta_backend_get_keymap_layout_group (MetaBackend *backend);
|
||||
|
||||
gboolean meta_backend_is_lid_closed (MetaBackend *backend);
|
||||
|
||||
void meta_backend_update_last_device (MetaBackend *backend,
|
||||
int device_id);
|
||||
|
||||
|
@@ -58,6 +58,7 @@ enum
|
||||
KEYMAP_CHANGED,
|
||||
KEYMAP_LAYOUT_GROUP_CHANGED,
|
||||
LAST_DEVICE_CHANGED,
|
||||
LID_IS_CLOSED_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
};
|
||||
@@ -111,7 +112,10 @@ struct _MetaBackendPrivate
|
||||
MetaPointerConstraint *client_pointer_constraint;
|
||||
MetaDnd *dnd;
|
||||
|
||||
UpClient *up_client;
|
||||
guint upower_watch_id;
|
||||
GDBusProxy *upower_proxy;
|
||||
gboolean lid_is_closed;
|
||||
|
||||
guint sleep_signal_id;
|
||||
GCancellable *cancellable;
|
||||
GDBusConnection *system_bus;
|
||||
@@ -141,12 +145,14 @@ meta_backend_finalize (GObject *object)
|
||||
g_clear_object (&priv->dbus_session_watcher);
|
||||
#endif
|
||||
|
||||
g_object_unref (priv->up_client);
|
||||
if (priv->sleep_signal_id)
|
||||
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
|
||||
if (priv->upower_watch_id)
|
||||
g_bus_unwatch_name (priv->upower_watch_id);
|
||||
g_cancellable_cancel (priv->cancellable);
|
||||
g_clear_object (&priv->cancellable);
|
||||
g_clear_object (&priv->system_bus);
|
||||
g_clear_object (&priv->upower_proxy);
|
||||
|
||||
if (priv->device_update_idle_id)
|
||||
g_source_remove (priv->device_update_idle_id);
|
||||
@@ -503,6 +509,144 @@ meta_backend_real_get_relative_motion_deltas (MetaBackend *backend,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_real_is_lid_closed (MetaBackend *backend)
|
||||
{
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
return priv->lid_is_closed;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_backend_is_lid_closed (MetaBackend *backend)
|
||||
{
|
||||
return META_BACKEND_GET_CLASS (backend)->is_lid_closed (backend);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_properties_changed (GDBusProxy *proxy,
|
||||
GVariant *changed_properties,
|
||||
GStrv invalidated_properties,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = user_data;
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
GVariant *v;
|
||||
gboolean lid_is_closed;
|
||||
|
||||
v = g_variant_lookup_value (changed_properties,
|
||||
"LidIsClosed",
|
||||
G_VARIANT_TYPE_BOOLEAN);
|
||||
if (!v)
|
||||
return;
|
||||
|
||||
lid_is_closed = g_variant_get_boolean (v);
|
||||
g_variant_unref (v);
|
||||
|
||||
if (lid_is_closed == priv->lid_is_closed)
|
||||
return;
|
||||
|
||||
priv->lid_is_closed = lid_is_closed;
|
||||
g_signal_emit (backend, signals[LID_IS_CLOSED_CHANGED], 0,
|
||||
priv->lid_is_closed);
|
||||
|
||||
if (lid_is_closed)
|
||||
return;
|
||||
|
||||
meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ());
|
||||
}
|
||||
|
||||
static void
|
||||
upower_ready_cb (GObject *source_object,
|
||||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend;
|
||||
MetaBackendPrivate *priv;
|
||||
GDBusProxy *proxy;
|
||||
GError *error = NULL;
|
||||
GVariant *v;
|
||||
|
||||
proxy = g_dbus_proxy_new_finish (res, &error);
|
||||
if (!proxy)
|
||||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
g_warning ("Failed to create UPower proxy: %s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
backend = META_BACKEND (user_data);
|
||||
priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
priv->upower_proxy = proxy;
|
||||
g_signal_connect (proxy, "g-properties-changed",
|
||||
G_CALLBACK (upower_properties_changed), backend);
|
||||
|
||||
v = g_dbus_proxy_get_cached_property (proxy, "LidIsClosed");
|
||||
if (!v)
|
||||
return;
|
||||
priv->lid_is_closed = g_variant_get_boolean (v);
|
||||
g_variant_unref (v);
|
||||
|
||||
if (priv->lid_is_closed)
|
||||
{
|
||||
g_signal_emit (backend, signals[LID_IS_CLOSED_CHANGED], 0,
|
||||
priv->lid_is_closed);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
upower_appeared (GDBusConnection *connection,
|
||||
const gchar *name,
|
||||
const gchar *name_owner,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (user_data);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
g_dbus_proxy_new (connection,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL,
|
||||
"org.freedesktop.UPower",
|
||||
"/org/freedesktop/UPower",
|
||||
"org.freedesktop.UPower",
|
||||
priv->cancellable,
|
||||
upower_ready_cb,
|
||||
backend);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_vanished (GDBusConnection *connection,
|
||||
const gchar *name,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (user_data);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
g_clear_object (&priv->upower_proxy);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_constructed (GObject *object)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (object);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
MetaBackendClass *backend_class =
|
||||
META_BACKEND_GET_CLASS (backend);
|
||||
|
||||
if (backend_class->is_lid_closed != meta_backend_real_is_lid_closed)
|
||||
return;
|
||||
|
||||
priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
|
||||
"org.freedesktop.UPower",
|
||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||
upower_appeared,
|
||||
upower_vanished,
|
||||
backend,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_class_init (MetaBackendClass *klass)
|
||||
{
|
||||
@@ -510,6 +654,7 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_backend_finalize;
|
||||
object_class->constructed = meta_backend_constructed;
|
||||
|
||||
klass->post_init = meta_backend_real_post_init;
|
||||
klass->create_cursor_renderer = meta_backend_real_create_cursor_renderer;
|
||||
@@ -517,6 +662,7 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
klass->ungrab_device = meta_backend_real_ungrab_device;
|
||||
klass->select_stage_events = meta_backend_real_select_stage_events;
|
||||
klass->get_relative_motion_deltas = meta_backend_real_get_relative_motion_deltas;
|
||||
klass->is_lid_closed = meta_backend_real_is_lid_closed;
|
||||
|
||||
signals[KEYMAP_CHANGED] =
|
||||
g_signal_new ("keymap-changed",
|
||||
@@ -539,6 +685,13 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
signals[LID_IS_CLOSED_CHANGED] =
|
||||
g_signal_new ("lid-is-closed-changed",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
||||
|
||||
mutter_stage_views = g_getenv ("MUTTER_STAGE_VIEWS");
|
||||
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
|
||||
@@ -562,17 +715,6 @@ meta_backend_create_renderer (MetaBackend *backend,
|
||||
return META_BACKEND_GET_CLASS (backend)->create_renderer (backend, error);
|
||||
}
|
||||
|
||||
static void
|
||||
lid_is_closed_changed_cb (UpClient *client,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
if (up_client_get_lid_is_closed (client))
|
||||
return;
|
||||
|
||||
meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ());
|
||||
}
|
||||
|
||||
static void
|
||||
prepare_for_sleep_cb (GDBusConnection *connection,
|
||||
const gchar *sender_name,
|
||||
@@ -643,10 +785,6 @@ meta_backend_initable_init (GInitable *initable,
|
||||
|
||||
priv->dnd = g_object_new (META_TYPE_DND, NULL);
|
||||
|
||||
priv->up_client = up_client_new ();
|
||||
g_signal_connect (priv->up_client, "notify::lid-is-closed",
|
||||
G_CALLBACK (lid_is_closed_changed_cb), NULL);
|
||||
|
||||
priv->cancellable = g_cancellable_new ();
|
||||
g_bus_get (G_BUS_TYPE_SYSTEM,
|
||||
priv->cancellable,
|
||||
|
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "backends/meta-monitor-config-manager.h"
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-monitor-config-migration.h"
|
||||
#include "backends/meta-monitor-config-store.h"
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
@@ -326,6 +327,15 @@ meta_monitor_config_manager_assign (MetaMonitorManager *manager,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_lid_closed (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
MetaBackend *backend;
|
||||
|
||||
backend = meta_monitor_manager_get_backend (monitor_manager);
|
||||
return meta_backend_is_lid_closed (backend);
|
||||
}
|
||||
|
||||
MetaMonitorsConfigKey *
|
||||
meta_create_monitors_config_key_for_current_state (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
@@ -340,7 +350,7 @@ meta_create_monitors_config_key_for_current_state (MetaMonitorManager *monitor_m
|
||||
MetaMonitorSpec *monitor_spec;
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
is_lid_closed (monitor_manager))
|
||||
continue;
|
||||
|
||||
monitor_spec = meta_monitor_spec_clone (meta_monitor_get_spec (monitor));
|
||||
@@ -455,7 +465,7 @@ find_primary_monitor (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
MetaMonitor *monitor;
|
||||
|
||||
if (meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
if (is_lid_closed (monitor_manager))
|
||||
{
|
||||
monitor = meta_monitor_manager_get_primary_monitor (monitor_manager);
|
||||
if (monitor && !meta_monitor_is_laptop_panel (monitor))
|
||||
@@ -598,7 +608,7 @@ meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_mana
|
||||
continue;
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
is_lid_closed (monitor_manager))
|
||||
continue;
|
||||
|
||||
logical_monitor_config =
|
||||
@@ -1252,7 +1262,7 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
MetaMonitor *monitor = l->data;
|
||||
MetaMonitorSpec *monitor_spec;
|
||||
|
||||
if (meta_monitor_manager_is_lid_closed (monitor_manager) &&
|
||||
if (is_lid_closed (monitor_manager) &&
|
||||
meta_monitor_is_laptop_panel (monitor))
|
||||
continue;
|
||||
|
||||
|
@@ -37,7 +37,6 @@
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
#include <libgnome-desktop/gnome-pnp-ids.h>
|
||||
#include <libupower-glib/upower.h>
|
||||
|
||||
#include "display-private.h"
|
||||
#include "stack-tracker.h"
|
||||
@@ -179,7 +178,6 @@ struct _MetaMonitorManager
|
||||
MetaMonitorConfigManager *config_manager;
|
||||
|
||||
GnomePnpIds *pnp_ids;
|
||||
UpClient *up_client;
|
||||
|
||||
gulong experimental_features_changed_handler_id;
|
||||
|
||||
@@ -195,8 +193,6 @@ struct _MetaMonitorManagerClass
|
||||
GBytes* (*read_edid) (MetaMonitorManager *,
|
||||
MetaOutput *);
|
||||
|
||||
gboolean (*is_lid_closed) (MetaMonitorManager *);
|
||||
|
||||
void (*ensure_initial_config) (MetaMonitorManager *);
|
||||
|
||||
gboolean (*apply_monitors_config) (MetaMonitorManager *,
|
||||
@@ -335,8 +331,6 @@ void meta_monitor_manager_update_logical_state (MetaMonitorManager
|
||||
void meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
|
||||
MetaMonitorsConfig *config);
|
||||
|
||||
gboolean meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager);
|
||||
|
||||
void meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager);
|
||||
|
||||
gboolean meta_monitor_manager_is_headless (MetaMonitorManager *manager);
|
||||
|
@@ -36,6 +36,7 @@
|
||||
#include "util-private.h"
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include "edid.h"
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-crtc.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor.h"
|
||||
@@ -346,30 +347,14 @@ meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager)
|
||||
}
|
||||
|
||||
static void
|
||||
lid_is_closed_changed (UpClient *client,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
lid_is_closed_changed (MetaBackend *backend,
|
||||
gboolean lid_is_closed,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaMonitorManager *manager = user_data;
|
||||
|
||||
meta_monitor_manager_lid_is_closed_changed (manager);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_monitor_manager_real_is_lid_closed (MetaMonitorManager *manager)
|
||||
{
|
||||
if (!manager->up_client)
|
||||
return FALSE;
|
||||
|
||||
return up_client_get_lid_is_closed (manager->up_client);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager)
|
||||
{
|
||||
return META_MONITOR_MANAGER_GET_CLASS (manager)->is_lid_closed (manager);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_monitor_manager_is_headless (MetaMonitorManager *manager)
|
||||
{
|
||||
@@ -719,8 +704,6 @@ static void
|
||||
meta_monitor_manager_constructed (GObject *object)
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
|
||||
MetaMonitorManagerClass *manager_class =
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
MetaBackend *backend = manager->backend;
|
||||
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||
|
||||
@@ -730,13 +713,6 @@ meta_monitor_manager_constructed (GObject *object)
|
||||
G_CALLBACK (experimental_features_changed),
|
||||
manager);
|
||||
|
||||
if (manager_class->is_lid_closed == meta_monitor_manager_real_is_lid_closed)
|
||||
{
|
||||
manager->up_client = up_client_new ();
|
||||
g_signal_connect_object (manager->up_client, "notify::lid-is-closed",
|
||||
G_CALLBACK (lid_is_closed_changed), manager, 0);
|
||||
}
|
||||
|
||||
g_signal_connect_object (manager, "notify::power-save-mode",
|
||||
G_CALLBACK (power_save_mode_changed), manager, 0);
|
||||
|
||||
@@ -745,6 +721,11 @@ meta_monitor_manager_constructed (GObject *object)
|
||||
G_CALLBACK (orientation_changed),
|
||||
manager, 0);
|
||||
|
||||
g_signal_connect_object (backend,
|
||||
"lid-is-closed-changed",
|
||||
G_CALLBACK (lid_is_closed_changed),
|
||||
manager, 0);
|
||||
|
||||
manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
|
||||
|
||||
initialize_dbus_interface (manager);
|
||||
@@ -776,7 +757,6 @@ meta_monitor_manager_dispose (GObject *object)
|
||||
}
|
||||
|
||||
g_clear_object (&manager->config_manager);
|
||||
g_clear_object (&manager->up_client);
|
||||
|
||||
G_OBJECT_CLASS (meta_monitor_manager_parent_class)->dispose (object);
|
||||
}
|
||||
@@ -844,7 +824,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
|
||||
|
||||
klass->get_edid_file = meta_monitor_manager_real_get_edid_file;
|
||||
klass->read_edid = meta_monitor_manager_real_read_edid;
|
||||
klass->is_lid_closed = meta_monitor_manager_real_is_lid_closed;
|
||||
|
||||
signals[MONITORS_CHANGED_INTERNAL] =
|
||||
g_signal_new ("monitors-changed-internal",
|
||||
@@ -1582,7 +1561,7 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
|
||||
}
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (manager))
|
||||
meta_backend_is_lid_closed (manager->backend))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Refusing to activate a closed laptop panel");
|
||||
@@ -2984,7 +2963,7 @@ meta_monitor_manager_switch_config (MetaMonitorManager *manager,
|
||||
gboolean
|
||||
meta_monitor_manager_can_switch_config (MetaMonitorManager *manager)
|
||||
{
|
||||
return (!meta_monitor_manager_is_lid_closed (manager) &&
|
||||
return (!meta_backend_is_lid_closed (manager->backend) &&
|
||||
g_list_length (manager->monitors) > 1);
|
||||
}
|
||||
|
||||
|
@@ -29,7 +29,6 @@
|
||||
|
||||
#include <meta/main.h>
|
||||
#include <clutter/evdev/clutter-evdev.h>
|
||||
#include <libupower-glib/upower.h>
|
||||
|
||||
#include "clutter/egl/clutter-egl.h"
|
||||
#include "clutter/evdev/clutter-evdev.h"
|
||||
|
@@ -778,6 +778,18 @@ meta_stack_tracker_configure_event (MetaStackTracker *tracker,
|
||||
stack_tracker_event_received (tracker, &op);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_stack_tracker_is_guard_window (MetaStackTracker *tracker,
|
||||
uint64_t stack_id)
|
||||
{
|
||||
MetaX11Display *x11_display = tracker->display->x11_display;
|
||||
|
||||
if (!x11_display)
|
||||
return FALSE;
|
||||
|
||||
return stack_id == x11_display->guard_window;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_stack_tracker_get_stack:
|
||||
* @tracker: a #MetaStackTracker
|
||||
@@ -1063,7 +1075,6 @@ meta_stack_tracker_lower (MetaStackTracker *tracker,
|
||||
static void
|
||||
meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
|
||||
{
|
||||
MetaWindow *window;
|
||||
guint64 *stack;
|
||||
int n_windows, i;
|
||||
int topmost_non_or;
|
||||
@@ -1072,6 +1083,8 @@ meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
|
||||
|
||||
for (i = n_windows - 1; i >= 0; i--)
|
||||
{
|
||||
MetaWindow *window;
|
||||
|
||||
window = meta_display_lookup_stack_id (tracker->display, stack[i]);
|
||||
if (window && window->layer != META_LAYER_OVERRIDE_REDIRECT)
|
||||
break;
|
||||
@@ -1081,6 +1094,11 @@ meta_stack_tracker_keep_override_redirect_on_top (MetaStackTracker *tracker)
|
||||
|
||||
for (i -= 1; i >= 0; i--)
|
||||
{
|
||||
MetaWindow *window;
|
||||
|
||||
if (meta_stack_tracker_is_guard_window (tracker, stack[i]))
|
||||
break;
|
||||
|
||||
window = meta_display_lookup_stack_id (tracker->display, stack[i]);
|
||||
if (window && window->layer == META_LAYER_OVERRIDE_REDIRECT)
|
||||
{
|
||||
|
@@ -195,6 +195,7 @@ enum
|
||||
UNMANAGED,
|
||||
SIZE_CHANGED,
|
||||
POSITION_CHANGED,
|
||||
SHOWN,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@@ -642,6 +643,20 @@ meta_window_class_init (MetaWindowClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/**
|
||||
* MetaWindow::shown:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* This is emitted after a window has been shown.
|
||||
*/
|
||||
window_signals[SHOWN] =
|
||||
g_signal_new ("shown",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/**
|
||||
* MetaWindow::size-changed:
|
||||
* @window: a #MetaWindow
|
||||
@@ -2553,6 +2568,9 @@ meta_window_show (MetaWindow *window)
|
||||
g_signal_emit_by_name (window->display, "window-demands-attention",
|
||||
window);
|
||||
}
|
||||
|
||||
if (did_show)
|
||||
g_signal_emit (window, window_signals[SHOWN], 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -26,10 +26,27 @@
|
||||
struct _MetaBackendTest
|
||||
{
|
||||
MetaBackendX11Nested parent;
|
||||
|
||||
gboolean is_lid_closed;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaBackendTest, meta_backend_test, META_TYPE_BACKEND_X11_NESTED)
|
||||
|
||||
void
|
||||
meta_backend_test_set_is_lid_closed (MetaBackendTest *backend_test,
|
||||
gboolean is_lid_closed)
|
||||
{
|
||||
backend_test->is_lid_closed = is_lid_closed;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_test_is_lid_closed (MetaBackend *backend)
|
||||
{
|
||||
MetaBackendTest *backend_test = META_BACKEND_TEST (backend);
|
||||
|
||||
return backend_test->is_lid_closed;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_test_init (MetaBackendTest *backend_test)
|
||||
{
|
||||
@@ -50,4 +67,5 @@ meta_backend_test_class_init (MetaBackendTestClass *klass)
|
||||
MetaBackendClass *backend_class = META_BACKEND_CLASS (klass);
|
||||
|
||||
backend_class->create_monitor_manager = meta_backend_test_create_monitor_manager;
|
||||
backend_class->is_lid_closed = meta_backend_test_is_lid_closed;
|
||||
}
|
||||
|
@@ -26,4 +26,7 @@
|
||||
G_DECLARE_FINAL_TYPE (MetaBackendTest, meta_backend_test,
|
||||
META, BACKEND_TEST, MetaBackendX11Nested)
|
||||
|
||||
void meta_backend_test_set_is_lid_closed (MetaBackendTest *backend_test,
|
||||
gboolean is_lid_closed);
|
||||
|
||||
#endif /* META_BACKEND_TEST_H */
|
||||
|
@@ -33,7 +33,6 @@ struct _MetaMonitorManagerTest
|
||||
|
||||
MetaGpu *gpu;
|
||||
|
||||
gboolean is_lid_closed;
|
||||
gboolean handles_transforms;
|
||||
|
||||
int tiled_monitor_count;
|
||||
@@ -81,13 +80,6 @@ meta_monitor_manager_test_emulate_hotplug (MetaMonitorManagerTest *manager_test,
|
||||
g_free (old_test_setup);
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_manager_test_set_is_lid_closed (MetaMonitorManagerTest *manager_test,
|
||||
gboolean is_lid_closed)
|
||||
{
|
||||
manager_test->is_lid_closed = is_lid_closed;
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_manager_test_set_handles_transforms (MetaMonitorManagerTest *manager_test,
|
||||
gboolean handles_transforms)
|
||||
@@ -127,14 +119,6 @@ meta_monitor_manager_test_read_current (MetaMonitorManager *manager)
|
||||
manager_test->test_setup->outputs);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_monitor_manager_test_is_lid_closed (MetaMonitorManager *manager)
|
||||
{
|
||||
MetaMonitorManagerTest *manager_test = META_MONITOR_MANAGER_TEST (manager);
|
||||
|
||||
return manager_test->is_lid_closed;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_monitor_manager_test_ensure_initial_config (MetaMonitorManager *manager)
|
||||
{
|
||||
@@ -496,7 +480,6 @@ meta_monitor_manager_test_class_init (MetaMonitorManagerTestClass *klass)
|
||||
|
||||
object_class->dispose = meta_monitor_manager_test_dispose;
|
||||
|
||||
manager_class->is_lid_closed = meta_monitor_manager_test_is_lid_closed;
|
||||
manager_class->ensure_initial_config = meta_monitor_manager_test_ensure_initial_config;
|
||||
manager_class->apply_monitors_config = meta_monitor_manager_test_apply_monitors_config;
|
||||
manager_class->tiled_monitor_added = meta_monitor_manager_test_tiled_monitor_added;
|
||||
|
@@ -49,9 +49,6 @@ MetaGpu * meta_monitor_manager_test_get_gpu (MetaMonitorManagerTest *manager_tes
|
||||
void meta_monitor_manager_test_emulate_hotplug (MetaMonitorManagerTest *manager_test,
|
||||
MetaMonitorTestSetup *test_setup);
|
||||
|
||||
void meta_monitor_manager_test_set_is_lid_closed (MetaMonitorManagerTest *manager_test,
|
||||
gboolean is_lid_closed);
|
||||
|
||||
void meta_monitor_manager_test_set_handles_transforms (MetaMonitorManagerTest *manager_test,
|
||||
gboolean handles_transforms);
|
||||
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include "backends/meta-monitor-config-migration.h"
|
||||
#include "backends/meta-monitor-config-store.h"
|
||||
#include "backends/meta-output.h"
|
||||
#include "meta-backend-test.h"
|
||||
#include "tests/meta-monitor-manager-test.h"
|
||||
#include "tests/monitor-test-utils.h"
|
||||
#include "tests/test-utils.h"
|
||||
@@ -2351,15 +2352,13 @@ meta_test_monitor_lid_switch_config (void)
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerTest *monitor_manager_test =
|
||||
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
meta_monitor_manager_lid_is_closed_changed (monitor_manager);
|
||||
|
||||
test_case.expect.logical_monitors[0] = (MonitorTestCaseLogicalMonitor) {
|
||||
@@ -2375,7 +2374,7 @@ meta_test_monitor_lid_switch_config (void)
|
||||
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
meta_monitor_manager_lid_is_closed_changed (monitor_manager);
|
||||
|
||||
test_case.expect.logical_monitors[0] = (MonitorTestCaseLogicalMonitor) {
|
||||
@@ -2524,17 +2523,15 @@ meta_test_monitor_lid_opened_config (void)
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerTest *monitor_manager_test =
|
||||
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
meta_monitor_manager_lid_is_closed_changed (monitor_manager);
|
||||
|
||||
test_case.expect.n_logical_monitors = 2;
|
||||
@@ -2630,14 +2627,10 @@ meta_test_monitor_lid_closed_no_external (void)
|
||||
};
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerTest *monitor_manager_test =
|
||||
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
@@ -2770,10 +2763,6 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
};
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerTest *monitor_manager_test =
|
||||
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
|
||||
/*
|
||||
* The first part of this test emulate the following:
|
||||
@@ -2784,7 +2773,7 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
@@ -2813,7 +2802,7 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
@@ -2836,7 +2825,7 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
@@ -2862,7 +2851,7 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
|
||||
@@ -2870,7 +2859,7 @@ meta_test_monitor_lid_closed_with_hotplugged_external (void)
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NO_STORED);
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
emulate_hotplug (test_setup);
|
||||
check_monitor_configuration (&test_case);
|
||||
}
|
||||
@@ -5357,10 +5346,6 @@ meta_test_monitor_custom_lid_switch_config (void)
|
||||
};
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerTest *monitor_manager_test =
|
||||
META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NONE);
|
||||
@@ -5399,7 +5384,7 @@ meta_test_monitor_custom_lid_switch_config (void)
|
||||
test_case.expect.logical_monitors[0].transform = META_MONITOR_TRANSFORM_90;
|
||||
test_case.expect.n_logical_monitors = 1;
|
||||
test_case.expect.screen_width = 768;
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), TRUE);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NONE);
|
||||
@@ -5420,7 +5405,7 @@ meta_test_monitor_custom_lid_switch_config (void)
|
||||
test_case.expect.logical_monitors[1].transform = META_MONITOR_TRANSFORM_270;
|
||||
test_case.expect.n_logical_monitors = 2;
|
||||
test_case.expect.screen_width = 1024 + 768;
|
||||
meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, FALSE);
|
||||
meta_backend_test_set_is_lid_closed (META_BACKEND_TEST (backend), FALSE);
|
||||
|
||||
test_setup = create_monitor_test_setup (&test_case,
|
||||
MONITOR_TEST_FLAG_NONE);
|
||||
|
15
src/tests/stacking/set-parent-exported.metatest
Normal file
15
src/tests/stacking/set-parent-exported.metatest
Normal file
@@ -0,0 +1,15 @@
|
||||
new_client 1 wayland
|
||||
create 1/1
|
||||
show 1/1
|
||||
create 1/2
|
||||
show 1/2
|
||||
wait
|
||||
|
||||
set_parent_exported 1/1 2
|
||||
wait
|
||||
assert_stacking 1/2 1/1
|
||||
|
||||
local_activate 1/2
|
||||
assert_stacking 1/2 1/1
|
||||
|
||||
destroy 1/2
|
@@ -20,6 +20,7 @@
|
||||
#include <gio/gunixinputstream.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gdk/gdkwayland.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -31,6 +32,19 @@ GHashTable *windows;
|
||||
|
||||
static void read_next_line (GDataInputStream *in);
|
||||
|
||||
static void
|
||||
window_export_handle_cb (GdkWindow *window,
|
||||
const char *handle_str,
|
||||
gpointer user_data)
|
||||
{
|
||||
GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (user_data));
|
||||
|
||||
if (!gdk_wayland_window_set_transient_for_exported (gdk_window,
|
||||
(gchar *) handle_str))
|
||||
g_print ("Fail to set transient_for exported window handle %s", handle_str);
|
||||
gdk_window_set_modal_hint (gdk_window, TRUE);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
lookup_window (const char *window_id)
|
||||
{
|
||||
@@ -41,16 +55,6 @@ lookup_window (const char *window_id)
|
||||
return window;
|
||||
}
|
||||
|
||||
static void
|
||||
on_after_paint (GdkFrameClock *clock,
|
||||
GMainLoop *loop)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (clock,
|
||||
(gpointer) on_after_paint,
|
||||
loop);
|
||||
g_main_loop_quit (loop);
|
||||
}
|
||||
|
||||
static void
|
||||
process_line (const char *line)
|
||||
{
|
||||
@@ -140,7 +144,7 @@ process_line (const char *line)
|
||||
{
|
||||
if (argc != 3)
|
||||
{
|
||||
g_print ("usage: menu <window-id> <parent-id>");
|
||||
g_print ("usage: set_parent <window-id> <parent-id>");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -161,6 +165,35 @@ process_line (const char *line)
|
||||
gtk_window_set_transient_for (GTK_WINDOW (window),
|
||||
GTK_WINDOW (parent_window));
|
||||
}
|
||||
else if (strcmp (argv[0], "set_parent_exported") == 0)
|
||||
{
|
||||
if (argc != 3)
|
||||
{
|
||||
g_print ("usage: set_parent_exported <window-id> <parent-id>");
|
||||
goto out;
|
||||
}
|
||||
|
||||
GtkWidget *window = lookup_window (argv[1]);
|
||||
if (!window)
|
||||
{
|
||||
g_print ("unknown window %s", argv[1]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
GtkWidget *parent_window = lookup_window (argv[2]);
|
||||
if (!parent_window)
|
||||
{
|
||||
g_print ("unknown parent window %s", argv[2]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
GdkWindow *parent_gdk_window = gtk_widget_get_window (parent_window);
|
||||
if (!gdk_wayland_window_export_handle (parent_gdk_window,
|
||||
window_export_handle_cb,
|
||||
window,
|
||||
NULL))
|
||||
g_print ("Fail to export handle for window id %s", argv[2]);
|
||||
}
|
||||
else if (strcmp (argv[0], "show") == 0)
|
||||
{
|
||||
if (argc != 2)
|
||||
@@ -170,25 +203,11 @@ process_line (const char *line)
|
||||
}
|
||||
|
||||
GtkWidget *window = lookup_window (argv[1]);
|
||||
GdkWindow *gdk_window = gtk_widget_get_window (window);
|
||||
if (!window)
|
||||
goto out;
|
||||
|
||||
gtk_widget_show (window);
|
||||
|
||||
/* When a Wayland client, we cannot be really sure that the window has
|
||||
* been mappable until after we have painted. So, in order to have the
|
||||
* test runner rely on the "show" command to have done what the client
|
||||
* needs to do in order for a window to be mappable compositor side, lets
|
||||
* wait with returning until after the first frame.
|
||||
*/
|
||||
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (gdk_window);
|
||||
GMainLoop *loop = g_main_loop_new (NULL, FALSE);
|
||||
g_signal_connect (frame_clock, "after-paint",
|
||||
G_CALLBACK (on_after_paint),
|
||||
loop);
|
||||
g_main_loop_run (loop);
|
||||
g_main_loop_unref (loop);
|
||||
gdk_display_sync (gdk_display_get_default ());
|
||||
}
|
||||
else if (strcmp (argv[0], "hide") == 0)
|
||||
{
|
||||
|
@@ -327,6 +327,39 @@ test_case_check_xserver_stacking (TestCase *test,
|
||||
return *error == NULL;
|
||||
}
|
||||
|
||||
typedef struct _WaitForShownData
|
||||
{
|
||||
GMainLoop *loop;
|
||||
MetaWindow *window;
|
||||
guint shown_handler_id;
|
||||
} WaitForShownData;
|
||||
|
||||
static void
|
||||
on_window_shown (MetaWindow *window,
|
||||
WaitForShownData *data)
|
||||
{
|
||||
g_main_loop_quit (data->loop);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
test_case_wait_for_showing_before_redraw (gpointer user_data)
|
||||
{
|
||||
WaitForShownData *data = user_data;
|
||||
|
||||
if (meta_window_is_hidden (data->window))
|
||||
{
|
||||
data->shown_handler_id = g_signal_connect (data->window, "shown",
|
||||
G_CALLBACK (on_window_shown),
|
||||
data);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_main_loop_quit (data->loop);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
test_case_do (TestCase *test,
|
||||
int argc,
|
||||
@@ -390,7 +423,8 @@ test_case_do (TestCase *test,
|
||||
NULL))
|
||||
return FALSE;
|
||||
}
|
||||
else if (strcmp (argv[0], "set_parent") == 0)
|
||||
else if (strcmp (argv[0], "set_parent") == 0 ||
|
||||
strcmp (argv[0], "set_parent_exported") == 0)
|
||||
{
|
||||
if (argc != 3)
|
||||
BAD_COMMAND("usage: %s <client-id>/<window-id> <parent-window-id>",
|
||||
@@ -402,13 +436,42 @@ test_case_do (TestCase *test,
|
||||
return FALSE;
|
||||
|
||||
if (!test_client_do (client, error,
|
||||
"set_parent", window_id,
|
||||
argv[0], window_id,
|
||||
argv[2],
|
||||
NULL))
|
||||
return FALSE;
|
||||
}
|
||||
else if (strcmp (argv[0], "show") == 0 ||
|
||||
strcmp (argv[0], "hide") == 0 ||
|
||||
else if (strcmp (argv[0], "show") == 0)
|
||||
{
|
||||
if (argc != 2)
|
||||
BAD_COMMAND("usage: %s <client-id>/<window-id>", argv[0]);
|
||||
|
||||
TestClient *client;
|
||||
const char *window_id;
|
||||
if (!test_case_parse_window_id (test, argv[1], &client, &window_id, error))
|
||||
return FALSE;
|
||||
|
||||
if (!test_client_do (client, error, argv[0], window_id, NULL))
|
||||
return FALSE;
|
||||
|
||||
MetaWindow *window = test_client_find_window (client, window_id, error);
|
||||
if (!window)
|
||||
return FALSE;
|
||||
|
||||
WaitForShownData data = {
|
||||
.loop = g_main_loop_new (NULL, FALSE),
|
||||
.window = window,
|
||||
};
|
||||
meta_later_add (META_LATER_BEFORE_REDRAW,
|
||||
test_case_wait_for_showing_before_redraw,
|
||||
&data,
|
||||
NULL);
|
||||
g_main_loop_run (data.loop);
|
||||
if (data.shown_handler_id)
|
||||
g_signal_handler_disconnect (window, data.shown_handler_id);
|
||||
g_main_loop_unref (data.loop);
|
||||
}
|
||||
else if (strcmp (argv[0], "hide") == 0 ||
|
||||
strcmp (argv[0], "activate") == 0 ||
|
||||
strcmp (argv[0], "raise") == 0 ||
|
||||
strcmp (argv[0], "lower") == 0 ||
|
||||
|
Reference in New Issue
Block a user