Skip to content
Commits on Source (35)
41.2
====
* Fix blank screen when unplugging docking station [Jonas; !2097]
* Prefer GBM over EGLStream where possible [Jonas; !2051, !2052]
* Fix unredirected Xwayland windows not getting updated [Michel; !2112]
* Improve anti-aliasing of background corners [Daniel; !2102]
* Copy damage rectangles to secondary GPU [Piotr; !2033]
* Improve Wacom tablet mapping [Carlos; !2107]
* Fixed crashes [Jonas, Daniel; #1950, !2081, !2104, !1991, !2127]
* Misc. bug fixes and cleanups [Simon, Corentin, Pascal; !2049, !2119, !2138]
Contributors:
Michel Dänzer, Carlos Garnacho, Simon McVittie, Pascal Nowack, Corentin Noël,
Daniel van Vugt, Jonas Ådahl, Piotr Łopatka
Translators:
Milo Casagrande [it], Quentin PAGÈS [oc]
41.1
====
* Fix monitor screencast scanouts [Michel; !1914]
......
This diff is collapsed.
project('mutter', 'c',
version: '41.1',
version: '41.2',
meson_version: '>= 0.53.0',
license: 'GPLv2+'
)
......
......@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
"POT-Creation-Date: 2021-03-12 15:44+0000\n"
"PO-Revision-Date: 2021-03-15 09:07+0100\n"
"POT-Creation-Date: 2021-11-04 18:01+0000\n"
"PO-Revision-Date: 2021-11-10 09:20+0100\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
......@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Poedit 2.4.2\n"
"X-Generator: Poedit 3.0\n"
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
......@@ -55,110 +55,126 @@ msgstr "Sposta la finestra sullo spazio di lavoro a sinistra"
msgid "Move window one workspace to the right"
msgstr "Sposta la finestra sullo spazio di lavoro a destra"
#: data/50-mutter-navigation.xml:30
#: data/50-mutter-navigation.xml:31
msgid "Move window one workspace up"
msgstr "Sposta la finestra uno spazio di lavoro in alto"
#: data/50-mutter-navigation.xml:35
msgid "Move window one workspace down"
msgstr "Sposta la finestra uno spazio di lavoro in basso"
#: data/50-mutter-navigation.xml:38
msgid "Move window one monitor to the left"
msgstr "Sposta la finestra un monitor a sinistra"
#: data/50-mutter-navigation.xml:33
#: data/50-mutter-navigation.xml:41
msgid "Move window one monitor to the right"
msgstr "Sposta la finestra un monitor a destra"
#: data/50-mutter-navigation.xml:36
#: data/50-mutter-navigation.xml:44
msgid "Move window one monitor up"
msgstr "Sposta la finestra un monitor in su"
#: data/50-mutter-navigation.xml:39
#: data/50-mutter-navigation.xml:47
msgid "Move window one monitor down"
msgstr "Sposta la finestra un monitor in giù"
#: data/50-mutter-navigation.xml:43
#: data/50-mutter-navigation.xml:51
msgid "Switch applications"
msgstr "Evidenzia le applicazioni"
#: data/50-mutter-navigation.xml:48
#: data/50-mutter-navigation.xml:56
msgid "Switch to previous application"
msgstr "Evidenzia l'applicazione precedente"
#: data/50-mutter-navigation.xml:52
#: data/50-mutter-navigation.xml:60
msgid "Switch windows"
msgstr "Evidenzia le finestre"
#: data/50-mutter-navigation.xml:57
#: data/50-mutter-navigation.xml:65
msgid "Switch to previous window"
msgstr "Evidenzia la finestra precedente"
#: data/50-mutter-navigation.xml:61
#: data/50-mutter-navigation.xml:69
msgid "Switch windows of an application"
msgstr "Evidenzia le finestre di un'applicazione"
#: data/50-mutter-navigation.xml:66
#: data/50-mutter-navigation.xml:74
msgid "Switch to previous window of an application"
msgstr "Evidenzia la finestra precedente di un'applicazione"
#: data/50-mutter-navigation.xml:70
#: data/50-mutter-navigation.xml:78
msgid "Switch system controls"
msgstr "Evidenzia i controlli di sistema"
#: data/50-mutter-navigation.xml:75
#: data/50-mutter-navigation.xml:83
msgid "Switch to previous system control"
msgstr "Evidenzia i controlli di sistema precedenti"
#: data/50-mutter-navigation.xml:79
#: data/50-mutter-navigation.xml:87
msgid "Switch windows directly"
msgstr "Evidenzia direttamente le finestre"
#: data/50-mutter-navigation.xml:84
#: data/50-mutter-navigation.xml:92
msgid "Switch directly to previous window"
msgstr "Evidenzia direttamente la finestra precedente"
#: data/50-mutter-navigation.xml:88
#: data/50-mutter-navigation.xml:96
msgid "Switch windows of an app directly"
msgstr "Evidenzia direttamente le finestre di un'applicazione"
#: data/50-mutter-navigation.xml:93
#: data/50-mutter-navigation.xml:101
msgid "Switch directly to previous window of an app"
msgstr "Evidenzia direttamente la finestra precedente di un'applicazione"
#: data/50-mutter-navigation.xml:97
#: data/50-mutter-navigation.xml:105
msgid "Switch system controls directly"
msgstr "Evidenzia direttamente i controlli di sistema"
#: data/50-mutter-navigation.xml:102
#: data/50-mutter-navigation.xml:110
msgid "Switch directly to previous system control"
msgstr "Evidenzia direttamente i controlli di sistema precedenti"
#: data/50-mutter-navigation.xml:105
#: data/50-mutter-navigation.xml:113
msgid "Hide all normal windows"
msgstr "Nasconde tutte le finestre normali"
#: data/50-mutter-navigation.xml:108
#: data/50-mutter-navigation.xml:116
msgid "Switch to workspace 1"
msgstr "Passa allo spazio di lavoro 1"
#: data/50-mutter-navigation.xml:111
#: data/50-mutter-navigation.xml:119
msgid "Switch to workspace 2"
msgstr "Passa allo spazio di lavoro 2"
#: data/50-mutter-navigation.xml:114
#: data/50-mutter-navigation.xml:122
msgid "Switch to workspace 3"
msgstr "Passa allo spazio di lavoro 3"
#: data/50-mutter-navigation.xml:117
#: data/50-mutter-navigation.xml:125
msgid "Switch to workspace 4"
msgstr "Passa allo spazio di lavoro 4"
#: data/50-mutter-navigation.xml:120
#: data/50-mutter-navigation.xml:128
msgid "Switch to last workspace"
msgstr "Passa all'ultimo spazio di lavoro"
#: data/50-mutter-navigation.xml:123
#: data/50-mutter-navigation.xml:131
msgid "Move to workspace on the left"
msgstr "Sposta su spazio di lavoro a sinistra"
#: data/50-mutter-navigation.xml:126
#: data/50-mutter-navigation.xml:134
msgid "Move to workspace on the right"
msgstr "Sposta su spazio di lavoro a destra"
#: data/50-mutter-navigation.xml:138
msgid "Move to workspace above"
msgstr "Sposta su spazio di lavoro in alto"
#: data/50-mutter-navigation.xml:142
msgid "Move to workspace below"
msgstr "Sposta su spazio di lavoro in basso"
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
msgid "System"
msgstr "Sistema"
......@@ -167,10 +183,6 @@ msgstr "Sistema"
msgid "Show the run command prompt"
msgstr "Mostra il prompt esegui comando"
#: data/50-mutter-system.xml:10
msgid "Show the activities overview"
msgstr "Mostra la panoramica delle attività"
#: data/50-mutter-wayland.xml:8
msgid "Restore the keyboard shortcuts"
msgstr "Ripristina le scorciatoie da tastiera"
......@@ -425,10 +437,11 @@ msgstr ""
"al contenuto della finestra, per gestire schermi HiDPI (non richiede il "
"riavvio). • “rt-scheduler” — Richiede uno scheduling real-time a bassa "
"priorità. L'eseguibile o l'utente deve avere la proprietà CAP_SYS_NICE "
"(richiede il riavvio). • “autostart-xwayland” — Avvia Xwayland passivamente "
"se ci sono client X11 (richiede il riavvio). • “autoclose-xwayland” — "
"Termina automaticamente Xwayland se non ci sono più client X11 (non richiede "
"il riavvio)."
"(richiede il riavvio). • “dma-buf-screen-sharing” — Abilita la condivisione "
"schermo DMA con buffer; già abilitato quando si usa il driver i915, ma "
"disabilitato per tutto il resto (richiede il riavvio). • “autoclose-"
"xwayland” — Termina automaticamente Xwayland se non ci sono più client X11 "
"(non richiede il riavvio)."
#: data/org.gnome.mutter.gschema.xml.in:143
msgid "Modifier to use to locate the pointer"
......@@ -594,26 +607,26 @@ msgstr ""
"selezionate. Affinché questa impostazione abbia effetto è necessario "
"riavviarae Xwayland."
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:246
msgid "Built-in display"
msgstr "Display integrato"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:275
msgid "Unknown"
msgstr "Sconosciuto"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:277
msgid "Unknown Display"
msgstr "Display sconosciuto"
#: src/backends/meta-monitor.c:274
#: src/backends/meta-monitor.c:285
#, c-format
msgctxt ""
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
msgid "%s %s"
msgstr "%s %s"
#: src/backends/meta-monitor.c:282
#: src/backends/meta-monitor.c:293
#, c-format
msgctxt ""
"This is a monitor vendor name followed by product/model name where size in "
......@@ -626,9 +639,26 @@ msgstr "%s %s"
msgid "Compositor"
msgstr "Compositor"
#: src/backends/x11/meta-clutter-backend-x11.c:237
msgid "X display to use"
msgstr "Display X da usare"
#: src/backends/x11/meta-clutter-backend-x11.c:243
msgid "X screen to use"
msgstr "Schermo X da usare"
#: src/backends/x11/meta-clutter-backend-x11.c:248
#: src/core/meta-context-main.c:585
msgid "Make X calls synchronous"
msgstr "Rende le chiamate X sincrone"
#: src/backends/x11/meta-clutter-backend-x11.c:254
msgid "Disable XInput support"
msgstr "Disabilita supporto XInput"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: src/compositor/compositor.c:510
#: src/compositor/compositor.c:513
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
......@@ -640,92 +670,88 @@ msgstr ""
msgid "Bell event"
msgstr "Evento campanella"
#: src/core/main.c:233
msgid "Disable connection to session manager"
msgstr "Disabilita la connessione al gestore di sessione"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:151
#, c-format
msgid "“%s” is not responding."
msgstr "Nessuna risposta da %s."
#: src/core/meta-close-dialog-default.c:153
msgid "Application is not responding."
msgstr "L'applicazione non risponde."
#: src/core/meta-close-dialog-default.c:158
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"È possibile scegliere di attendere un po' lasciando che l'applicazione "
"continui, oppure forzare la terminazione dell'applicazione."
#: src/core/meta-close-dialog-default.c:165
msgid "_Force Quit"
msgstr "_Forza uscita"
#: src/core/meta-close-dialog-default.c:165
msgid "_Wait"
msgstr "_Attendi"
#: src/core/main.c:239
#: src/core/meta-context-main.c:555
msgid "Replace the running window manager"
msgstr "Sostituisce il window manager in esecuzione"
#: src/core/main.c:245
msgid "Specify session management ID"
msgstr "Specifica l'ID di gestione sessione"
#: src/core/main.c:250
#: src/core/meta-context-main.c:561
msgid "X Display to use"
msgstr "Display X da usare"
#: src/core/main.c:256
#: src/core/meta-context-main.c:567
msgid "Disable connection to session manager"
msgstr "Disabilita la connessione al gestore di sessione"
#: src/core/meta-context-main.c:573
msgid "Specify session management ID"
msgstr "Specifica l'ID di gestione sessione"
#: src/core/meta-context-main.c:579
msgid "Initialize session from savefile"
msgstr "Inizializza la sessione da file salvato"
#: src/core/main.c:262
msgid "Make X calls synchronous"
msgstr "Rende le chiamate X sincrone"
#: src/core/main.c:269
#: src/core/meta-context-main.c:592
msgid "Run as a wayland compositor"
msgstr "Esegui come compositor Wayland"
#: src/core/main.c:275
#: src/core/meta-context-main.c:598
msgid "Run as a nested compositor"
msgstr "Esegui come compositor annidato"
#: src/core/main.c:281
#: src/core/meta-context-main.c:604
msgid "Run wayland compositor without starting Xwayland"
msgstr "Esegui il compositor Wayland senza avviare Xwayland"
#: src/core/main.c:287
#: src/core/meta-context-main.c:610
msgid "Specify Wayland display name to use"
msgstr "Specifica il nome del display Wayland da utilizzare"
#: src/core/main.c:295
#: src/core/meta-context-main.c:618
msgid "Run as a full display server, rather than nested"
msgstr "Esegui come display server invece che annidato"
#: src/core/main.c:300
#: src/core/meta-context-main.c:623
msgid "Run as a headless display server"
msgstr "Esegue come display server headless"
#: src/core/main.c:305
#: src/core/meta-context-main.c:628
msgid "Add persistent virtual monitor (WxH or WxH@R)"
msgstr "Aggiunge un monitor virtuale persistente (WxH o WxH@R)"
#: src/core/main.c:311
#: src/core/meta-context-main.c:639
msgid "Run with X11 backend"
msgstr "Esegui con sistema X11"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:151
#, c-format
msgid "“%s” is not responding."
msgstr "Nessuna risposta da %s."
#: src/core/meta-close-dialog-default.c:153
msgid "Application is not responding."
msgstr "L'applicazione non risponde."
#: src/core/meta-close-dialog-default.c:158
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"È possibile scegliere di attendere un po' lasciando che l'applicazione "
"continui, oppure forzare la terminazione dell'applicazione."
#: src/core/meta-close-dialog-default.c:165
msgid "_Force Quit"
msgstr "_Forza uscita"
#: src/core/meta-close-dialog-default.c:165
msgid "_Wait"
msgstr "_Attendi"
#. TRANSLATORS: This string refers to a button that switches between
#. * different modes.
#.
#: src/core/meta-pad-action-mapper.c:780
#: src/core/meta-pad-action-mapper.c:782
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "Cambio modalità (gruppo %d)"
......@@ -733,28 +759,28 @@ msgstr "Cambio modalità (gruppo %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: src/core/meta-pad-action-mapper.c:803
#: src/core/meta-pad-action-mapper.c:805
msgid "Switch monitor"
msgstr "Cambia monitor"
#: src/core/meta-pad-action-mapper.c:805
#: src/core/meta-pad-action-mapper.c:807
msgid "Show on-screen help"
msgstr "Mostra aiuto sullo schermo"
#: src/core/mutter.c:46
#: src/core/mutter.c:48
msgid "Print version"
msgstr "Stampa la versione"
#: src/core/mutter.c:52
#: src/core/mutter.c:54
msgid "Mutter plugin to use"
msgstr "Plugin Mutter da usare"
#: src/core/prefs.c:1912
#: src/core/prefs.c:1913
#, c-format
msgid "Workspace %d"
msgstr "Spazio di lavoro %d"
#: src/core/util.c:117
#: src/core/util.c:148
msgid "Mutter was compiled without support for verbose mode"
msgstr ""
"Mutter è stato compilato escludendo il supporto per la modalità prolissa"
......@@ -764,7 +790,7 @@ msgstr ""
msgid "Mode Switch: Mode %d"
msgstr "Cambio modalità: modalità %d"
#: src/x11/meta-x11-display.c:676
#: src/x11/meta-x11-display.c:673
#, c-format
msgid ""
"Display “%s” already has a window manager; try using the --replace option to "
......@@ -773,16 +799,16 @@ msgstr ""
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
"replace per sostituirlo."
#: src/x11/meta-x11-display.c:1097
#: src/x11/meta-x11-display.c:1067
msgid "Failed to initialize GDK"
msgstr "Inizializzazione GDK non riuscita"
#: src/x11/meta-x11-display.c:1121
#: src/x11/meta-x11-display.c:1091
#, c-format
msgid "Failed to open X Window System display “%s”"
msgstr "Apertura del display «%s» di X Window System non riuscita"
#: src/x11/meta-x11-display.c:1204
#: src/x11/meta-x11-display.c:1175
#, c-format
msgid "Screen %d on display “%s” is invalid"
msgstr "Lo schermo %d sul display «%s» non è valido"
......@@ -792,7 +818,7 @@ msgstr "Lo schermo %d sul display «%s» non è valido"
msgid "Format %s not supported"
msgstr "Formato %s non supportato"
#: src/x11/session.c:1822
#: src/x11/session.c:1845
msgid ""
"These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in."
......
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
"POT-Creation-Date: 2021-05-11 18:46+0000\n"
"PO-Revision-Date: 2021-05-11 20:45+0200\n"
"POT-Creation-Date: 2021-11-26 16:02+0000\n"
"PO-Revision-Date: 2021-11-28 14:40+0100\n"
"Last-Translator: Quentin PAGÈS\n"
"Language-Team: Tot En Òc\n"
"Language: oc\n"
......@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.4.3\n"
"X-Generator: Poedit 3.0\n"
"X-Project-Style: gnome\n"
#: data/50-mutter-navigation.xml:6
......@@ -179,10 +179,6 @@ msgstr "Sistèma"
msgid "Show the run command prompt"
msgstr "Afichar la fenèstra per aviar una comanda"
#: data/50-mutter-system.xml:10
msgid "Show the activities overview"
msgstr "Afichar l'apercebut de las activitats"
#: data/50-mutter-wayland.xml:8
msgid "Restore the keyboard shortcuts"
msgstr "Restaurar los acorchis de clavièr"
......@@ -425,21 +421,24 @@ msgstr ""
#: data/org.gnome.mutter.gschema.xml.in:143
msgid "Modifier to use to locate the pointer"
msgstr ""
msgstr "Tòca modificadora d’utilizar per localizar lo puntador"
#: data/org.gnome.mutter.gschema.xml.in:144
msgid "This key will initiate the “locate pointer” action."
msgstr ""
msgstr "Aquesta tòca iniciarà l’accion « localizar lo puntador »."
#: data/org.gnome.mutter.gschema.xml.in:151
msgid "Timeout for check-alive ping"
msgstr ""
msgstr "Relambi pel ping de verificacion d’activitat"
#: data/org.gnome.mutter.gschema.xml.in:152
msgid ""
"Number of milliseconds a client has to respond to a ping request in order to "
"not be detected as frozen. Using 0 will disable the alive check completely."
msgstr ""
"Nombre de millisegondas qu’a un client per respondre a una requèsta ping per "
"èsser pas detectat coma blocat. L’utilizacion de 0 desactivarà complètament "
"la verificacion."
#: data/org.gnome.mutter.gschema.xml.in:176
msgid "Select window from tab popup"
......@@ -457,7 +456,7 @@ msgstr "Bascular la configuracion del monitor"
#: data/org.gnome.mutter.gschema.xml.in:191
msgid "Rotates the built-in monitor configuration"
msgstr ""
msgstr "Vira la configuracion d’usina del monitor"
#: data/org.gnome.mutter.wayland.gschema.xml.in:12
msgid "Switch to VT 1"
......@@ -513,7 +512,7 @@ msgstr "Tornar activar los acorchis"
#: data/org.gnome.mutter.wayland.gschema.xml.in:70
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
msgstr ""
msgstr "Permetre a las capturas X11 de verrolhar lo focus amb Xwayland"
#: data/org.gnome.mutter.wayland.gschema.xml.in:71
msgid ""
......@@ -527,10 +526,21 @@ msgid ""
"specific X11 ClientMessage to the root window or be among the applications "
"allowed in key “xwayland-grab-access-rules”."
msgstr ""
"Permetre a totes los eveniments clavièr d'èsser partits cap a las fenèstras "
"X11 « override redirect » amb captura pendent lo foncionament amb Xwayland. "
"Aquela opcion permet de prene en carga los clients X11 que gerisson una "
"fenèstra « override redirect » (que recep pas de focus clavièr) e produson "
"una captura clavièr per forçar totes los eveniments clavièr cap a aquela "
"fenèstra. Aquela opcion es rarament utilizada e a pas cap de efièch sus las "
"fenèstras X11 normalas que pòdon recebre lo focus del clavièr dins de "
"circonstàncias normalas. Per que una captura X11 d'acòrdi presa en compte "
"jos Wayland, lo client deure tanben d'acòrdi enviar un ClientMessage X11 "
"especific a la fenèstra racina, d'acòrdi figurar demest la lista de las "
"aplicacions autorizadas dins la clau «xwayland-grab-access-rules»."
#: data/org.gnome.mutter.wayland.gschema.xml.in:90
msgid "Xwayland applications allowed to issue keyboard grabs"
msgstr ""
msgstr "Aplicacions Xwayland autorizadas a emetre de capturas de clavièr"
#: data/org.gnome.mutter.wayland.gschema.xml.in:91
msgid ""
......@@ -545,10 +555,20 @@ msgid ""
"using the specific keyboard shortcut defined by the keybinding key “restore-"
"shortcuts”."
msgstr ""
"Lista de noms de ressorsas o de classas de ressorsas de fenèstras X11 "
"autorizadas o non a emetre de capturas clavièr jos Xwayland. Lo nom o la "
"classa de ressorsa d'una fenèstra X11 donada pòt èsser obtenguda amb l'ajuda "
"de la comanda « xprop WM_CLASS ». Los caractèrs joquèr « * » e « ? » son "
"acceptadas dins las valors. Las valors començant per « ! » son blocadas, en "
"prioritat respècte a la lista de las aplicacions autorizadas, per revocar "
"las aplicacions de la lista sistèma per deca. Aquesta conten las aplicacions "
"venentas : « @XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@ ». Los utilizaires pòdon "
"copar una captura existenta en utilizant l'acorchi clavièr especific definit "
"per la combinason de tòcas « restore-shortcuts »."
#: data/org.gnome.mutter.wayland.gschema.xml.in:116
msgid "Disable selected X extensions in Xwayland"
msgstr ""
msgstr "Desactivar las extensions X seleccionadas dins Xwayland"
#: data/org.gnome.mutter.wayland.gschema.xml.in:117
msgid ""
......@@ -557,27 +577,32 @@ msgid ""
"Xwayland was built without support for the selected extensions. Xwayland "
"needs to be restarted for this setting to take effect."
msgstr ""
"Aquesta opcion desactiva las extensions X seleccionadas dins Xwayland se "
"foguèt construch amb la presa en carga de las extensions X. Aquesta opcion a "
"pas cap d’efièch s’aquelas extensions foguèron pas inclusas dins la "
"construccion de Xwayland. Xwayland deu èsser reaviat per prendre en compte "
"aqueste paramètre."
#: src/backends/meta-monitor.c:235
#: src/backends/meta-monitor.c:246
msgid "Built-in display"
msgstr "Afichatge integrat"
#: src/backends/meta-monitor.c:264
#: src/backends/meta-monitor.c:275
msgid "Unknown"
msgstr "Desconegut"
#: src/backends/meta-monitor.c:266
#: src/backends/meta-monitor.c:277
msgid "Unknown Display"
msgstr "Afichatge desconegut"
#: src/backends/meta-monitor.c:274
#: src/backends/meta-monitor.c:285
#, c-format
msgctxt ""
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
msgid "%s %s"
msgstr "%s %s"
#: src/backends/meta-monitor.c:282
#: src/backends/meta-monitor.c:293
#, c-format
msgctxt ""
"This is a monitor vendor name followed by product/model name where size in "
......@@ -590,9 +615,26 @@ msgstr "%s %s"
msgid "Compositor"
msgstr "Compositor"
#: src/backends/x11/meta-clutter-backend-x11.c:237
msgid "X display to use"
msgstr "Afichatge X d'utilizar"
#: src/backends/x11/meta-clutter-backend-x11.c:243
msgid "X screen to use"
msgstr "Ecran X d'utilizar"
#: src/backends/x11/meta-clutter-backend-x11.c:248
#: src/core/meta-context-main.c:585
msgid "Make X calls synchronous"
msgstr "Rendre sincròns los apèls a X"
#: src/backends/x11/meta-clutter-backend-x11.c:254
msgid "Disable XInput support"
msgstr "Desactivar la presa en carga de XInput"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: src/compositor/compositor.c:510
#: src/compositor/compositor.c:513
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display “%s”."
......@@ -604,94 +646,88 @@ msgstr ""
msgid "Bell event"
msgstr "Eveniment sonòr"
#: src/core/main.c:233
msgid "Disable connection to session manager"
msgstr "Desactivar la connexion al gestionari de sessions"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:151
#, c-format
msgid "“%s” is not responding."
msgstr "« %s » respond pas."
#: src/core/meta-close-dialog-default.c:153
msgid "Application is not responding."
msgstr "L'aplicacion respond pas."
#: src/core/meta-close-dialog-default.c:158
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Podètz pacientar un moment per contunhar o forçar l'aplicacion a quitar "
"definitivament."
#: src/core/meta-close-dialog-default.c:164
msgid "_Force Quit"
msgstr "_Forçar a quitar"
#: src/core/meta-close-dialog-default.c:164
msgid "_Wait"
msgstr "_Esperar"
#: src/core/main.c:239
#: src/core/meta-context-main.c:555
msgid "Replace the running window manager"
msgstr "Remplaçar lo gestionari de fenèstras en cors de foncionament"
#: src/core/main.c:245
msgid "Specify session management ID"
msgstr "Indicar l'ID de gestion de sessions"
#: src/core/main.c:250
#: src/core/meta-context-main.c:561
msgid "X Display to use"
msgstr "Afichatge X d'utilizar"
#: src/core/main.c:256
#: src/core/meta-context-main.c:567
msgid "Disable connection to session manager"
msgstr "Desactivar la connexion al gestionari de sessions"
#: src/core/meta-context-main.c:573
msgid "Specify session management ID"
msgstr "Indicar l'ID de gestion de sessions"
#: src/core/meta-context-main.c:579
msgid "Initialize session from savefile"
msgstr "Inicializar la session dempuèi lo fichièr de salvament"
#: src/core/main.c:262
msgid "Make X calls synchronous"
msgstr "Rendre sincròns los apèls a X"
#: src/core/main.c:269
#: src/core/meta-context-main.c:592
msgid "Run as a wayland compositor"
msgstr "Aviar coma un compositor wayland"
#: src/core/main.c:275
#: src/core/meta-context-main.c:598
msgid "Run as a nested compositor"
msgstr "Executar coma un compositor imbricat"
#: src/core/main.c:281
#: src/core/meta-context-main.c:604
msgid "Run wayland compositor without starting Xwayland"
msgstr "Executar lo compositor wayland sens aviar Xwayland"
#: src/core/main.c:287
#: src/core/meta-context-main.c:610
msgid "Specify Wayland display name to use"
msgstr "Indicar lo nom d'afichar per Wayland"
#: src/core/main.c:295
#: src/core/meta-context-main.c:618
msgid "Run as a full display server, rather than nested"
msgstr "Aviar coma un servidor d'afichatge complet, puslèu qu'imbricat"
#: src/core/main.c:300
#, fuzzy
#| msgid "Run as a full display server, rather than nested"
#: src/core/meta-context-main.c:623
msgid "Run as a headless display server"
msgstr "Aviar coma un servidor d'afichatge complet, puslèu qu'imbricat"
msgstr "Aviar coma un servidor sens afichatge"
#: src/core/main.c:305
#: src/core/meta-context-main.c:628
msgid "Add persistent virtual monitor (WxH or WxH@R)"
msgstr "Apondre un monitor virtual persistant (WxH o WxH@R)"
#: src/core/main.c:311
#: src/core/meta-context-main.c:639
msgid "Run with X11 backend"
msgstr "Lançar amb lo motor X11"
#. Translators: %s is a window title
#: src/core/meta-close-dialog-default.c:151
#, c-format
msgid "“%s” is not responding."
msgstr "« %s » respond pas."
#: src/core/meta-close-dialog-default.c:153
msgid "Application is not responding."
msgstr "L'aplicacion respond pas."
#: src/core/meta-close-dialog-default.c:158
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Podètz pacientar un moment per contunhar o forçar l'aplicacion a quitar "
"definitivament."
#: src/core/meta-close-dialog-default.c:165
msgid "_Force Quit"
msgstr "_Forçar a quitar"
#: src/core/meta-close-dialog-default.c:165
msgid "_Wait"
msgstr "_Esperar"
#. TRANSLATORS: This string refers to a button that switches between
#. * different modes.
#.
#: src/core/meta-pad-action-mapper.c:780
#: src/core/meta-pad-action-mapper.c:782
#, c-format
msgid "Mode Switch (Group %d)"
msgstr "Cambiament de mòde (grop %d)"
......@@ -699,28 +735,28 @@ msgstr "Cambiament de mòde (grop %d)"
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: src/core/meta-pad-action-mapper.c:803
#: src/core/meta-pad-action-mapper.c:805
msgid "Switch monitor"
msgstr "Cambiar de monitor"
#: src/core/meta-pad-action-mapper.c:805
#: src/core/meta-pad-action-mapper.c:807
msgid "Show on-screen help"
msgstr "Afichar l’ajuda a l’ecran"
#: src/core/mutter.c:46
#: src/core/mutter.c:48
msgid "Print version"
msgstr "Imprimir la version"
#: src/core/mutter.c:52
#: src/core/mutter.c:54
msgid "Mutter plugin to use"
msgstr "Empeuton de Mutter d'utilizar"
#: src/core/prefs.c:1912
#: src/core/prefs.c:1913
#, c-format
msgid "Workspace %d"
msgstr "Espaci de trabalh %d"
#: src/core/util.c:117
#: src/core/util.c:148
msgid "Mutter was compiled without support for verbose mode"
msgstr "Mutter es estat compilat sens la presa en carga del mòde verbós"
......@@ -729,7 +765,7 @@ msgstr "Mutter es estat compilat sens la presa en carga del mòde verbós"
msgid "Mode Switch: Mode %d"
msgstr "Cambiament de mòde : mòde %d"
#: src/x11/meta-x11-display.c:676
#: src/x11/meta-x11-display.c:673
#, c-format
msgid ""
"Display “%s” already has a window manager; try using the --replace option to "
......@@ -738,16 +774,16 @@ msgstr ""
"L'afichatge « %s » a ja un gestionari de fenèstras ; ensajatz d'utilizar "
"l'opcion --replace per remplaçar lo gestionari de fenèstras actual."
#: src/x11/meta-x11-display.c:1097
#: src/x11/meta-x11-display.c:1067
msgid "Failed to initialize GDK"
msgstr "Impossible d'inicializar GDK"
#: src/x11/meta-x11-display.c:1121
#: src/x11/meta-x11-display.c:1091
#, c-format
msgid "Failed to open X Window System display “%s”"
msgstr "Impossible de dobrir l'afichatge « %s » del sistèma X Window"
#: src/x11/meta-x11-display.c:1204
#: src/x11/meta-x11-display.c:1175
#, c-format
msgid "Screen %d on display “%s” is invalid"
msgstr "L'ecran %d sus l'afichatge « %s » es pas valid"
......@@ -757,7 +793,7 @@ msgstr "L'ecran %d sus l'afichatge « %s » es pas valid"
msgid "Format %s not supported"
msgstr "Lo format %s es pas pres en carga"
#: src/x11/session.c:1822
#: src/x11/session.c:1845
msgid ""
"These windows do not support “save current setup” and will have to be "
"restarted manually next time you log in."
......@@ -771,6 +807,9 @@ msgstr ""
msgid "%s (on %s)"
msgstr "%s (sus %s)"
#~ msgid "Show the activities overview"
#~ msgstr "Afichar l'apercebut de las activitats"
#~ msgid "Toggle shaded state"
#~ msgstr "Bascular l'estat de replec"
......
......@@ -50,15 +50,6 @@ struct _MetaInputMapper
#endif
};
typedef enum
{
META_INPUT_CAP_TOUCH = 1 << 0, /* touch device, either touchscreen or tablet */
META_INPUT_CAP_STYLUS = 1 << 1, /* tablet pen */
META_INPUT_CAP_ERASER = 1 << 2, /* tablet eraser */
META_INPUT_CAP_PAD = 1 << 3, /* pad device, most usually in tablets */
META_INPUT_CAP_CURSOR = 1 << 4 /* pointer-like device in tablets */
} MetaInputCapabilityFlags;
typedef enum
{
META_MATCH_EDID_VENDOR, /* EDID vendor match, eg. "WAC" for Wacom */
......@@ -83,7 +74,6 @@ struct _MetaMapperOutputInfo
{
MetaLogicalMonitor *logical_monitor;
GList *input_devices;
MetaInputCapabilityFlags attached_caps;
};
struct _MappingHelper
......@@ -217,31 +207,6 @@ mapper_output_info_free (MetaMapperOutputInfo *info)
g_free (info);
}
static MetaInputCapabilityFlags
mapper_input_info_get_caps (MetaMapperInputInfo *info)
{
ClutterInputDeviceType type;
type = clutter_input_device_get_device_type (info->device);
switch (type)
{
case CLUTTER_TOUCHSCREEN_DEVICE:
return META_INPUT_CAP_TOUCH;
case CLUTTER_TABLET_DEVICE:
case CLUTTER_PEN_DEVICE:
return META_INPUT_CAP_STYLUS;
case CLUTTER_ERASER_DEVICE:
return META_INPUT_CAP_ERASER;
case CLUTTER_CURSOR_DEVICE:
return META_INPUT_CAP_CURSOR;
case CLUTTER_PAD_DEVICE:
return META_INPUT_CAP_PAD;
default:
return 0;
}
}
static void
mapper_input_info_set_output (MetaMapperInputInfo *input,
MetaMapperOutputInfo *output,
......@@ -257,6 +222,10 @@ mapper_input_info_set_output (MetaMapperInputInfo *input,
input->output = output;
/* These devices don't require emission about mapping/ratio */
if (clutter_input_device_get_device_type (input->device) == CLUTTER_PAD_DEVICE)
return;
if (output && monitor)
{
meta_monitor_manager_get_monitor_matrix (mapper->monitor_manager,
......@@ -287,8 +256,6 @@ mapper_output_info_add_input (MetaMapperOutputInfo *output,
g_assert (input->output == NULL);
output->input_devices = g_list_prepend (output->input_devices, input);
output->attached_caps |= mapper_input_info_get_caps (input);
mapper_input_info_set_output (input, output, monitor);
}
......@@ -296,16 +263,9 @@ static void
mapper_output_info_remove_input (MetaMapperOutputInfo *output,
MetaMapperInputInfo *input)
{
GList *l;
g_assert (input->output == output);
output->input_devices = g_list_remove (output->input_devices, input);
output->attached_caps = 0;
for (l = output->input_devices; l; l = l->next)
output->attached_caps |= mapper_input_info_get_caps (l->data);
mapper_input_info_set_output (input, NULL, NULL);
}
......@@ -319,8 +279,6 @@ mapper_output_info_clear_inputs (MetaMapperOutputInfo *output)
mapper_input_info_set_output (input, NULL, NULL);
output->input_devices = g_list_remove (output->input_devices, input);
}
output->attached_caps = 0;
}
static void
......@@ -532,13 +490,17 @@ guess_candidates (MetaInputMapper *mapper,
if (info->matches->len == 0)
{
DeviceMatch match = { 0 };
if (clutter_input_device_get_device_type (input->device) ==
CLUTTER_TOUCHSCREEN_DEVICE)
{
DeviceMatch match = { 0 };
match.monitor =
meta_monitor_manager_get_laptop_panel (mapper->monitor_manager);
match.monitor =
meta_monitor_manager_get_laptop_panel (mapper->monitor_manager);
if (match.monitor != NULL)
g_array_append_val (info->matches, match);
if (match.monitor != NULL)
g_array_append_val (info->matches, match);
}
info->best = 0;
}
......@@ -593,9 +555,9 @@ mapping_helper_apply (MappingHelper *helper,
DeviceCandidates *info;
info = &g_array_index (helper->device_maps, DeviceCandidates, i);
g_debug ("Applying mapping %d to input device '%s', capabilities %x", i,
g_debug ("Applying mapping %d to input device '%s', type %d", i,
clutter_input_device_get_device_name (info->input->device),
mapper_input_info_get_caps (info->input));
clutter_input_device_get_device_type (info->input->device));
for (j = 0; j < info->matches->len; j++)
{
......@@ -617,9 +579,6 @@ mapping_helper_apply (MappingHelper *helper,
if (!output)
continue;
if (output->attached_caps & mapper_input_info_get_caps (info->input))
continue;
g_debug ("Matched input '%s' with output '%s'",
clutter_input_device_get_device_name (info->input->device),
meta_monitor_get_display_name (match->monitor));
......
......@@ -94,6 +94,16 @@ meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native,
return is_transform_handled (crtc_kms, transform);
}
static gboolean
meta_crtc_kms_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
{
MetaCrtcKms *crtc_kms = META_CRTC_KMS (crtc_native);
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
MetaKmsDevice *kms_device = meta_kms_crtc_get_device (kms_crtc);
return !!meta_kms_device_get_cursor_plane_for (kms_device, kms_crtc);
}
void
meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms,
MetaKmsPlaneAssignment *kms_plane_assignment)
......@@ -385,4 +395,5 @@ meta_crtc_kms_class_init (MetaCrtcKmsClass *klass)
object_class->dispose = meta_crtc_kms_dispose;
crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;
crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported;
}
......@@ -33,6 +33,14 @@ meta_crtc_native_is_transform_handled (MetaCrtcNative *crtc_native,
return klass->is_transform_handled (crtc_native, transform);
}
gboolean
meta_crtc_native_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
{
MetaCrtcNativeClass *klass = META_CRTC_NATIVE_GET_CLASS (crtc_native);
return klass->is_hw_cursor_supported (crtc_native);
}
static void
meta_crtc_native_init (MetaCrtcNative *crtc_native)
{
......
......@@ -33,9 +33,12 @@ struct _MetaCrtcNativeClass
gboolean (* is_transform_handled) (MetaCrtcNative *crtc_native,
MetaMonitorTransform monitor_transform);
gboolean (* is_hw_cursor_supported) (MetaCrtcNative *crtc_native);
};
gboolean meta_crtc_native_is_transform_handled (MetaCrtcNative *crtc_native,
MetaMonitorTransform transform);
gboolean meta_crtc_native_is_hw_cursor_supported (MetaCrtcNative *crtc_native);
#endif /* META_CRTC_NATIVE_H */
......@@ -45,6 +45,12 @@ meta_crtc_virtual_is_transform_handled (MetaCrtcNative *crtc_native,
return transform == META_MONITOR_TRANSFORM_NORMAL;
}
static gboolean
meta_crtc_virtual_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
{
return TRUE;
}
static void
meta_crtc_virtual_init (MetaCrtcVirtual *crtc_virtual)
{
......@@ -57,4 +63,6 @@ meta_crtc_virtual_class_init (MetaCrtcVirtualClass *klass)
crtc_native_class->is_transform_handled =
meta_crtc_virtual_is_transform_handled;
crtc_native_class->is_hw_cursor_supported =
meta_crtc_virtual_is_hw_cursor_supported;
}
......@@ -666,24 +666,21 @@ get_current_relative_transform (MetaCursorSprite *cursor_sprite)
}
static void
has_cursor_plane (MetaLogicalMonitor *logical_monitor,
MetaMonitor *monitor,
MetaOutput *output,
MetaCrtc *crtc,
gpointer user_data)
crtc_supports_hw_cursor (MetaLogicalMonitor *logical_monitor,
MetaMonitor *monitor,
MetaOutput *output,
MetaCrtc *crtc,
gpointer user_data)
{
gboolean *has_cursor_planes = user_data;
MetaCrtcKms *crtc_kms = META_CRTC_KMS (crtc);
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
MetaKmsDevice *kms_device = meta_kms_crtc_get_device (kms_crtc);
gboolean *supports_hw_cursor = user_data;
MetaCrtcNative *crtc_native = META_CRTC_NATIVE (crtc);
*has_cursor_planes &= !!meta_kms_device_get_cursor_plane_for (kms_device,
kms_crtc);
*supports_hw_cursor &= meta_crtc_native_is_hw_cursor_supported (crtc_native);
}
static gboolean
crtcs_has_cursor_planes (MetaCursorRenderer *renderer,
MetaCursorSprite *cursor_sprite)
crtcs_supports_hw_cursor (MetaCursorRenderer *renderer,
MetaCursorSprite *cursor_sprite)
{
MetaCursorRendererNative *cursor_renderer_native =
META_CURSOR_RENDERER_NATIVE (renderer);
......@@ -705,7 +702,7 @@ crtcs_has_cursor_planes (MetaCursorRenderer *renderer,
MetaLogicalMonitor *logical_monitor = l->data;
MetaRectangle logical_monitor_layout;
graphene_rect_t logical_monitor_rect;
gboolean has_cursor_planes;
gboolean supports_hw_cursor;
logical_monitor_layout =
meta_logical_monitor_get_layout (logical_monitor);
......@@ -716,11 +713,11 @@ crtcs_has_cursor_planes (MetaCursorRenderer *renderer,
NULL))
continue;
has_cursor_planes = TRUE;
supports_hw_cursor = TRUE;
meta_logical_monitor_foreach_crtc (logical_monitor,
has_cursor_plane,
&has_cursor_planes);
if (!has_cursor_planes)
crtc_supports_hw_cursor,
&supports_hw_cursor);
if (!supports_hw_cursor)
return FALSE;
}
......@@ -880,7 +877,7 @@ should_have_hw_cursor (MetaCursorRenderer *renderer,
return FALSE;
}
if (!crtcs_has_cursor_planes (renderer, cursor_sprite))
if (!crtcs_supports_hw_cursor (renderer, cursor_sprite))
return FALSE;
texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
......
......@@ -224,7 +224,6 @@ static void
clear_slow_keys (MetaInputDeviceNative *device)
{
g_list_free_full (device->slow_keys_list, meta_input_device_native_free_pending_slow_key);
g_list_free (device->slow_keys_list);
device->slow_keys_list = NULL;
}
......
......@@ -138,7 +138,9 @@ sync_fd_held (MetaKmsConnector *connector,
{
gboolean should_hold_fd;
should_hold_fd = connector->current_state->current_crtc_id != 0;
should_hold_fd =
connector->current_state &&
connector->current_state->current_crtc_id != 0;
if (connector->fd_held == should_hold_fd)
return;
......@@ -569,6 +571,13 @@ meta_kms_connector_read_state (MetaKmsConnector *connector,
current_state = g_steal_pointer (&connector->current_state);
changes = META_KMS_UPDATE_CHANGE_NONE;
if (!drm_connector)
{
if (current_state)
changes = META_KMS_UPDATE_CHANGE_FULL;
goto out;
}
if (drm_connector->connection != DRM_MODE_CONNECTED)
{
if (drm_connector->connection != connector->connection)
......@@ -577,7 +586,7 @@ meta_kms_connector_read_state (MetaKmsConnector *connector,
changes |= META_KMS_UPDATE_CHANGE_FULL;
}
return changes;
goto out;
}
state = meta_kms_connector_state_new ();
......@@ -616,8 +625,8 @@ meta_kms_connector_read_state (MetaKmsConnector *connector,
changes |= connector_changes;
}
if (changes != META_KMS_UPDATE_CHANGE_NONE)
sync_fd_held (connector, impl_device);
out:
sync_fd_held (connector, impl_device);
return changes;
}
......@@ -634,13 +643,10 @@ meta_kms_connector_update_state (MetaKmsConnector *connector,
drm_connector = drmModeGetConnector (meta_kms_impl_device_get_fd (impl_device),
connector->id);
if (!drm_connector)
return META_KMS_UPDATE_CHANGE_FULL;
changes = meta_kms_connector_read_state (connector, impl_device,
drm_connector,
drm_resources);
drmModeFreeConnector (drm_connector);
g_clear_pointer (&drm_connector, drmModeFreeConnector);
return changes;
}
......
......@@ -125,6 +125,9 @@ static MetaKmsUpdateChanges
meta_kms_crtc_state_changes (MetaKmsCrtcState *state,
MetaKmsCrtcState *other_state)
{
if (state->is_active != other_state->is_active)
return META_KMS_UPDATE_CHANGE_FULL;
if (!meta_rectangle_equal (&state->rect, &other_state->rect))
return META_KMS_UPDATE_CHANGE_FULL;
......@@ -214,35 +217,29 @@ meta_kms_crtc_read_state (MetaKmsCrtc *crtc,
crtc_state.is_active = drm_crtc->mode_valid;
}
if (crtc_state.is_active != crtc->current_state.is_active)
{
changes |= META_KMS_UPDATE_CHANGE_FULL;
}
else if (!crtc_state.is_active)
if (!crtc_state.is_active)
{
clear_gamma_state (&crtc_state);
return changes;
if (crtc->current_state.is_active)
changes |= META_KMS_UPDATE_CHANGE_FULL;
}
read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc);
changes |= meta_kms_crtc_state_changes (&crtc->current_state, &crtc_state);
if (changes == META_KMS_UPDATE_CHANGE_NONE)
else
{
clear_gamma_state (&crtc_state);
return changes;
read_gamma_state (crtc, &crtc_state, impl_device, drm_crtc);
changes = meta_kms_crtc_state_changes (&crtc->current_state, &crtc_state);
}
clear_gamma_state (&crtc->current_state);
crtc->current_state = crtc_state;
meta_topic (META_DEBUG_KMS,
"Read CRTC %u state: active: %d, mode: %s",
"Read CRTC %u state: active: %d, mode: %s, changed: %s",
crtc->id, crtc->current_state.is_active,
crtc->current_state.is_drm_mode_valid
? crtc->current_state.drm_mode.name
: "(nil)");
: "(nil)",
changes == META_KMS_UPDATE_CHANGE_NONE
? "no"
: "yes");
return changes;
}
......
......@@ -396,7 +396,7 @@ update_connectors (MetaKmsImplDevice *impl_device,
MetaKmsImplDevicePrivate *priv =
meta_kms_impl_device_get_instance_private (impl_device);
g_autolist (MetaKmsConnector) connectors = NULL;
gboolean needs_full_change = FALSE;
gboolean added_connector = FALSE;
unsigned int i;
int fd;
......@@ -420,7 +420,7 @@ update_connectors (MetaKmsImplDevice *impl_device,
{
connector = meta_kms_connector_new (impl_device, drm_connector,
drm_resources);
needs_full_change = TRUE;
added_connector = TRUE;
}
drmModeFreeConnector (drm_connector);
......@@ -428,7 +428,8 @@ update_connectors (MetaKmsImplDevice *impl_device,
connectors = g_list_prepend (connectors, connector);
}
if (!needs_full_change)
if (!added_connector &&
g_list_length (connectors) == g_list_length (priv->connectors))
return META_KMS_UPDATE_CHANGE_NONE;
g_list_free_full (priv->connectors, g_object_unref);
......
......@@ -735,7 +735,9 @@ secondary_gpu_get_next_dumb_buffer (MetaOnscreenNativeSecondaryGpuState *seconda
static gboolean
copy_shared_framebuffer_primary_gpu (CoglOnscreen *onscreen,
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state)
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state,
const int *rectangles,
int n_rectangles)
{
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen);
......@@ -802,14 +804,37 @@ copy_shared_framebuffer_primary_gpu (CoglOnscreen *onscre
error->message);
return FALSE;
}
/* Limit the number of individual copies to 16 */
#define MAX_RECTS 16
if (!cogl_blit_framebuffer (framebuffer, COGL_FRAMEBUFFER (dmabuf_fb),
0, 0, 0, 0,
width, height,
&error))
if (n_rectangles == 0 || n_rectangles > MAX_RECTS)
{
g_object_unref (dmabuf_fb);
return FALSE;
if (!cogl_blit_framebuffer (framebuffer, COGL_FRAMEBUFFER (dmabuf_fb),
0, 0, 0, 0,
width, height,
&error))
{
g_object_unref (dmabuf_fb);
return FALSE;
}
}
else
{
int i;
for (i = 0; i < n_rectangles; ++i)
{
if (!cogl_blit_framebuffer (framebuffer, COGL_FRAMEBUFFER (dmabuf_fb),
rectangles[i * 4], rectangles[i * 4 + 1],
rectangles[i * 4], rectangles[i * 4 + 1],
rectangles[i * 4 + 2],
rectangles[i * 4 + 3],
&error))
{
g_object_unref (dmabuf_fb);
return FALSE;
}
}
}
g_object_unref (dmabuf_fb);
......@@ -872,13 +897,14 @@ copy_shared_framebuffer_cpu (CoglOnscreen *onscreen,
cogl_object_unref (dumb_bitmap);
g_clear_object (&secondary_gpu_state->gbm.next_fb);
secondary_gpu_state->gbm.next_fb = buffer;
g_set_object (&secondary_gpu_state->gbm.next_fb, buffer);
secondary_gpu_state->cpu.current_dumb_fb = buffer_dumb;
}
static void
update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen)
update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen,
const int *rectangles,
int n_rectangles)
{
MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen);
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
......@@ -908,7 +934,9 @@ update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen)
G_GNUC_FALLTHROUGH;
case META_SHARED_FRAMEBUFFER_COPY_MODE_PRIMARY:
if (!copy_shared_framebuffer_primary_gpu (onscreen,
secondary_gpu_state))
secondary_gpu_state,
rectangles,
n_rectangles))
{
if (!secondary_gpu_state->noted_primary_gpu_copy_failed)
{
......@@ -1029,7 +1057,9 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
COGL_TRACE_BEGIN_SCOPED (MetaRendererNativeSwapBuffers,
"Onscreen (swap-buffers)");
update_secondary_gpu_state_pre_swap_buffers (onscreen);
update_secondary_gpu_state_pre_swap_buffers (onscreen,
rectangles,
n_rectangles);
parent_class = COGL_ONSCREEN_CLASS (meta_onscreen_native_parent_class);
parent_class->swap_buffers_with_damage (onscreen,
......
......@@ -220,6 +220,17 @@ meta_renderer_native_has_pending_mode_set (MetaRendererNative *renderer_native)
return renderer_native->pending_mode_set;
}
MetaRendererNativeMode
meta_renderer_native_get_mode (MetaRendererNative *renderer_native)
{
MetaGpuKms *primary_gpu = renderer_native->primary_gpu_kms;
MetaRendererNativeGpuData *primary_gpu_data;
primary_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
primary_gpu);
return primary_gpu_data->mode;
}
static void
meta_renderer_native_disconnect (CoglRenderer *cogl_renderer)
{
......@@ -1876,11 +1887,12 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
MetaBackend *backend = meta_renderer_get_backend (renderer);
MetaDevicePool *device_pool =
meta_backend_native_get_device_pool (META_BACKEND_NATIVE (backend));
MetaRendererNativeGpuData *renderer_gpu_data;
MetaRendererNativeGpuData *gbm_renderer_gpu_data;
MetaDeviceFileFlags device_file_flags = META_DEVICE_FILE_FLAG_NONE;
g_autoptr (MetaDeviceFile) device_file = NULL;
GError *gbm_error = NULL;
#ifdef HAVE_EGL_DEVICE
MetaRendererNativeGpuData *egl_stream_renderer_gpu_data;
GError *egl_device_error = NULL;
#endif
......@@ -1898,29 +1910,30 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
if (!device_file)
return NULL;
#ifdef HAVE_EGL_DEVICE
/* Try to initialize the EGLDevice backend first. Whenever we use a
* non-NVIDIA GPU, the EGLDevice enumeration function won't find a match, and
* we'll fall back to GBM (which will always succeed as it has a software
* rendering fallback)
*/
renderer_gpu_data = create_renderer_gpu_data_egl_device (renderer_native,
device_file,
&egl_device_error);
if (renderer_gpu_data)
return renderer_gpu_data;
#endif
renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
device_file,
&gbm_error);
if (renderer_gpu_data)
gbm_renderer_gpu_data = create_renderer_gpu_data_gbm (renderer_native,
device_file,
&gbm_error);
if (gbm_renderer_gpu_data)
{
if (gbm_renderer_gpu_data->secondary.is_hardware_rendering)
return gbm_renderer_gpu_data;
}
#ifdef HAVE_EGL_DEVICE
g_error_free (egl_device_error);
#endif
return renderer_gpu_data;
egl_stream_renderer_gpu_data =
create_renderer_gpu_data_egl_device (renderer_native,
device_file,
&egl_device_error);
if (egl_stream_renderer_gpu_data)
{
g_clear_pointer (&gbm_renderer_gpu_data,
meta_renderer_native_gpu_data_free);
return egl_stream_renderer_gpu_data;
}
#endif
if (gbm_renderer_gpu_data)
return gbm_renderer_gpu_data;
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
......@@ -1943,6 +1956,24 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
return NULL;
}
static const char *
renderer_data_mode_to_string (MetaRendererNativeMode mode)
{
switch (mode)
{
case META_RENDERER_NATIVE_MODE_GBM:
return "gbm";
case META_RENDERER_NATIVE_MODE_SURFACELESS:
return "surfaceless";
#ifdef HAVE_EGL_DEVICE
case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
return "egldevice";
#endif
}
g_assert_not_reached ();
}
static gboolean
create_renderer_gpu_data (MetaRendererNative *renderer_native,
MetaGpuKms *gpu_kms,
......@@ -1957,6 +1988,18 @@ create_renderer_gpu_data (MetaRendererNative *renderer_native,
if (!renderer_gpu_data)
return FALSE;
if (gpu_kms)
{
g_message ("Created %s renderer for '%s'",
renderer_data_mode_to_string (renderer_gpu_data->mode),
meta_gpu_kms_get_file_path (gpu_kms));
}
else
{
g_message ("Created %s renderer without GPU",
renderer_data_mode_to_string (renderer_gpu_data->mode));
}
g_hash_table_insert (renderer_native->gpu_datas,
gpu_kms,
renderer_gpu_data);
......
......@@ -68,4 +68,6 @@ void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native);
gboolean meta_renderer_native_use_modifiers (MetaRendererNative *renderer_native);
MetaRendererNativeMode meta_renderer_native_get_mode (MetaRendererNative *renderer_native);
#endif /* META_RENDERER_NATIVE_H */
......@@ -169,16 +169,17 @@ typedef enum
" float dist_squared = dot (delta, delta); \n"\
" \n"\
" // Fully outside the circle \n"\
" if (dist_squared >= (clip_radius * clip_radius)) \n"\
" float outer_radius = clip_radius + 0.5; \n"\
" if (dist_squared >= (outer_radius * outer_radius)) \n"\
" return 0.0; \n"\
" \n"\
" // Fully inside the circle \n"\
" float inner_radius = clip_radius - 1.0; \n"\
" float inner_radius = clip_radius - 0.5; \n"\
" if (dist_squared <= (inner_radius * inner_radius)) \n"\
" return 1.0; \n"\
" \n"\
" // Only pixels on the edge of the curve need expensive antialiasing \n"\
" return clip_radius - sqrt (dist_squared); \n"\
" return outer_radius - sqrt (dist_squared); \n"\
"} \n"
#define ROUNDED_CLIP_FRAGMENT_SHADER_CODE \
......
......@@ -73,6 +73,12 @@ meta_surface_actor_wayland_try_acquire_scanout (MetaSurfaceActorWayland *self,
MetaWaylandSurface *surface;
CoglScanout *scanout;
/* If the actor appears to be obscured, need to go through the normal paint
* machinery to ensure the unobscured region is up to date
*/
if (meta_surface_actor_is_obscured (META_SURFACE_ACTOR (self)))
return NULL;
surface = meta_surface_actor_wayland_get_surface (self);
if (!surface)
return NULL;
......