Compare commits

..

4 Commits

Author SHA1 Message Date
Jasper St. Pierre
ea901abd61 frame: Don't allow resizing of edges that are constrained
https://bugzilla.gnome.org/show_bug.cgi?id=751857
2016-04-04 14:51:56 -07:00
Jasper St. Pierre
4e5e6aa7f8 window: Add new tiling code
The new tiling code, instead of based around "tiling states", is instead
based around constrained edges. This allows us to have windows that have
three constrained edges, but keep one free-floating, e.g. a window tiled
to the left has the left, top, and bottom edges constrained, but the
right edge can be left resizable.

This system also is easily extended to support corner tiling. We also,
using the new "size state" system, also keep normal, tiled, and
maximized sizes independently, allowing the maximize button to bounce
between maximized and tiled states without reverting to normal in
between. Dragging from the top will always restore the normal state,
though.

https://bugzilla.gnome.org/show_bug.cgi?id=751857
2016-04-04 14:50:57 -07:00
Jasper St. Pierre
8e587e2e42 Add "size states" which save window size information
https://bugzilla.gnome.org/show_bug.cgi?id=751857
2016-04-04 14:50:56 -07:00
Jasper St. Pierre
93901dc32f window: Remove old tiling code
We'll soon replace this with a better scheme

https://bugzilla.gnome.org/show_bug.cgi?id=751857
2016-04-04 14:50:56 -07:00
53 changed files with 3432 additions and 3151 deletions

46
NEWS
View File

@@ -1,49 +1,3 @@
3.20.3
======
* Fix grabbing random keys for disabled shortcuts [Rui; #766270]
* Crash fixes [Marek, Rui; #751847, #767969]
* Improve multi-monitor handling on wayland [Rui; #766528]
* Don't create invalid UTF-8 window description strings [Rui; #765535]
* Convert window titles and wm_class to UTF-8 [Rui; #752788]
* Use kill() to force-quit unresponsive wayland clients [Olivier; #767464]
* Fix window position when unmaximizing via DND on wayland [Olivier; #764180]
* Avoid full window redraws when using extended frame sync [Florian; #767798]
* Fix missing frame border around GTK+ dialogs [Florian; #745060]
* Improve X11 <-> wayland copy and paste interaction [Carlos; #768007]
Contributors:
Marek Chalupa, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
Translations:
Kjartan Maraas [nb], Muhammet Kara [tr], Andika Triwidada [id]
3.20.2
======
* Notify clients of pending modifier state changes [Rui; #748526]
* Add get_is_builtin_display_on() method [Florian; #765267]
* Fix 2-finger titlebar taps on wayland [Carlos; #764519]
* Misc. bug fixes [Florian, Victor, Jonas; #765058, #765252, #765062]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner,
Victor Toso
Translations:
GNOME Translation Robot [ja], Tiago Santos [pt]
3.20.1
======
* Constrain window move/resizes on wayland as on X11 [Rui; #748819]
* Don't crash with invalid previous monitor configurations [Rui; #764286]
* Misc. bug fixes and cleanups [Jonas, Cosimo; #762828, #764807]
Contributors:
Jonas Ådahl, Cosimo Cecchi, Rui Matos, Jasper St. Pierre
Translations:
Inaki Larranaga Murgoitio [eu], Reinout van Schouwen [nl], Fabio Tomat [fur],
Trần Ngọc Quân [vi]
3.20.0
======
* Fix crash when using visual bell [Jonas; #763858]

View File

@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [20])
m4_define([mutter_micro_version], [3])
m4_define([mutter_micro_version], [0])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])

View File

@@ -8,18 +8,18 @@
# Andika Triwidada <andika@gmail.com>, 2011-2015.
msgid ""
msgstr ""
"Project-Id-Version: mutter gnome-3-20\n"
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-05-10 20:26+0000\n"
"PO-Revision-Date: 2016-06-23 04:18+0700\n"
"POT-Creation-Date: 2015-03-21 11:13+0000\n"
"PO-Revision-Date: 2015-03-21 19:04+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.8\n"
"X-Generator: Poedit 1.7.1\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../data/50-mutter-navigation.xml.in.h:1
@@ -454,22 +454,22 @@ msgstr "Pindah ke VT 11"
msgid "Switch to VT 12"
msgstr "Pindah ke VT 12"
#: ../src/backends/meta-monitor-manager.c:515
#: ../src/backends/meta-monitor-manager.c:364
msgid "Built-in display"
msgstr "Tampilan bawaan"
#: ../src/backends/meta-monitor-manager.c:538
#: ../src/backends/meta-monitor-manager.c:391
msgid "Unknown"
msgstr "Tak Dikenal"
#: ../src/backends/meta-monitor-manager.c:540
#: ../src/backends/meta-monitor-manager.c:393
msgid "Unknown Display"
msgstr "Tampilan Tak Dikenal"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:548
#: ../src/backends/meta-monitor-manager.c:401
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -484,7 +484,7 @@ msgid ""
msgstr ""
"Manajer komposit lain telah berjalan pada layar %i pada tampilan \"%s\"."
#: ../src/core/bell.c:194
#: ../src/core/bell.c:185
msgid "Bell event"
msgstr "Bel peristiwa"
@@ -512,44 +512,40 @@ msgstr "_Tunggu"
msgid "_Force Quit"
msgstr "_Matikan Paksa"
#: ../src/core/display.c:555
#: ../src/core/display.c:562
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Gagal membuka tampilan X Window System '%s'\n"
#: ../src/core/main.c:181
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "Menonaktifkan koneksi ke manajer sesi"
#: ../src/core/main.c:187
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "Mengganti manajer jendela yang tengah berjalan"
#: ../src/core/main.c:193
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "Tentukan kode pengaturan sesi"
#: ../src/core/main.c:198
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "Tampilan X yang digunakna"
#: ../src/core/main.c:204
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "Aktifkan sesi dari berkas simpanan"
#: ../src/core/main.c:210
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "Buat panggilan X selaras"
#: ../src/core/main.c:217
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "Jalankan sebagai kompositor wayland"
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Jalankan sebagai kompositor bersarang"
#: ../src/core/main.c:231
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr "Jalankan sebagai server tampilan penuh, ketimbang tampilan bersarang"
@@ -577,12 +573,12 @@ msgstr "Cetak versi"
msgid "Mutter plugin to use"
msgstr "Pengaya Mutter yang dipakai"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:2004
#, c-format
msgid "Workspace %d"
msgstr "Area kerja %d"
#: ../src/core/screen.c:521
#: ../src/core/screen.c:525
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@@ -591,12 +587,12 @@ msgstr ""
"Tampilan \"%s\" sudah memiliki manajer jendela; cobalah gunakan pilihan --"
"replace untuk mengganti manajer jendela saat ini."
#: ../src/core/screen.c:603
#: ../src/core/screen.c:607
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Layar %d pada tampilan '%s' tidak benar\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Muter dikompilasi tanpa dukungan mode riuh\n"

2682
po/ja.po

File diff suppressed because it is too large Load Diff

432
po/nb.po
View File

@@ -1,13 +1,13 @@
# Norwegian bokmål translation of mutter.
# Copyright © 2002-2004 Free Software Foundation, Inc.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2016.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2015.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 3.20.x\n"
"Project-Id-Version: mutter 3.15.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-05-23 18:59+0200\n"
"PO-Revision-Date: 2016-05-23 19:00+0200\n"
"POT-Creation-Date: 2015-03-19 21:23+0100\n"
"PO-Revision-Date: 2015-03-19 21:24+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n"
@@ -448,22 +448,22 @@ msgstr "Bytt til VT 11"
msgid "Switch to VT 12"
msgstr "Bytt til VT 12"
#: ../src/backends/meta-monitor-manager.c:515
#: ../src/backends/meta-monitor-manager.c:364
msgid "Built-in display"
msgstr "Innebygget skjerm"
#: ../src/backends/meta-monitor-manager.c:538
#: ../src/backends/meta-monitor-manager.c:391
msgid "Unknown"
msgstr "Ukjent"
#: ../src/backends/meta-monitor-manager.c:540
#: ../src/backends/meta-monitor-manager.c:393
msgid "Unknown Display"
msgstr "Ukjent skjerm"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:548
#: ../src/backends/meta-monitor-manager.c:401
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -477,7 +477,7 @@ msgid ""
"\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/core/bell.c:194
#: ../src/core/bell.c:185
msgid "Bell event"
msgstr "Klokkehendelse"
@@ -506,44 +506,40 @@ msgstr "_Vent"
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:555
#: ../src/core/display.c:562
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/main.c:181
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "Deaktiver tilkobling til sesjonshåndtereren"
#: ../src/core/main.c:187
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "Erstatt kjørende vindushåndterer"
#: ../src/core/main.c:193
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "Oppgi sesjonshåndterings-ID"
#: ../src/core/main.c:198
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "X-skjerm som skal brukes"
#: ../src/core/main.c:204
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "Initier sesjonen fra en lagret fil"
#: ../src/core/main.c:210
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:217
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "Kjør som en wayland-kompositør"
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Kjør som en nøstet kompositør"
#: ../src/core/main.c:231
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr "Kjør som en full skjermtjener, heller enn nøstet"
@@ -569,26 +565,24 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:2004
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:521
#: ../src/core/screen.c:525
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace "
"for å erstatte aktiv vindushåndterer."
msgstr "Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace for å erstatte aktiv vindushåndterer."
#: ../src/core/screen.c:603
#: ../src/core/screen.c:607
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter er kompilert uten støtte for «verbose» modus\n"
@@ -604,3 +598,383 @@ msgstr ""
#, c-format
msgid "%s (on %s)"
msgstr "%s (på %s)"
#~ msgid ""
#~ "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit "
#~ "the format"
#~ msgstr ""
#~ "Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
#~ "formatet"
#~ msgid "Could not parse alpha value \"%s\" in blended color"
#~ msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
#~ msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
#~ msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
#~ msgid ""
#~ "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
#~ "format"
#~ msgstr ""
#~ "Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
#~ msgid "Could not parse shade factor \"%s\" in shaded color"
#~ msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
#~ msgid "Shade factor \"%s\" in shaded color is negative"
#~ msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
#~ msgid "Could not parse color \"%s\""
#~ msgstr "Kunne ikke lese farge «%s»"
#~ msgid "Coordinate expression contains character '%s' which is not allowed"
#~ msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
#~ msgid ""
#~ "Coordinate expression contains floating point number '%s' which could not "
#~ "be parsed"
#~ msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
#~ msgid ""
#~ "Coordinate expression contains integer '%s' which could not be parsed"
#~ msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
#~ msgid ""
#~ "Coordinate expression contained unknown operator at the start of this "
#~ "text: \"%s\""
#~ msgstr ""
#~ "Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
#~ "teksten: «%s»"
#~ msgid "Coordinate expression was empty or not understood"
#~ msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
#~ msgid "Coordinate expression results in division by zero"
#~ msgstr "Koordinatuttrykket resulterer i divisjon med null"
#~ msgid ""
#~ "Coordinate expression tries to use mod operator on a floating-point number"
#~ msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
#~ msgid ""
#~ "Coordinate expression has an operator \"%s\" where an operand was expected"
#~ msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
#~ msgid "Coordinate expression had an operand where an operator was expected"
#~ msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
#~ msgid "Coordinate expression ended with an operator instead of an operand"
#~ msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
#~ msgid ""
#~ "Coordinate expression has operator \"%c\" following operator \"%c\" with "
#~ "no operand in between"
#~ msgstr ""
#~ "Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
#~ "operand mellom dem."
#~ msgid "Coordinate expression had unknown variable or constant \"%s\""
#~ msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
#~ msgid "Coordinate expression parser overflowed its buffer."
#~ msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
#~ msgid ""
#~ "Coordinate expression had a close parenthesis with no open parenthesis"
#~ msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
#~ msgid ""
#~ "Coordinate expression had an open parenthesis with no close parenthesis"
#~ msgstr ""
#~ "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
#~ msgid "Coordinate expression doesn't seem to have any operators or operands"
#~ msgstr ""
#~ "Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
#~ msgid "Theme contained an expression that resulted in an error: %s\n"
#~ msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
#~ msgid ""
#~ "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
#~ "specified for this frame style"
#~ msgstr ""
#~ "<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
#~ "spesifiseres for denne rammestilen"
#~ msgid ""
#~ "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/"
#~ ">"
#~ msgstr ""
#~ "Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
#~ msgid "Failed to load theme \"%s\": %s\n"
#~ msgstr "Klarte ikke å laste tema «%s»: %s\n"
#~ msgid "No <%s> set for theme \"%s\""
#~ msgstr "<%s> er ikke satt for tema «%s»"
#~ msgid ""
#~ "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
#~ "type=\"%s\" style_set=\"whatever\"/> element"
#~ msgstr ""
#~ "Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
#~ "type=«%s» style_set=«ett-eller-annet»/>-element"
#~ msgid ""
#~ "User-defined constants must begin with a capital letter; \"%s\" does not"
#~ msgstr ""
#~ "Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
#~ msgid "Constant \"%s\" has already been defined"
#~ msgstr "Konstant «%s» er allerede definert"
#~ msgid "No \"%s\" attribute on element <%s>"
#~ msgstr "Ingen «%s»-attributt på element <%s>"
#~ msgid "Line %d character %d: %s"
#~ msgstr "Linje %d tegn %d: %s"
#~ msgid "Attribute \"%s\" repeated twice on the same <%s> element"
#~ msgstr "Attributt «%s» gjentatt to ganger på samme <%s>-element"
#~ msgid "Attribute \"%s\" is invalid on <%s> element in this context"
#~ msgstr "Attributt «%s» er ugyldig på <%s>-element i denne konteksten"
#~ msgid "Could not parse \"%s\" as an integer"
#~ msgstr "Kunne ikke lese «%s» som et heltall"
#~ msgid "Did not understand trailing characters \"%s\" in string \"%s\""
#~ msgstr "Forsto ikke etterslepende tegn «%s» i streng «%s»"
#~ msgid "Integer %ld must be positive"
#~ msgstr "Heltall %ld må være positivt"
#~ msgid "Integer %ld is too large, current max is %d"
#~ msgstr "Heltall %ld er for stort, maksimalverdien er %d"
#~ msgid "Could not parse \"%s\" as a floating point number"
#~ msgstr "Kunne ikke lese «%s» som et flyttall"
#~ msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
#~ msgstr "Bolske verdier må være «sann» eller «usann» ikke «%s»"
#~ msgid "Angle must be between 0.0 and 360.0, was %g\n"
#~ msgstr "Vinkelen må være mellom 0.0 og 360.0, var %g\n"
#~ msgid ""
#~ "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
#~ msgstr ""
#~ "Alpha må være mellom 0.0 (usynlig) og 1.0 (helt ugjennomsiktig), var %g\n"
#~ msgid ""
#~ "Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
#~ "large,x-large,xx-large)\n"
#~ msgstr ""
#~ "Ugyldig skalering av tittel «%s» (må være en av xx-small,x-small,small,"
#~ "medium,large,x-large,xx-large)\n"
#~ msgid "<%s> name \"%s\" used a second time"
#~ msgstr "<%s> navn «%s» brukt på nytt"
#~ msgid "<%s> parent \"%s\" has not been defined"
#~ msgstr "<%s> opphav «%s» er ikke definert"
#~ msgid "<%s> geometry \"%s\" has not been defined"
#~ msgstr "<%s> geometri «%s» er ikke definert"
#~ msgid "<%s> must specify either a geometry or a parent that has a geometry"
#~ msgstr ""
#~ "<%s> må spesifisere enten en geometri eller et opphav som har geometri"
#~ msgid "You must specify a background for an alpha value to be meaningful"
#~ msgstr "Du må oppgi en bakgrunn for at en alpha-verdi skal ha mening"
#~ msgid "Unknown type \"%s\" on <%s> element"
#~ msgstr "Ukjent type «%s» på <%s>-element"
#~ msgid "Unknown style_set \"%s\" on <%s> element"
#~ msgstr "Ukjent style_set «%s» på <%s>-element"
#~ msgid "Window type \"%s\" has already been assigned a style set"
#~ msgstr "Vindutype «%s» er allerede tildelt et stilsett"
#~ msgid "Element <%s> is not allowed below <%s>"
#~ msgstr "Element <%s> er ikke tillatt under <%s>"
#~ msgid ""
#~ "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio"
#~ "\" for buttons"
#~ msgstr ""
#~ "Kan ikke spesifisere både «button_width»/«button_height» og "
#~ "«aspect_ratio» for knapper"
#~ msgid "Distance \"%s\" is unknown"
#~ msgstr "Avstand «%s» er ukjent"
#~ msgid "Aspect ratio \"%s\" is unknown"
#~ msgstr "Aspektrate «%s» er ukjent"
#~ msgid "Border \"%s\" is unknown"
#~ msgstr "Grense «%s» er ukjent"
#~ msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
#~ msgstr "Ingen «start_angle» eller «from»-attributt på element <%s>"
#~ msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
#~ msgstr "Ingen «extent_angle» eller «to»-attributt <%s>-element"
#~ msgid "Did not understand value \"%s\" for type of gradient"
#~ msgstr "Forsto ikke verdi «%s» for gradienttype"
#~ msgid "Did not understand fill type \"%s\" for <%s> element"
#~ msgstr "Forsto ikke fyll-type «%s» for <%s>-element"
#~ msgid "Did not understand state \"%s\" for <%s> element"
#~ msgstr "Forsto ikke tilstand «%s» for element <%s>"
#~ msgid "Did not understand shadow \"%s\" for <%s> element"
#~ msgstr "Forsto ikke skygge «%s» for element <%s>"
#~ msgid "Did not understand arrow \"%s\" for <%s> element"
#~ msgstr "Forsto ikke pil «%s» for element <%s>"
#~ msgid "No <draw_ops> called \"%s\" has been defined"
#~ msgstr "Ingen <draw_ops> kalt «%s» er definert"
#~ msgid "Including draw_ops \"%s\" here would create a circular reference"
#~ msgstr ""
#~ "Hvis du tar med draw_ops «%s» her vil dette lage en sirkulær referanse"
#~ msgid "Unknown position \"%s\" for frame piece"
#~ msgstr "Ukjent posisjon «%s» for rammesdel"
#~ msgid "Frame style already has a piece at position %s"
#~ msgstr "Rammestil har allerede en del i posisjon %s"
#~ msgid "No <draw_ops> with the name \"%s\" has been defined"
#~ msgstr "Ingen <draw_ops> med navn «%s» er definert"
#~ msgid "Unknown function \"%s\" for button"
#~ msgstr "Ukjent funksjon «%s» for knapp"
#~ msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
#~ msgstr ""
#~ "Knappefunksjon «%s» eksisterer ikke i denne versjonen (%d, trenger %d)"
#~ msgid "Unknown state \"%s\" for button"
#~ msgstr "Ukjent tilstand «%s» for knapp"
#~ msgid "Frame style already has a button for function %s state %s"
#~ msgstr "Rammestil har allerede en knapp for funksjon %s tilstand %s"
#~ msgid "\"%s\" is not a valid value for focus attribute"
#~ msgstr "«%s» er ikke en gyldig verdi for fokusattributt"
#~ msgid "\"%s\" is not a valid value for state attribute"
#~ msgstr "«%s» er ikke en gyldig verdi for tilstandsattributt"
#~ msgid "A style called \"%s\" has not been defined"
#~ msgstr "En stil med navn «%s» er ikke definert"
#~ msgid "\"%s\" is not a valid value for resize attribute"
#~ msgstr "«%s» er ikke en gyldig verdi for attributt for endring av størrelse"
#~ msgid ""
#~ "Should not have \"resize\" attribute on <%s> element for maximized/shaded "
#~ "states"
#~ msgstr ""
#~ "Skal ikke være noen «resize»-attributt på <%s>-element for maksimert/"
#~ "skyggelagt tilstand"
#~ msgid ""
#~ "Should not have \"resize\" attribute on <%s> element for maximized states"
#~ msgstr ""
#~ "Skal ikke være noen «resize»-attributt på <%s>-element for maksimert "
#~ "tilstand"
#~ msgid "Style has already been specified for state %s resize %s focus %s"
#~ msgstr ""
#~ "Stil er allerede spesifisert for tilstand %s størrelsesendring %s fokus %s"
#~ msgid "Style has already been specified for state %s focus %s"
#~ msgstr "Stil er allerede spesifisert for tilstand %s fokus %s"
#~ msgid ""
#~ "Can't have a two draw_ops for a <piece> element (theme specified a "
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
#~ "elements)"
#~ msgstr ""
#~ "Kan ikke ha to draw_ops for et <piece>-element (tema spesifiserte en "
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller så "
#~ "spesifiserte det to elementer)"
#~ msgid ""
#~ "Can't have a two draw_ops for a <button> element (theme specified a "
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
#~ "elements)"
#~ msgstr ""
#~ "Kan ikke ha to draw_ops for et <button>-element (tema spesifiserte en "
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller det "
#~ "spesifiserte to elementer)"
#~ msgid ""
#~ "Can't have a two draw_ops for a <menu_icon> element (theme specified a "
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
#~ "elements)"
#~ msgstr ""
#~ "Kan ikke ha to draw_ops for et <menu_icon>-element (tema spesifiserte en "
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller det "
#~ "spesifiserte to elementer)"
#~ msgid "Bad version specification '%s'"
#~ msgstr "Ugyldig versjonspesifikasjon «%s»"
#~ msgid ""
#~ "\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
#~ "theme-2.xml"
#~ msgstr ""
#~ "«version»-attributt kan ikke brukes i metacity-theme-1.xml eller metacity-"
#~ "theme-2.xml"
#~ msgid ""
#~ "Theme requires version %s but latest supported theme version is %d.%d"
#~ msgstr "Tema krever versjon %s men siste støttede temaversjon er %d.%d"
#~ msgid "Outermost element in theme must be <metacity_theme> not <%s>"
#~ msgstr "Ytterste element i temaet må være <metacity_theme> ikke <%s>"
#~ msgid ""
#~ "Element <%s> is not allowed inside a name/author/date/description element"
#~ msgstr ""
#~ "Element <%s> er ikke tillatt inne i et name/author/date/description "
#~ "element"
#~ msgid "Element <%s> is not allowed inside a <constant> element"
#~ msgstr "Element <%s> er ikke tillatt inne i et <constand> element"
#~ msgid ""
#~ "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
#~ msgstr ""
#~ "Element <%s> er ikke tillatt inne i et avstand/kant/aspektrate-element"
#~ msgid "Element <%s> is not allowed inside a draw operation element"
#~ msgstr "Element <%s> er ikke tillatt inne i et element for tegneoperasjon"
#~ msgid "Element <%s> is not allowed inside a <%s> element"
#~ msgstr "Element <%s> er ikke tillatt inne i et <%s>-element"
#~ msgid "No draw_ops provided for frame piece"
#~ msgstr "Ingen draw_ops tilbys for rammedelen"
#~ msgid "No draw_ops provided for button"
#~ msgstr "Ingen draw_ops tilbys for knappen"
#~ msgid "No text is allowed inside element <%s>"
#~ msgstr "Ingen tekst er tillatt inne i element <%s>"
#~ msgid "<%s> specified twice for this theme"
#~ msgstr "<%s> spesifisert to ganger for dette temaet"
#~ msgid "Failed to find a valid file for theme %s\n"
#~ msgstr "Fant ikke en gyldig fil for tema %s\n"

View File

@@ -3,22 +3,21 @@
# Distributed under the same licence as the metacity package
# Duarte Loreto <happyguy_pt@hotmail.com>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
# Pedro Albuquerque <palbuquerque73@openmailbox.com>, 2015.
# Tiago Santos <tiagofsantos81@sapo.pt>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: 3.10\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-04-30 13:15+0000\n"
"PO-Revision-Date: 2016-04-30 16:12+0100\n"
"Last-Translator: Tiago Santos <tiagofsantos81@sapo.pt>\n"
"POT-Creation-Date: 2015-06-07 22:51+0000\n"
"PO-Revision-Date: 2015-06-25 08:16+0100\n"
"Last-Translator: Pedro Albuquerque <palbuquerque73@openmailbox.com>\n"
"Language-Team: Português <palbuquerque73@openmailbox.com>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Gtranslator 2.91.6\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../data/50-mutter-navigation.xml.in.h:1
@@ -42,6 +41,7 @@ msgid "Move window to workspace 4"
msgstr "Mover janela para a área de trabalho 4"
#: ../data/50-mutter-navigation.xml.in.h:6
#| msgid "Move window to workspace 1"
msgid "Move window to last workspace"
msgstr "Mover janela para a última área de trabalho"
@@ -82,6 +82,7 @@ msgid "Switch applications"
msgstr "Mudar de aplicações"
#: ../data/50-mutter-navigation.xml.in.h:16
#| msgid "Switch applications"
msgid "Switch to previous application"
msgstr "Mudar para a aplicação anterior"
@@ -90,6 +91,7 @@ msgid "Switch windows"
msgstr "Mudar de janelas"
#: ../data/50-mutter-navigation.xml.in.h:18
#| msgid "Switch windows"
msgid "Switch to previous window"
msgstr "Mudar para a janela anterior"
@@ -98,6 +100,7 @@ msgid "Switch windows of an application"
msgstr "Alternar entre janelas de uma aplicação"
#: ../data/50-mutter-navigation.xml.in.h:20
#| msgid "Switch windows of an application"
msgid "Switch to previous window of an application"
msgstr "Mudar para a janela anterior de uma aplicação"
@@ -106,6 +109,7 @@ msgid "Switch system controls"
msgstr "Alternar entre controlos de sistema"
#: ../data/50-mutter-navigation.xml.in.h:22
#| msgid "Switch system controls"
msgid "Switch to previous system control"
msgstr "Mudar para o controlo de sistema anterior"
@@ -122,6 +126,7 @@ msgid "Switch windows of an app directly"
msgstr "Alternar diretamente entre janelas de uma aplicação"
#: ../data/50-mutter-navigation.xml.in.h:26
#| msgid "Switch windows of an application"
msgid "Switch directly to previous window of an app"
msgstr "Mudar diretamente para a janela anterior de uma aplicação"
@@ -130,6 +135,7 @@ msgid "Switch system controls directly"
msgstr "Alternar diretamente entre controlos de sistema"
#: ../data/50-mutter-navigation.xml.in.h:28
#| msgid "Switch system controls"
msgid "Switch directly to previous system control"
msgstr "Mudar diretamente para o controlo de sistema anterior"
@@ -154,6 +160,7 @@ msgid "Switch to workspace 4"
msgstr "Mudar para a área de trabalho 4"
#: ../data/50-mutter-navigation.xml.in.h:34
#| msgid "Switch to workspace 1"
msgid "Switch to last workspace"
msgstr "Mudar para a última área de trabalho 1"
@@ -408,69 +415,81 @@ msgid "Cancel tab popup"
msgstr "Cancelar o popup de tabulador"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#| msgid "Switch to workspace 1"
msgid "Switch to VT 1"
msgstr "Alternar para a área de trabalho 1"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
#| msgid "Switch to workspace 2"
msgid "Switch to VT 2"
msgstr "Alternar para a área de trabalho 2"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
#| msgid "Switch to workspace 3"
msgid "Switch to VT 3"
msgstr "Alternar para a área de trabalho 3"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
#| msgid "Switch to workspace 4"
msgid "Switch to VT 4"
msgstr "Alternar para a área de trabalho 4"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
#| msgid "Switch to workspace 5"
msgid "Switch to VT 5"
msgstr "Mover para a área de trabalho 5"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
#| msgid "Switch to workspace 6"
msgid "Switch to VT 6"
msgstr "Mover para a área de trabalho 6"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
#| msgid "Switch to workspace 7"
msgid "Switch to VT 7"
msgstr "Mover para a área de trabalho 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to workspace 8"
msgid "Switch to VT 8"
msgstr "Mover para a área de trabalho 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to workspace 9"
msgid "Switch to VT 9"
msgstr "Mover para a área de trabalho 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to workspace 10"
msgid "Switch to VT 10"
msgstr "Mover para a área de trabalho 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to workspace 11"
msgid "Switch to VT 11"
msgstr "Mover para a área de trabalho 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to workspace 12"
msgid "Switch to VT 12"
msgstr "Mover para a área de trabalho 12"
#: ../src/backends/meta-monitor-manager.c:515
#: ../src/backends/meta-monitor-manager.c:496
msgid "Built-in display"
msgstr "Ecrã embutido"
#: ../src/backends/meta-monitor-manager.c:538
#: ../src/backends/meta-monitor-manager.c:522
msgid "Unknown"
msgstr "Desconhecido"
#: ../src/backends/meta-monitor-manager.c:540
#: ../src/backends/meta-monitor-manager.c:524
msgid "Unknown Display"
msgstr "Ecrã desconhecido"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:548
#: ../src/backends/meta-monitor-manager.c:532
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -486,7 +505,7 @@ msgstr ""
"Já se encontra em execução outro gestor de janelas no ecrã %i do monitor \"%s"
"\"."
#: ../src/core/bell.c:194
#: ../src/core/bell.c:185
msgid "Bell event"
msgstr "Evento de campainha"
@@ -515,45 +534,40 @@ msgstr "_Aguardar"
msgid "_Force Quit"
msgstr "_Forçar terminar"
#: ../src/core/display.c:555
#: ../src/core/display.c:563
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Falha ao abrir ecrã \"%s\" do sistema Janelas X\n"
#: ../src/core/main.c:181
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "Desativar a ligação ao gestor de sessão"
#: ../src/core/main.c:187
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "Substituir o gestor de janelas em execução"
#: ../src/core/main.c:193
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "Especificar a ID de gestão de sessão"
#: ../src/core/main.c:198
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "Ecrã X a utilizar"
#: ../src/core/main.c:204
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "Inicializar a sessão a partir de um ficheiro de gravação de sessão"
#: ../src/core/main.c:210
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "Fazer as chamadas X sincronamente"
#: ../src/core/main.c:217
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "Executar como compositor wayland"
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Executar como compositor aninhado"
#: ../src/core/main.c:231
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr "Executar como servidor de ecrã completo, em vez de aninhado"
@@ -581,13 +595,16 @@ msgstr "Imprimir a versão"
msgid "Mutter plugin to use"
msgstr "Extensão Mutter a utilizar"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:2004
#, c-format
msgid "Workspace %d"
msgstr "Área de trabalho %d"
#: ../src/core/screen.c:521
#: ../src/core/screen.c:525
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
@@ -595,12 +612,12 @@ msgstr ""
"O ecrã \"%s\" já tem um gestor de janelas; tente utilizar a opção --replace "
"para substituir o gestor de janelas atual."
#: ../src/core/screen.c:603
#: ../src/core/screen.c:607
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Ecrã %d no monitor \"%s\" é inválido\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "O Mutter foi compilado sem suporte para modo verboso\n"

View File

@@ -6,22 +6,22 @@
# Baris Cicek <baris@teamforce.name.tr>, 2004, 2005, 2008, 2009.
# İlker DAĞLI <ilker@ilkerdagli.info>, 2011.
# Muhammed EKEN <gnome@m-eken.com>, 2011.
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015, 2016.
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-05-10 20:26+0000\n"
"PO-Revision-Date: 2016-05-26 22:25+0300\n"
"POT-Creation-Date: 2015-03-21 23:08+0000\n"
"PO-Revision-Date: 2015-03-22 15:57+0200\n"
"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.6\n"
"X-Generator: Gtranslator 2.91.6\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../data/50-mutter-navigation.xml.in.h:1
@@ -73,10 +73,12 @@ msgid "Move window one monitor to the right"
msgstr "Pencereyi sağdaki monitöre taşı"
#: ../data/50-mutter-navigation.xml.in.h:13
#| msgid "Move window one workspace up"
msgid "Move window one monitor up"
msgstr "Pencereyi üstteki monitöre taşı"
#: ../data/50-mutter-navigation.xml.in.h:14
#| msgid "Move window one workspace down"
msgid "Move window one monitor down"
msgstr "Pencereyi alttaki monitöre taşı"
@@ -97,10 +99,12 @@ msgid "Switch to previous window"
msgstr "Önceki pencereye geç"
#: ../data/50-mutter-navigation.xml.in.h:19
#| msgid "Move between windows of an application immediately"
msgid "Switch windows of an application"
msgstr "Uygulamanın pencereleri arasında geçiş yap"
#: ../data/50-mutter-navigation.xml.in.h:20
#| msgid "Move between windows of an application immediately"
msgid "Switch to previous window of an application"
msgstr "Uygulamanın bir önceki penceresine geç"
@@ -121,6 +125,7 @@ msgid "Switch directly to previous window"
msgstr "Önceki pencereye doğrudan geç"
#: ../data/50-mutter-navigation.xml.in.h:25
#| msgid "Move between windows of an application immediately"
msgid "Switch windows of an app directly"
msgstr "Uygulamanın pencereleri arasında anında geçiş yap"
@@ -137,6 +142,7 @@ msgid "Switch directly to previous system control"
msgstr "Önceki sistem denetimine doğrudan geç"
#: ../data/50-mutter-navigation.xml.in.h:29
#| msgid "Hide all normal windows and set focus to the desktop"
msgid "Hide all normal windows"
msgstr "Tüm normal pencereleri gizle"
@@ -157,22 +163,27 @@ msgid "Switch to workspace 4"
msgstr "Çalışma alanı 4'e geç"
#: ../data/50-mutter-navigation.xml.in.h:34
#| msgid "Switch to workspace 1"
msgid "Switch to last workspace"
msgstr "Son çalışma alanına geç"
#: ../data/50-mutter-navigation.xml.in.h:35
#| msgid "Move to Workspace _Left"
msgid "Move to workspace left"
msgstr "Soldaki çalışma alanına taşı"
#: ../data/50-mutter-navigation.xml.in.h:36
#| msgid "Move to Workspace R_ight"
msgid "Move to workspace right"
msgstr "Sağdaki çalışma alanına taşı"
#: ../data/50-mutter-navigation.xml.in.h:37
#| msgid "Move to Workspace _Left"
msgid "Move to workspace above"
msgstr "Üstteki çalışma alanına taşı"
#: ../data/50-mutter-navigation.xml.in.h:38
#| msgid "Move to Workspace _Down"
msgid "Move to workspace below"
msgstr "Alttaki çalışma alanına taşı"
@@ -181,6 +192,7 @@ msgid "System"
msgstr "Sistem"
#: ../data/50-mutter-system.xml.in.h:2
#| msgid "Show the panel's main menu"
msgid "Show the run command prompt"
msgstr "Komut çalıştırma istemini göster"
@@ -233,12 +245,14 @@ msgid "Resize window"
msgstr "Pencereyi yeniden boyutlandır"
#: ../data/50-mutter-windows.xml.in.h:12
#| msgid "Toggle whether window is on all workspaces or just one"
msgid "Toggle window on all workspaces or one"
msgstr ""
"Pencerenin tüm çalışma alanlarında veya sadece bir tanesi üzerinde olmasını "
"seç"
#: ../data/50-mutter-windows.xml.in.h:13
#| msgid "Raise window if it's covered by another window, otherwise lower it"
msgid "Raise window if covered, otherwise lower it"
msgstr ""
"Pencere eğer başkası tarafından kapatılmışsa yukarı çıkar, yoksa aşağıya it"
@@ -360,6 +374,11 @@ msgid "Delay focus changes until the pointer stops moving"
msgstr "Odak değişikliklerini işaretçi hareketi durana kadar ertele"
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
#| msgid ""
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#| "the focused window will be automatically raised after a delay specified "
#| "by the auto_raise_delay key. This is not related to clicking on a window "
#| "to raise it, nor to entering a window during drag-and-drop."
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
@@ -414,69 +433,81 @@ msgid "Cancel tab popup"
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#| msgid "Switch to workspace 1"
msgid "Switch to VT 1"
msgstr "VT 1'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
#| msgid "Switch to workspace 2"
msgid "Switch to VT 2"
msgstr "VT 2'ye geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
#| msgid "Switch to workspace 3"
msgid "Switch to VT 3"
msgstr "VT 3'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
#| msgid "Switch to workspace 4"
msgid "Switch to VT 4"
msgstr "VT 4'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
#| msgid "Switch to workspace 5"
msgid "Switch to VT 5"
msgstr "VT 5'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
#| msgid "Switch to workspace 6"
msgid "Switch to VT 6"
msgstr "VT 6'ya geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
#| msgid "Switch to workspace 7"
msgid "Switch to VT 7"
msgstr "VT 7'ye geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to workspace 1"
msgid "Switch to VT 8"
msgstr "VT 8'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to workspace 1"
msgid "Switch to VT 9"
msgstr "VT 9'a geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to workspace 1"
msgid "Switch to VT 10"
msgstr "VT 10'a geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to workspace 1"
msgid "Switch to VT 11"
msgstr "VT 11'e geç"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to workspace 1"
msgid "Switch to VT 12"
msgstr "VT 12'ye geç"
#: ../src/backends/meta-monitor-manager.c:515
#: ../src/backends/meta-monitor-manager.c:364
msgid "Built-in display"
msgstr "Yerleşik ekran"
#: ../src/backends/meta-monitor-manager.c:538
#: ../src/backends/meta-monitor-manager.c:391
msgid "Unknown"
msgstr "Bilinmiyor"
#: ../src/backends/meta-monitor-manager.c:540
#: ../src/backends/meta-monitor-manager.c:393
msgid "Unknown Display"
msgstr "Bilinmeyen Ekran"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:548
#: ../src/backends/meta-monitor-manager.c:401
#, c-format
msgid "%s %s"
msgstr "%s %s"
@@ -492,7 +523,7 @@ msgstr ""
"\"%2$s\" monitöründeki %1$i ekranında zaten başka bir birleştirme yöneticisi "
"çalışıyor."
#: ../src/core/bell.c:194
#: ../src/core/bell.c:185
msgid "Bell event"
msgstr "Etkinlik zili"
@@ -521,44 +552,40 @@ msgstr "_Bekle"
msgid "_Force Quit"
msgstr "_Sonlandır"
#: ../src/core/display.c:555
#: ../src/core/display.c:562
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X Pencere Sistemi '%s' ekranıılamadı\n"
#: ../src/core/main.c:181
#: ../src/core/main.c:176
msgid "Disable connection to session manager"
msgstr "Ortam yöneticisine olan bağlantıyı kapat"
#: ../src/core/main.c:187
#: ../src/core/main.c:182
msgid "Replace the running window manager"
msgstr "Çalışan pencere yöneticisinin yerini al"
#: ../src/core/main.c:193
#: ../src/core/main.c:188
msgid "Specify session management ID"
msgstr "Ortam yönetim ID'sini belirtin"
#: ../src/core/main.c:198
#: ../src/core/main.c:193
msgid "X Display to use"
msgstr "Kullanılacak X Ekranı"
#: ../src/core/main.c:204
#: ../src/core/main.c:199
msgid "Initialize session from savefile"
msgstr "Ortamı kayıtlı dosyadan başlat"
#: ../src/core/main.c:210
#: ../src/core/main.c:205
msgid "Make X calls synchronous"
msgstr "X çağrılarını eşazamanlı yap"
#: ../src/core/main.c:217
#: ../src/core/main.c:212
msgid "Run as a wayland compositor"
msgstr "Bir wayland dizgicisi olarak çalıştır"
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Yuvalanmış dizgici olarak çalıştır"
#: ../src/core/main.c:231
#: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested"
msgstr "İç içe değil tam ekran sunucusu olarak çalıştır"
@@ -584,13 +611,16 @@ msgstr "Sürümü yazdır"
msgid "Mutter plugin to use"
msgstr "Kullanılacak Mutter eklentisi"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:2004
#, c-format
msgid "Workspace %d"
msgstr "Çalışma Alanı %d"
#: ../src/core/screen.c:521
#: ../src/core/screen.c:525
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
@@ -599,12 +629,12 @@ msgstr ""
"yöneticisinin yerine bir başkasını koymak için --replace seçeneğini "
"kullanmayı deneyin."
#: ../src/core/screen.c:603
#: ../src/core/screen.c:607
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "'%2$s' X oturumundaki ekran %1$d geçersiz\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"

File diff suppressed because it is too large Load Diff

View File

@@ -28,7 +28,6 @@
#include <meta/meta-backend.h>
#include <meta/util.h>
#include <math.h>
#include <cogl/cogl.h>
#include <clutter/clutter.h>

View File

@@ -198,7 +198,6 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
guint8 *cursor_data;
gboolean free_cursor_data;
CoglContext *ctx;
CoglError *error = NULL;
if (tracker->xfixes_cursor)
return;
@@ -240,17 +239,11 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
CLUTTER_CAIRO_FORMAT_ARGB32,
cursor_image->width * 4, /* stride */
cursor_data,
&error);
NULL);
if (free_cursor_data)
g_free (cursor_data);
if (error != NULL)
{
meta_warning ("Failed to allocate cursor sprite texture: %s\n", error->message);
cogl_error_free (error);
}
if (sprite != NULL)
{
MetaCursorSprite *cursor_sprite = meta_cursor_sprite_new ();

View File

@@ -136,7 +136,6 @@ meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *self,
ClutterBackend *clutter_backend;
CoglContext *cogl_context;
CoglTexture *texture;
CoglError *error = NULL;
g_assert (self->texture == NULL);
@@ -157,19 +156,10 @@ meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *self,
cogl_format,
rowstride,
(uint8_t *) xc_image->pixels,
&error);
if (error)
{
meta_warning ("Failed to allocate cursor texture: %s\n", error->message);
cogl_error_free (error);
}
NULL);
meta_cursor_sprite_set_texture (self, texture,
xc_image->xhot, xc_image->yhot);
if (texture)
cogl_object_unref (texture);
cogl_object_unref (texture);
meta_cursor_renderer_realize_cursor_from_xcursor (renderer, self, xc_image);
}

View File

@@ -913,13 +913,23 @@ key_is_laptop (MetaOutputKey *key)
{
/* FIXME: extend with better heuristics */
return g_str_has_prefix (key->connector, "LVDS") ||
g_str_has_prefix (key->connector, "lvds") ||
g_str_has_prefix (key->connector, "Lvds") ||
g_str_has_prefix (key->connector, "LCD") || /* some versions of fglrx, sigh */
g_str_has_prefix (key->connector, "DSI") ||
g_str_has_prefix (key->connector, "eDP");
}
static gboolean
output_is_laptop (MetaOutput *output)
{
/* FIXME: extend with better heuristics */
switch (output->connector_type)
{
case META_CONNECTOR_TYPE_eDP:
case META_CONNECTOR_TYPE_LVDS:
return TRUE;
default:
return FALSE;
}
}
static gboolean
laptop_display_is_on (MetaConfiguration *config)
{
@@ -1041,17 +1051,6 @@ apply_configuration_with_lid (MetaMonitorConfig *self,
return apply_configuration (self, config, manager);
}
gboolean
meta_monitor_config_get_is_builtin_display_on (MetaMonitorConfig *self)
{
g_return_val_if_fail (META_IS_MONITOR_CONFIG (self), FALSE);
if (self->current)
return laptop_display_is_on (self->current);
return FALSE;
}
gboolean
meta_monitor_config_apply_stored (MetaMonitorConfig *self,
MetaMonitorManager *manager)
@@ -1093,7 +1092,7 @@ find_primary_output (MetaOutput *outputs,
for (i = 0; i < n_outputs; i++)
{
if (meta_output_is_laptop (&outputs[i]))
if (output_is_laptop (&outputs[i]))
return i;
}
@@ -1555,19 +1554,18 @@ meta_monitor_config_restore_previous (MetaMonitorConfig *self,
/* The user chose to restore the previous configuration. In this
* case, restore the previous configuration. */
MetaConfiguration *prev_config = config_ref (self->previous);
gboolean ok = apply_configuration (self, prev_config, manager);
apply_configuration (self, prev_config, manager);
config_unref (prev_config);
/* After this, self->previous contains the rejected configuration.
* Since it was rejected, nuke it. */
g_clear_pointer (&self->previous, (GDestroyNotify) config_unref);
if (ok)
return;
}
if (!meta_monitor_config_apply_stored (self, manager))
meta_monitor_config_make_default (self, manager);
else
{
if (!meta_monitor_config_apply_stored (self, manager))
meta_monitor_config_make_default (self, manager);
}
}
static void
@@ -2031,11 +2029,7 @@ meta_monitor_config_assign_crtcs (MetaConfiguration *config,
all_outputs = meta_monitor_manager_get_outputs (manager,
&n_outputs);
if (n_outputs != config->n_outputs)
{
g_hash_table_destroy (assignment.info);
return FALSE;
}
g_assert (n_outputs == config->n_outputs);
for (i = 0; i < n_outputs; i++)
{

View File

@@ -49,6 +49,4 @@ void meta_monitor_config_make_persistent (MetaMonitorConfig *confi
void meta_monitor_config_restore_previous (MetaMonitorConfig *config,
MetaMonitorManager *manager);
gboolean meta_monitor_config_get_is_builtin_display_on (MetaMonitorConfig *config);
#endif /* META_MONITOR_CONFIG_H */

View File

@@ -398,7 +398,6 @@ void meta_monitor_manager_confirm_configuration (MetaMonitorManag
void meta_output_parse_edid (MetaOutput *output,
GBytes *edid);
gboolean meta_output_is_laptop (MetaOutput *output);
void meta_crtc_info_free (MetaCRTCInfo *info);
void meta_output_info_free (MetaOutputInfo *info);

View File

@@ -511,8 +511,14 @@ make_display_name (MetaMonitorManager *manager,
g_autofree char *inches = NULL;
g_autofree char *vendor_name = NULL;
if (meta_output_is_laptop (output))
switch (output->connector_type)
{
case META_CONNECTOR_TYPE_LVDS:
case META_CONNECTOR_TYPE_eDP:
return g_strdup (_("Built-in display"));
default:
break;
}
if (output->width_mm > 0 && output->height_mm > 0)
{
@@ -1458,21 +1464,6 @@ meta_output_parse_edid (MetaOutput *meta_output,
meta_output->serial = g_strdup ("unknown");
}
gboolean
meta_output_is_laptop (MetaOutput *output)
{
/* FIXME: extend with better heuristics */
switch (output->connector_type)
{
case META_CONNECTOR_TYPE_eDP:
case META_CONNECTOR_TYPE_LVDS:
case META_CONNECTOR_TYPE_DSI:
return TRUE;
default:
return FALSE;
}
}
void
meta_monitor_manager_on_hotplug (MetaMonitorManager *manager)
{
@@ -1599,11 +1590,3 @@ meta_monitor_manager_get_monitor_at_point (MetaMonitorManager *manager,
return -1;
}
gboolean
meta_monitor_manager_get_is_builtin_display_on (MetaMonitorManager *manager)
{
g_return_val_if_fail (META_IS_MONITOR_MANAGER (manager), FALSE);
return meta_monitor_config_get_is_builtin_display_on (manager->config);
}

View File

@@ -152,7 +152,6 @@ file_loaded (GObject *source_object,
{
MetaBackgroundImage *image = META_BACKGROUND_IMAGE (source_object);
GError *error = NULL;
CoglError *catch_error = NULL;
GTask *task;
CoglTexture *texture;
GdkPixbuf *pixbuf;
@@ -187,10 +186,9 @@ file_loaded (GObject *source_object,
has_alpha ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
row_stride,
pixels, 0,
&catch_error))
NULL))
{
g_warning ("Failed to create texture for background");
cogl_error_free (catch_error);
cogl_object_unref (texture);
}

View File

@@ -17,7 +17,6 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#include <meta/util.h>
#include <meta/meta-background.h>
#include <meta/meta-background-image.h>
#include "meta-background-private.h"
@@ -543,7 +542,6 @@ ensure_color_texture (MetaBackground *self)
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
CoglError *error = NULL;
uint8_t pixels[6];
int width, height;
@@ -584,13 +582,7 @@ ensure_color_texture (MetaBackground *self)
COGL_PIXEL_FORMAT_RGB_888,
width * 3,
pixels,
&error));
if (error != NULL)
{
meta_warning ("Failed to allocate color texture: %s\n", error->message);
cogl_error_free (error);
}
NULL));
}
}

View File

@@ -27,7 +27,6 @@
#include <string.h>
#include <meta/meta-shadow-factory.h>
#include <meta/util.h>
#include "cogl-utils.h"
#include "region-utils.h"
@@ -708,7 +707,6 @@ make_shadow (MetaShadow *shadow,
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
CoglError *error = NULL;
int d = get_box_filter_size (shadow->key.radius);
int spread = get_shadow_spread (shadow->key.radius);
cairo_rectangle_int_t extents;
@@ -806,13 +804,7 @@ make_shadow (MetaShadow *shadow,
(buffer +
(y_offset - shadow->outer_border_top) * buffer_width +
(x_offset - shadow->outer_border_left)),
&error));
if (error)
{
meta_warning ("Failed to allocate shadow texture: %s\n", error->message);
cogl_error_free (error);
}
NULL));
cairo_region_destroy (row_convolve_region);
cairo_region_destroy (column_convolve_region);

View File

@@ -102,7 +102,8 @@ detach_pixmap (MetaSurfaceActorX11 *self)
priv->pixmap = None;
meta_error_trap_pop (display);
g_clear_pointer (&priv->texture, cogl_object_unref);
cogl_object_unref (priv->texture);
priv->texture = NULL;
}
static void
@@ -113,20 +114,14 @@ set_pixmap (MetaSurfaceActorX11 *self,
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
CoglError *error = NULL;
CoglTexture *texture;
g_assert (priv->pixmap == None);
priv->pixmap = pixmap;
texture = COGL_TEXTURE (cogl_texture_pixmap_x11_new (ctx, priv->pixmap, FALSE, &error));
texture = COGL_TEXTURE (cogl_texture_pixmap_x11_new (ctx, priv->pixmap, FALSE, NULL));
if (error != NULL)
{
g_warning ("Failed to allocate stex texture: %s", error->message);
cogl_error_free (error);
}
else if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (COGL_TEXTURE_PIXMAP_X11 (texture))))
if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (COGL_TEXTURE_PIXMAP_X11 (texture))))
g_warning ("NOTE: Not using GLX TFP!\n");
priv->texture = texture;

View File

@@ -25,7 +25,7 @@ struct _MetaSurfaceActorPrivate
cairo_region_t *input_region;
/* Freeze/thaw accounting */
cairo_region_t *pending_damage;
guint needs_damage_all : 1;
guint frozen : 1;
};
@@ -261,8 +261,9 @@ meta_surface_actor_process_damage (MetaSurfaceActor *self,
* here on the off chance that this will stop the corresponding
* texture_from_pixmap from being update.
*
* pending_damage tracks any damage that happened while the window was
* frozen so that when can apply it when the window becomes unfrozen.
* needs_damage_all tracks that some unknown damage happened while the
* window was frozen so that when the window becomes unfrozen we can
* issue a full window update to cover any lost damage.
*
* It should be noted that this is an unreliable mechanism since it's
* quite likely that drivers will aim to provide a zero-copy
@@ -270,12 +271,7 @@ meta_surface_actor_process_damage (MetaSurfaceActor *self,
* any drawing done to the window is always immediately reflected in the
* texture regardless of damage event handling.
*/
cairo_rectangle_int_t rect = { .x = x, .y = y, .width = width, .height = height };
if (!priv->pending_damage)
priv->pending_damage = cairo_region_create_rectangle (&rect);
else
cairo_region_union_rectangle (priv->pending_damage, &rect);
priv->needs_damage_all = TRUE;
return;
}
@@ -336,21 +332,16 @@ meta_surface_actor_set_frozen (MetaSurfaceActor *self,
priv->frozen = frozen;
if (!frozen && priv->pending_damage)
if (!frozen && priv->needs_damage_all)
{
int i, n_rects = cairo_region_num_rectangles (priv->pending_damage);
cairo_rectangle_int_t rect;
/* Since we ignore damage events while a window is frozen for certain effects
* we need to apply the tracked damage now. */
* we may need to issue an update_area() covering the whole pixmap if we
* don't know what real damage has happened. */
for (i = 0; i < n_rects; i++)
{
cairo_region_get_rectangle (priv->pending_damage, i, &rect);
meta_surface_actor_process_damage (self, rect.x, rect.y,
rect.width, rect.height);
}
g_clear_pointer (&priv->pending_damage, cairo_region_destroy);
meta_surface_actor_process_damage (self, 0, 0,
clutter_actor_get_width (CLUTTER_ACTOR (priv->texture)),
clutter_actor_get_height (CLUTTER_ACTOR (priv->texture)));
priv->needs_damage_all = FALSE;
}
}

View File

@@ -817,13 +817,6 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
meta_window_is_fullscreen (priv->window))
return FALSE;
/*
* If we have two snap-tiled windows, we don't want the shadow to obstruct
* the other window.
*/
if (meta_window_get_tile_match (priv->window))
return FALSE;
/*
* Always put a shadow around windows with a frame - This should override
* the restriction about not putting a shadow around ARGB windows.
@@ -1752,17 +1745,9 @@ build_and_scan_frame_mask (MetaWindowActor *self,
}
else
{
CoglError *error = NULL;
mask_texture = COGL_TEXTURE (cogl_texture_2d_new_from_data (ctx, tex_width, tex_height,
COGL_PIXEL_FORMAT_A_8,
stride, mask_data, &error));
if (error)
{
g_warning ("Failed to allocate mask texture: %s", error->message);
cogl_error_free (error);
}
stride, mask_data, NULL));
}
meta_shaped_texture_set_mask_texture (stex, mask_texture);

View File

@@ -97,7 +97,7 @@ typedef enum
PRIORITY_ENTIRELY_VISIBLE_ON_WORKAREA = 1,
PRIORITY_SIZE_HINTS_INCREMENTS = 1,
PRIORITY_MAXIMIZATION = 2,
PRIORITY_TILING = 2,
PRIORITY_CONSTRAINED_EDGES = 2,
PRIORITY_FULLSCREEN = 2,
PRIORITY_SIZE_HINTS_LIMITS = 3,
PRIORITY_TITLEBAR_VISIBLE = 4,
@@ -152,7 +152,7 @@ static gboolean constrain_maximization (MetaWindow *window,
ConstraintInfo *info,
ConstraintPriority priority,
gboolean check_only);
static gboolean constrain_tiling (MetaWindow *window,
static gboolean constrain_constrained_edges (MetaWindow *window,
ConstraintInfo *info,
ConstraintPriority priority,
gboolean check_only);
@@ -213,7 +213,7 @@ typedef struct {
static const Constraint all_constraints[] = {
{constrain_modal_dialog, "constrain_modal_dialog"},
{constrain_maximization, "constrain_maximization"},
{constrain_tiling, "constrain_tiling"},
{constrain_constrained_edges, "constrain_constrained_edges"},
{constrain_fullscreen, "constrain_fullscreen"},
{constrain_size_increments, "constrain_size_increments"},
{constrain_size_limits, "constrain_size_limits"},
@@ -701,16 +701,11 @@ constrain_maximization (MetaWindow *window,
return TRUE;
/* Determine whether constraint applies; exit if it doesn't */
if ((!window->maximized_horizontally && !window->maximized_vertically) ||
META_WINDOW_TILED_SIDE_BY_SIDE (window))
if (!window->maximized_horizontally && !window->maximized_vertically)
return TRUE;
/* Calculate target_size = maximized size of (window + frame) */
if (META_WINDOW_TILED_MAXIMIZED (window))
{
meta_window_get_current_tile_area (window, &target_size);
}
else if (META_WINDOW_MAXIMIZED (window))
if (META_WINDOW_MAXIMIZED (window))
{
target_size = info->work_area_monitor;
}
@@ -773,58 +768,6 @@ constrain_maximization (MetaWindow *window,
return TRUE;
}
static gboolean
constrain_tiling (MetaWindow *window,
ConstraintInfo *info,
ConstraintPriority priority,
gboolean check_only)
{
MetaRectangle target_size;
MetaRectangle min_size, max_size;
gboolean hminbad, vminbad;
gboolean horiz_equal, vert_equal;
gboolean constraint_already_satisfied;
if (priority > PRIORITY_TILING)
return TRUE;
/* Determine whether constraint applies; exit if it doesn't */
if (!META_WINDOW_TILED_SIDE_BY_SIDE (window))
return TRUE;
/* Calculate target_size - as the tile previews need this as well, we
* use an external function for the actual calculation
*/
meta_window_get_current_tile_area (window, &target_size);
/* Check min size constraints; max size constraints are ignored as for
* maximized windows.
*/
get_size_limits (window, &min_size, &max_size);
hminbad = target_size.width < min_size.width;
vminbad = target_size.height < min_size.height;
if (hminbad || vminbad)
return TRUE;
/* Determine whether constraint is already satisfied; exit if it is */
horiz_equal = target_size.x == info->current.x &&
target_size.width == info->current.width;
vert_equal = target_size.y == info->current.y &&
target_size.height == info->current.height;
constraint_already_satisfied = horiz_equal && vert_equal;
if (check_only || constraint_already_satisfied)
return constraint_already_satisfied;
/*** Enforce constraint ***/
info->current.x = target_size.x;
info->current.width = target_size.width;
info->current.y = target_size.y;
info->current.height = target_size.height;
return TRUE;
}
static gboolean
constrain_fullscreen (MetaWindow *window,
ConstraintInfo *info,
@@ -860,6 +803,45 @@ constrain_fullscreen (MetaWindow *window,
return TRUE;
}
static gboolean
constrain_constrained_edges (MetaWindow *window,
ConstraintInfo *info,
ConstraintPriority priority,
gboolean check_only)
{
MetaRectangle monitor, new_rectangle;
gboolean constraint_already_satisfied;
if (priority > PRIORITY_CONSTRAINED_EDGES)
return TRUE;
/* Determine whether constraint applies; exit if it doesn't */
if (!window->constrained_edges)
return TRUE;
new_rectangle = info->current;
monitor = info->work_area_monitor;
if (window->constrained_edges & META_DIRECTION_LEFT)
new_rectangle.x = monitor.x;
if (window->constrained_edges & META_DIRECTION_RIGHT)
new_rectangle.x = monitor.x + monitor.width - new_rectangle.width;
if (window->constrained_edges & META_DIRECTION_TOP)
new_rectangle.y = monitor.y;
if (window->constrained_edges & META_DIRECTION_BOTTOM)
new_rectangle.y = monitor.y + monitor.height - new_rectangle.height;
constraint_already_satisfied =
meta_rectangle_equal (&info->current, &new_rectangle);
if (check_only || constraint_already_satisfied)
return constraint_already_satisfied;
/*** Enforce constraint ***/
info->current = new_rectangle;
return TRUE;
}
static gboolean
constrain_size_increments (MetaWindow *window,
ConstraintInfo *info,
@@ -877,7 +859,6 @@ constrain_size_increments (MetaWindow *window,
/* Determine whether constraint applies; exit if it doesn't */
if (META_WINDOW_MAXIMIZED (window) || window->fullscreen ||
META_WINDOW_TILED_SIDE_BY_SIDE (window) ||
info->action_type == ACTION_MOVE)
return TRUE;
@@ -1020,7 +1001,6 @@ constrain_aspect_ratio (MetaWindow *window,
constraints_are_inconsistent = minr > maxr;
if (constraints_are_inconsistent ||
META_WINDOW_MAXIMIZED (window) || window->fullscreen ||
META_WINDOW_TILED_SIDE_BY_SIDE (window) ||
info->action_type == ACTION_MOVE)
return TRUE;

View File

@@ -74,13 +74,6 @@ typedef enum {
*/
#define N_IGNORED_CROSSING_SERIALS 10
typedef enum {
META_TILE_NONE,
META_TILE_LEFT,
META_TILE_RIGHT,
META_TILE_MAXIMIZED
} MetaTileMode;
typedef enum {
/* Normal interaction where you're interacting with windows.
* Events go to windows normally. */
@@ -211,8 +204,6 @@ struct _MetaDisplay
int grab_anchor_root_x;
int grab_anchor_root_y;
MetaRectangle grab_anchor_window_pos;
MetaTileMode grab_tile_mode;
int grab_tile_monitor_number;
int grab_latest_motion_x;
int grab_latest_motion_y;
guint grab_have_pointer : 1;

View File

@@ -649,8 +649,6 @@ meta_display_open (void)
display->grab_op = META_GRAB_OP_NONE;
display->grab_window = NULL;
display->grab_tile_mode = META_TILE_NONE;
display->grab_tile_monitor_number = -1;
display->grab_edge_resistance_data = NULL;
@@ -1894,8 +1892,6 @@ meta_display_begin_grab_op (MetaDisplay *display,
display->grab_op = op;
display->grab_window = grab_window;
display->grab_button = button;
display->grab_tile_mode = grab_window->tile_mode;
display->grab_tile_monitor_number = grab_window->tile_monitor_number;
display->grab_anchor_root_x = root_x;
display->grab_anchor_root_y = root_y;
display->grab_latest_motion_x = root_x;
@@ -1993,8 +1989,6 @@ meta_display_end_grab_op (MetaDisplay *display,
display->event_route = META_EVENT_ROUTE_NORMAL;
display->grab_window = NULL;
display->grab_tile_mode = META_TILE_NONE;
display->grab_tile_monitor_number = -1;
meta_display_update_cursor (display);

View File

@@ -274,12 +274,6 @@ meta_frame_get_flags (MetaFrame *frame)
if (META_WINDOW_MAXIMIZED (frame->window))
flags |= META_FRAME_MAXIMIZED;
if (META_WINDOW_TILED_LEFT (frame->window))
flags |= META_FRAME_TILED_LEFT;
if (META_WINDOW_TILED_RIGHT (frame->window))
flags |= META_FRAME_TILED_RIGHT;
if (frame->window->fullscreen)
flags |= META_FRAME_FULLSCREEN;
@@ -289,6 +283,18 @@ meta_frame_get_flags (MetaFrame *frame)
if (frame->window->wm_state_above)
flags |= META_FRAME_ABOVE;
if (frame->window->constrained_edges & META_DIRECTION_LEFT)
flags |= META_FRAME_CONSTRAINED_LEFT_EDGE;
if (frame->window->constrained_edges & META_DIRECTION_RIGHT)
flags |= META_FRAME_CONSTRAINED_RIGHT_EDGE;
if (frame->window->constrained_edges & META_DIRECTION_TOP)
flags |= META_FRAME_CONSTRAINED_TOP_EDGE;
if (frame->window->constrained_edges & META_DIRECTION_BOTTOM)
flags |= META_FRAME_CONSTRAINED_BOTTOM_EDGE;
return flags;
}

View File

@@ -94,11 +94,8 @@ typedef struct
GHashTable *key_bindings_index;
xkb_mod_mask_t ignored_modifier_mask;
xkb_mod_mask_t hyper_mask;
xkb_mod_mask_t virtual_hyper_mask;
xkb_mod_mask_t super_mask;
xkb_mod_mask_t virtual_super_mask;
xkb_mod_mask_t meta_mask;
xkb_mod_mask_t virtual_meta_mask;
MetaKeyCombo overlay_key_combo;
MetaResolvedKeyCombo overlay_resolved_key_combo;
gboolean overlay_key_only_pressed;

View File

@@ -185,18 +185,16 @@ reload_modmap (MetaKeyBindingManager *keys)
struct xkb_keymap *keymap = meta_backend_get_keymap (backend);
struct xkb_state *scratch_state;
xkb_mod_mask_t scroll_lock_mask;
xkb_mod_mask_t dummy_mask;
/* Modifiers to find. */
struct {
const char *name;
xkb_mod_mask_t *mask_p;
xkb_mod_mask_t *virtual_mask_p;
} mods[] = {
{ "ScrollLock", &scroll_lock_mask, &dummy_mask },
{ "Meta", &keys->meta_mask, &keys->virtual_meta_mask },
{ "Hyper", &keys->hyper_mask, &keys->virtual_hyper_mask },
{ "Super", &keys->super_mask, &keys->virtual_super_mask },
{ "ScrollLock", &scroll_lock_mask },
{ "Meta", &keys->meta_mask },
{ "Hyper", &keys->hyper_mask },
{ "Super", &keys->super_mask },
};
scratch_state = xkb_state_new (keymap);
@@ -205,7 +203,6 @@ reload_modmap (MetaKeyBindingManager *keys)
for (i = 0; i < G_N_ELEMENTS (mods); i++)
{
xkb_mod_mask_t *mask_p = mods[i].mask_p;
xkb_mod_mask_t *virtual_mask_p = mods[i].virtual_mask_p;
xkb_mod_index_t idx = xkb_keymap_mod_get_index (keymap, mods[i].name);
if (idx != XKB_MOD_INVALID)
@@ -213,13 +210,9 @@ reload_modmap (MetaKeyBindingManager *keys)
xkb_mod_mask_t vmodmask = (1 << idx);
xkb_state_update_mask (scratch_state, vmodmask, 0, 0, 0, 0, 0);
*mask_p = xkb_state_serialize_mods (scratch_state, XKB_STATE_MODS_DEPRESSED) & ~vmodmask;
*virtual_mask_p = vmodmask;
}
else
{
*mask_p = 0;
*virtual_mask_p = 0;
}
*mask_p = 0;
}
xkb_state_unref (scratch_state);
@@ -904,9 +897,6 @@ meta_change_button_grab (MetaKeyBindingManager *keys,
int button,
int modmask)
{
if (meta_is_wayland_compositor ())
return;
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
@@ -979,6 +969,9 @@ meta_display_grab_window_buttons (MetaDisplay *display,
{
MetaKeyBindingManager *keys = &display->key_binding_manager;
if (meta_is_wayland_compositor ())
return;
/* Grab Alt + button1 for moving window.
* Grab Alt + button2 for resizing window.
* Grab Alt + button3 for popping up window menu.
@@ -1015,6 +1008,9 @@ meta_display_ungrab_window_buttons (MetaDisplay *display,
{
MetaKeyBindingManager *keys = &display->key_binding_manager;
if (meta_is_wayland_compositor ())
return;
if (keys->window_grab_modifiers == 0)
return;
@@ -1041,6 +1037,9 @@ meta_display_grab_focus_window_button (MetaDisplay *display,
{
MetaKeyBindingManager *keys = &display->key_binding_manager;
if (meta_is_wayland_compositor ())
return;
/* Grab button 1 for activating unfocused windows */
meta_verbose ("Grabbing unfocused window buttons for %s\n", window->desc);
@@ -1080,6 +1079,9 @@ meta_display_ungrab_focus_window_button (MetaDisplay *display,
{
MetaKeyBindingManager *keys = &display->key_binding_manager;
if (meta_is_wayland_compositor ())
return;
meta_verbose ("Ungrabbing unfocused window buttons for %s\n", window->desc);
if (!window->have_focus_click_grab)
@@ -1159,9 +1161,6 @@ meta_change_keygrab (MetaKeyBindingManager *keys,
XISetMask (mask.mask, XI_KeyPress);
XISetMask (mask.mask, XI_KeyRelease);
if (meta_is_wayland_compositor ())
return;
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
@@ -1276,6 +1275,11 @@ meta_screen_change_keygrabs (MetaScreen *screen,
void
meta_screen_grab_keys (MetaScreen *screen)
{
MetaBackend *backend = meta_get_backend ();
if (!META_IS_BACKEND_X11 (backend))
return;
if (screen->keys_grabbed)
return;
@@ -1309,6 +1313,10 @@ meta_window_grab_keys (MetaWindow *window)
MetaDisplay *display = window->display;
MetaKeyBindingManager *keys = &display->key_binding_manager;
/* Under Wayland, we don't need to grab at all. */
if (meta_is_wayland_compositor ())
return;
if (window->all_keys_grabbed)
return;
@@ -1376,11 +1384,12 @@ guint
meta_display_grab_accelerator (MetaDisplay *display,
const char *accelerator)
{
MetaBackend *backend = meta_get_backend ();
MetaKeyBindingManager *keys = &display->key_binding_manager;
MetaKeyBinding *binding;
MetaKeyGrab *grab;
MetaKeyCombo combo = { 0 };
MetaResolvedKeyCombo resolved_combo = { 0 };
MetaKeyCombo combo;
MetaResolvedKeyCombo resolved_combo;
if (!meta_parse_accelerator (accelerator, &combo))
{
@@ -1399,7 +1408,8 @@ meta_display_grab_accelerator (MetaDisplay *display,
if (get_keybinding (keys, &resolved_combo))
return META_KEYBINDING_ACTION_NONE;
meta_change_keygrab (keys, display->screen->xroot, TRUE, &resolved_combo);
if (META_IS_BACKEND_X11 (backend))
meta_change_keygrab (keys, display->screen->xroot, TRUE, &resolved_combo);
grab = g_new0 (MetaKeyGrab, 1);
grab->action = next_dynamic_keybinding_action ();
@@ -1424,6 +1434,7 @@ gboolean
meta_display_ungrab_accelerator (MetaDisplay *display,
guint action)
{
MetaBackend *backend = meta_get_backend ();
MetaKeyBindingManager *keys = &display->key_binding_manager;
MetaKeyBinding *binding;
MetaKeyGrab *grab;
@@ -1443,7 +1454,8 @@ meta_display_ungrab_accelerator (MetaDisplay *display,
{
guint32 index_key;
meta_change_keygrab (keys, display->screen->xroot, FALSE, &binding->resolved_combo);
if (META_IS_BACKEND_X11 (backend))
meta_change_keygrab (keys, display->screen->xroot, FALSE, &binding->resolved_combo);
index_key = key_combo_key (&binding->resolved_combo);
g_hash_table_remove (keys->key_bindings_index, GINT_TO_POINTER (index_key));
@@ -1470,9 +1482,6 @@ grab_keyboard (Window xwindow,
XISetMask (mask.mask, XI_KeyPress);
XISetMask (mask.mask, XI_KeyRelease);
if (meta_is_wayland_compositor ())
return TRUE;
/* Grab the keyboard, so we get key releases and all key
* presses
*/
@@ -1504,9 +1513,6 @@ grab_keyboard (Window xwindow,
static void
ungrab_keyboard (guint32 timestamp)
{
if (meta_is_wayland_compositor ())
return;
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
@@ -1519,6 +1525,10 @@ meta_window_grab_all_keys (MetaWindow *window,
{
Window grabwindow;
gboolean retval;
MetaBackend *backend = meta_get_backend ();
if (!META_IS_BACKEND_X11 (backend))
return TRUE;
if (window->all_keys_grabbed)
return FALSE;
@@ -1580,6 +1590,11 @@ meta_display_freeze_keyboard (MetaDisplay *display, guint32 timestamp)
void
meta_display_ungrab_keyboard (MetaDisplay *display, guint32 timestamp)
{
MetaBackend *backend = meta_get_backend ();
if (!META_IS_BACKEND_X11 (backend))
return;
ungrab_keyboard (timestamp);
}
@@ -1986,23 +2001,13 @@ process_mouse_move_resize_grab (MetaDisplay *display,
if (event->keyval == CLUTTER_KEY_Escape)
{
/* Hide the tiling preview if necessary */
if (window->tile_mode != META_TILE_NONE)
meta_screen_hide_tile_preview (screen);
/* Restore the original tile mode */
window->tile_mode = display->grab_tile_mode;
window->tile_monitor_number = display->grab_tile_monitor_number;
/* End move or resize and restore to original state. If the
* window was a maximized window that had been "shaken loose" we
* need to remaximize it. In normal cases, we need to do a
* moveresize now to get the position back to the original.
*/
if (window->shaken_loose || window->tile_mode == META_TILE_MAXIMIZED)
if (window->shaken_loose)
meta_window_maximize (window, META_MAXIMIZE_BOTH);
else if (window->tile_mode != META_TILE_NONE)
meta_window_tile (window);
else
meta_window_move_resize_frame (display->grab_window,
TRUE,
@@ -2924,41 +2929,25 @@ handle_toggle_above (MetaDisplay *display,
}
static void
handle_toggle_tiled (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
ClutterKeyEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
handle_toggle_tiled_left (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
ClutterKeyEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
{
MetaTileMode mode = binding->handler->data;
meta_window_toggle_tile (window, META_TILE_ZONE_W);
}
if ((META_WINDOW_TILED_LEFT (window) && mode == META_TILE_LEFT) ||
(META_WINDOW_TILED_RIGHT (window) && mode == META_TILE_RIGHT))
{
window->tile_monitor_number = window->saved_maximize ? window->monitor->number
: -1;
window->tile_mode = window->saved_maximize ? META_TILE_MAXIMIZED
: META_TILE_NONE;
if (window->saved_maximize)
meta_window_maximize (window, META_MAXIMIZE_BOTH);
else
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
}
else if (meta_window_can_tile_side_by_side (window))
{
window->tile_monitor_number = window->monitor->number;
window->tile_mode = mode;
/* Maximization constraints beat tiling constraints, so if the window
* is maximized, tiling won't have any effect unless we unmaximize it
* horizontally first; rather than calling meta_window_unmaximize(),
* we just set the flag and rely on meta_window_tile() syncing it to
* save an additional roundtrip.
*/
window->maximized_horizontally = FALSE;
meta_window_tile (window);
}
static void
handle_toggle_tiled_right (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
ClutterKeyEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
{
meta_window_toggle_tile (window, META_TILE_ZONE_E);
}
static void
@@ -3691,14 +3680,14 @@ init_builtin_key_bindings (MetaDisplay *display)
mutter_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
handle_toggle_tiled, META_TILE_LEFT);
handle_toggle_tiled_left, 0);
add_builtin_keybinding (display,
"toggle-tiled-right",
mutter_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
handle_toggle_tiled, META_TILE_RIGHT);
handle_toggle_tiled_right, 0);
add_builtin_keybinding (display,
"toggle-above",

View File

@@ -326,10 +326,6 @@ gboolean
meta_parse_accelerator (const char *accel,
MetaKeyCombo *combo)
{
g_return_val_if_fail (combo != NULL, FALSE);
*combo = (MetaKeyCombo) { 0 };
if (!accel[0] || strcmp (accel, "disabled") == 0)
return TRUE;
@@ -340,11 +336,7 @@ gboolean
meta_parse_modifier (const char *accel,
MetaVirtualModifier *mask)
{
MetaKeyCombo combo = { 0 };
g_return_val_if_fail (mask != NULL, FALSE);
*mask = 0;
MetaKeyCombo combo;
if (accel == NULL || !accel[0] || strcmp (accel, "disabled") == 0)
return TRUE;

View File

@@ -57,7 +57,13 @@ struct _MetaScreen
MetaRectangle rect; /* Size of screen; rect.x & rect.y are always 0 */
MetaUI *ui;
guint tile_preview_timeout_id;
struct {
gboolean exists;
guint timeout_id;
MetaWindow *window;
MetaRectangle area;
int monitor;
} tile_preview;
MetaWorkspace *active_workspace;
@@ -132,9 +138,12 @@ void meta_screen_foreach_window (MetaScreen *scree
void meta_screen_update_cursor (MetaScreen *screen);
void meta_screen_update_tile_preview (MetaScreen *screen,
gboolean delay);
void meta_screen_hide_tile_preview (MetaScreen *screen);
void meta_screen_update_tile_preview (MetaScreen *screen,
MetaWindow *window,
MetaRectangle area,
int monitor,
gboolean delay);
void meta_screen_hide_tile_preview (MetaScreen *screen);
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
MetaWindow *not_this_one);

View File

@@ -718,8 +718,6 @@ meta_screen_new (MetaDisplay *display,
screen->ui = meta_ui_new (screen->display->xdisplay,
screen->xscreen);
screen->tile_preview_timeout_id = 0;
screen->stack = meta_stack_new (screen);
screen->stack_tracker = meta_stack_tracker_new (screen);
@@ -807,8 +805,8 @@ meta_screen_free (MetaScreen *screen,
g_free (screen->monitor_infos);
if (screen->tile_preview_timeout_id)
g_source_remove (screen->tile_preview_timeout_id);
if (screen->tile_preview.timeout_id)
g_source_remove (screen->tile_preview.timeout_id);
g_free (screen->screen_name);
@@ -1288,44 +1286,20 @@ static gboolean
meta_screen_update_tile_preview_timeout (gpointer data)
{
MetaScreen *screen = data;
MetaWindow *window = screen->display->grab_window;
gboolean needs_preview = FALSE;
screen->tile_preview_timeout_id = 0;
screen->tile_preview.timeout_id = 0;
if (window)
if (screen->tile_preview.exists)
{
switch (window->tile_mode)
{
case META_TILE_LEFT:
case META_TILE_RIGHT:
if (!META_WINDOW_TILED_SIDE_BY_SIDE (window))
needs_preview = TRUE;
break;
case META_TILE_MAXIMIZED:
if (!META_WINDOW_MAXIMIZED (window))
needs_preview = TRUE;
break;
default:
needs_preview = FALSE;
break;
}
}
if (needs_preview)
{
MetaRectangle tile_rect;
int monitor;
monitor = meta_window_get_current_tile_monitor_number (window);
meta_window_get_current_tile_area (window, &tile_rect);
meta_compositor_show_tile_preview (screen->display->compositor,
window, &tile_rect, monitor);
screen->tile_preview.window,
&screen->tile_preview.area,
screen->tile_preview.monitor);
}
else
meta_compositor_hide_tile_preview (screen->display->compositor);
{
meta_compositor_hide_tile_preview (screen->display->compositor);
}
return FALSE;
}
@@ -1333,37 +1307,47 @@ meta_screen_update_tile_preview_timeout (gpointer data)
#define TILE_PREVIEW_TIMEOUT_MS 200
void
meta_screen_update_tile_preview (MetaScreen *screen,
gboolean delay)
meta_screen_update_tile_preview (MetaScreen *screen,
MetaWindow *window,
MetaRectangle area,
int monitor,
gboolean delay)
{
screen->tile_preview.exists = TRUE;
screen->tile_preview.window = window;
screen->tile_preview.area = area;
screen->tile_preview.monitor = monitor;
if (delay)
{
if (screen->tile_preview_timeout_id > 0)
if (screen->tile_preview.timeout_id > 0)
return;
screen->tile_preview_timeout_id =
screen->tile_preview.timeout_id =
g_timeout_add (TILE_PREVIEW_TIMEOUT_MS,
meta_screen_update_tile_preview_timeout,
screen);
g_source_set_name_by_id (screen->tile_preview_timeout_id,
g_source_set_name_by_id (screen->tile_preview.timeout_id,
"[mutter] meta_screen_update_tile_preview_timeout");
}
else
{
if (screen->tile_preview_timeout_id > 0)
g_source_remove (screen->tile_preview_timeout_id);
if (screen->tile_preview.timeout_id > 0)
g_source_remove (screen->tile_preview.timeout_id);
meta_screen_update_tile_preview_timeout ((gpointer)screen);
meta_screen_update_tile_preview_timeout ((gpointer) screen);
}
}
void
meta_screen_hide_tile_preview (MetaScreen *screen)
{
if (screen->tile_preview_timeout_id > 0)
g_source_remove (screen->tile_preview_timeout_id);
screen->tile_preview.exists = FALSE;
meta_compositor_hide_tile_preview (screen->display->compositor);
if (screen->tile_preview.timeout_id > 0)
g_source_remove (screen->tile_preview.timeout_id);
meta_screen_update_tile_preview_timeout ((gpointer) screen);
}
MetaWindow*

View File

@@ -117,7 +117,6 @@ meta_stack_add (MetaStack *stack,
window->desc, window->stack_position);
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@@ -153,7 +152,6 @@ meta_stack_remove (MetaStack *stack,
GUINT_TO_POINTER (window->frame->xwindow));
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@@ -163,7 +161,6 @@ meta_stack_update_layer (MetaStack *stack,
stack->need_relayer = TRUE;
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@@ -173,7 +170,6 @@ meta_stack_update_transient (MetaStack *stack,
stack->need_constrain = TRUE;
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
/* raise/lower within a layer */
@@ -202,7 +198,6 @@ meta_stack_raise (MetaStack *stack,
meta_window_set_stack_position_no_sync (window, max_stack_position);
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@@ -230,7 +225,6 @@ meta_stack_lower (MetaStack *stack,
meta_window_set_stack_position_no_sync (window, min_stack_position);
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@@ -246,27 +240,6 @@ meta_stack_thaw (MetaStack *stack)
stack->freeze_count -= 1;
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, NULL);
}
void
meta_stack_update_window_tile_matches (MetaStack *stack,
MetaWorkspace *workspace)
{
GList *windows, *tmp;
if (stack->freeze_count > 0)
return;
windows = meta_stack_list_windows (stack, workspace);
tmp = windows;
while (tmp)
{
meta_window_compute_tile_match ((MetaWindow *) tmp->data);
tmp = tmp->next;
}
g_list_free (windows);
}
static gboolean
@@ -1061,7 +1034,7 @@ stack_sync_to_xserver (MetaStack *stack)
for (tmp = g_list_last(stack->sorted); tmp != NULL; tmp = tmp->prev)
{
MetaWindow *w = tmp->data;
guint64 top_level_window;
Window top_level_window;
guint64 stack_id;
if (w->unmanaging)
@@ -1100,8 +1073,7 @@ stack_sync_to_xserver (MetaStack *stack)
/* The screen guard window sits above all hidden windows and acts as
* a barrier to input reaching these windows. */
guint64 guard_window_id = stack->screen->guard_window;
g_array_append_val (x11_hidden_stack_ids, guard_window_id);
g_array_append_val (x11_hidden_stack_ids, stack->screen->guard_window);
/* Sync to server */
@@ -1449,7 +1421,6 @@ meta_stack_set_positions (MetaStack *stack,
"Reset the stack positions of (nearly) all windows\n");
stack_sync_to_xserver (stack);
meta_stack_update_window_tile_matches (stack, NULL);
}
void
@@ -1512,6 +1483,4 @@ meta_window_set_stack_position (MetaWindow *window,
{
meta_window_set_stack_position_no_sync (window, position);
stack_sync_to_xserver (window->screen->stack);
meta_stack_update_window_tile_matches (window->screen->stack,
window->screen->active_workspace);
}

View File

@@ -413,6 +413,4 @@ GList* meta_stack_get_positions (MetaStack *stack);
void meta_stack_set_positions (MetaStack *stack,
GList *windows);
void meta_stack_update_window_tile_matches (MetaStack *stack,
MetaWorkspace *workspace);
#endif

View File

@@ -88,6 +88,20 @@ typedef enum
META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED = 1 << 2,
} MetaMoveResizeResultFlags;
/* This contains all the "state" needed for a certain size configuration.
* We have three of these size configurations: normal, tiled, and
* maximized. The idea here is that if the user tiles a normal window,
* then maximizes it, we should, upon unmaximizing and untiling the window,
* return to a normal state. We need a way of storing this information
* while maximized, so we use this structure. */
struct _MetaWindowSizeState
{
guint maximized_horizontally : 1;
guint maximized_vertically : 1;
MetaRectangle rect;
};
typedef struct _MetaWindowSizeState MetaWindowSizeState;
struct _MetaWindow
{
GObject parent_instance;
@@ -157,14 +171,6 @@ struct _MetaWindow
guint maximize_vertically_after_placement : 1;
guint minimize_after_placement : 1;
/* The current or requested tile mode. If maximized_vertically is true,
* this is the current mode. If not, it is the mode which will be
* requested after the window grab is released */
guint tile_mode : 2;
/* The last "full" maximized/unmaximized state. We need to keep track of
* that to toggle between normal/tiled or maximized/tiled states. */
guint saved_maximize : 1;
int tile_monitor_number;
int preferred_output_winsys_id;
/* Whether we're shaded */
@@ -401,9 +407,6 @@ struct _MetaWindow
/* The current window geometry of the window. */
MetaRectangle rect;
/* The geometry to restore when we unmaximize. */
MetaRectangle saved_rect;
/* This is the geometry the window will have if no constraints have
* applied. We use this whenever we are moving implicitly (for example,
* if we move to avoid a panel, we can snap back to this position if
@@ -441,11 +444,16 @@ struct _MetaWindow
/* Focused window that is (directly or indirectly) attached to this one */
MetaWindow *attached_focus_window;
/* The currently complementary tiled window, if any */
MetaWindow *tile_match;
/* Bypass compositor hints */
guint bypass_compositor;
/* This is where we store data while in another state. The information
* above in MetaWindow is always the current state of the window. */
struct {
MetaWindowSizeState normal, tiled, maximized;
} size_states;
MetaDirection constrained_edges;
};
struct _MetaWindowClass
@@ -492,17 +500,8 @@ struct _MetaWindowClass
(w)->maximized_vertically)
#define META_WINDOW_MAXIMIZED_VERTICALLY(w) ((w)->maximized_vertically)
#define META_WINDOW_MAXIMIZED_HORIZONTALLY(w) ((w)->maximized_horizontally)
#define META_WINDOW_TILED_SIDE_BY_SIDE(w) ((w)->maximized_vertically && \
!(w)->maximized_horizontally && \
(w)->tile_mode != META_TILE_NONE)
#define META_WINDOW_TILED_LEFT(w) (META_WINDOW_TILED_SIDE_BY_SIDE(w) && \
(w)->tile_mode == META_TILE_LEFT)
#define META_WINDOW_TILED_RIGHT(w) (META_WINDOW_TILED_SIDE_BY_SIDE(w) && \
(w)->tile_mode == META_TILE_RIGHT)
#define META_WINDOW_TILED_MAXIMIZED(w)(META_WINDOW_MAXIMIZED(w) && \
(w)->tile_mode == META_TILE_MAXIMIZED)
#define META_WINDOW_ALLOWS_MOVE(w) ((w)->has_move_func && !(w)->fullscreen)
#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w) ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !META_WINDOW_TILED_SIDE_BY_SIDE(w) && !(w)->fullscreen && !(w)->shaded)
#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w) ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !(w)->fullscreen && !(w)->shaded)
#define META_WINDOW_ALLOWS_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && \
(((w)->size_hints.min_width < (w)->size_hints.max_width) || \
((w)->size_hints.min_height < (w)->size_hints.max_height)))
@@ -522,7 +521,6 @@ void meta_window_unmanage (MetaWindow *window,
guint32 timestamp);
void meta_window_queue (MetaWindow *window,
guint queuebits);
void meta_window_tile (MetaWindow *window);
void meta_window_maximize_internal (MetaWindow *window,
MetaMaximizeFlags directions,
MetaRectangle *saved_rect);
@@ -584,11 +582,6 @@ gboolean meta_window_handle_mouse_grab_op_event (MetaWindow *window,
GList* meta_window_get_workspaces (MetaWindow *window);
int meta_window_get_current_tile_monitor_number (MetaWindow *window);
void meta_window_get_current_tile_area (MetaWindow *window,
MetaRectangle *tile_area);
gboolean meta_window_same_application (MetaWindow *window,
MetaWindow *other_window);
@@ -626,9 +619,6 @@ void meta_window_update_for_monitors_changed (MetaWindow *window);
void meta_window_on_all_workspaces_changed (MetaWindow *window);
gboolean meta_window_should_attach_to_parent (MetaWindow *window);
gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
void meta_window_compute_tile_match (MetaWindow *window);
gboolean meta_window_updates_are_frozen (MetaWindow *window);
@@ -695,4 +685,7 @@ gboolean meta_window_has_pointer (MetaWindow *window);
void meta_window_emit_size_changed (MetaWindow *window);
void meta_window_toggle_tile (MetaWindow *window,
MetaTileZone tile_zone);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -83,7 +83,11 @@ typedef enum
META_FRAME_IS_FLASHING = 1 << 14,
META_FRAME_ABOVE = 1 << 15,
META_FRAME_TILED_LEFT = 1 << 16,
META_FRAME_TILED_RIGHT = 1 << 17
META_FRAME_TILED_RIGHT = 1 << 17,
META_FRAME_CONSTRAINED_LEFT_EDGE = 1 << 18,
META_FRAME_CONSTRAINED_RIGHT_EDGE = 1 << 19,
META_FRAME_CONSTRAINED_TOP_EDGE = 1 << 20,
META_FRAME_CONSTRAINED_BOTTOM_EDGE = 1 << 21,
} MetaFrameFlags;
/**
@@ -317,6 +321,26 @@ typedef enum
META_DIRECTION_VERTICAL = META_DIRECTION_UP | META_DIRECTION_DOWN,
} MetaDirection;
/* Tile zones are specified in terms of their constrained edges.
* So, "top left corner" is top and left, which should be obvious,
* but "left side of the screen" is top, bottom, and left
*/
typedef enum {
META_TILE_ZONE_MAXIMIZED_HORZ = META_DIRECTION_HORIZONTAL,
META_TILE_ZONE_MAXIMIZED_VERT = META_DIRECTION_VERTICAL,
META_TILE_ZONE_MAXIMIZED = META_TILE_ZONE_MAXIMIZED_HORZ | META_TILE_ZONE_MAXIMIZED_VERT,
META_TILE_ZONE_W = META_TILE_ZONE_MAXIMIZED_VERT | META_DIRECTION_LEFT,
META_TILE_ZONE_E = META_TILE_ZONE_MAXIMIZED_VERT | META_DIRECTION_RIGHT,
META_TILE_ZONE_N = META_TILE_ZONE_MAXIMIZED_HORZ | META_DIRECTION_TOP,
META_TILE_ZONE_S = META_TILE_ZONE_MAXIMIZED_HORZ | META_DIRECTION_BOTTOM,
META_TILE_ZONE_NW = META_DIRECTION_TOP | META_DIRECTION_LEFT,
META_TILE_ZONE_NE = META_DIRECTION_TOP | META_DIRECTION_RIGHT,
META_TILE_ZONE_SW = META_DIRECTION_BOTTOM | META_DIRECTION_LEFT,
META_TILE_ZONE_SE = META_DIRECTION_BOTTOM | META_DIRECTION_RIGHT,
} MetaTileZone;
/**
* MetaMotionDirection:
* @META_MOTION_UP: Upwards motion

View File

@@ -34,6 +34,4 @@ MetaMonitorManager *meta_monitor_manager_get (void);
gint meta_monitor_manager_get_monitor_for_output (MetaMonitorManager *manager,
guint id);
gboolean meta_monitor_manager_get_is_builtin_display_on (MetaMonitorManager *manager);
#endif /* META_MONITOR_MANAGER_H */

View File

@@ -214,8 +214,6 @@ MetaFrameType meta_window_get_frame_type (MetaWindow *window);
cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window);
MetaWindow *meta_window_get_tile_match (MetaWindow *window);
void meta_window_make_fullscreen (MetaWindow *window);
void meta_window_unmake_fullscreen (MetaWindow *window);
void meta_window_make_above (MetaWindow *window);
@@ -260,4 +258,8 @@ gboolean meta_window_is_client_decorated (MetaWindow *window);
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
void meta_window_tile (MetaWindow *window,
MetaTileZone tile_zone);
void meta_window_untile (MetaWindow *window);
#endif

View File

@@ -1114,7 +1114,6 @@ handle_button_release_event (MetaUIFrame *frame,
{
Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
frame->frames->current_grab_op = META_GRAB_OP_NONE;
meta_core_end_grab_op (display, event->time);
/* We only handle the releases we handled the presses for (things
@@ -1293,7 +1292,7 @@ get_visible_frame_border_region (MetaUIFrame *frame)
MetaFrameFlags flags;
MetaFrameType type;
MetaFrameBorders borders;
MetaRectangle buffer_rect = frame->meta_window->buffer_rect;
MetaRectangle frame_rect = frame->meta_window->rect;
flags = meta_frame_get_flags (frame->meta_window->frame);
type = meta_window_get_frame_type (frame->meta_window);
@@ -1302,19 +1301,19 @@ get_visible_frame_border_region (MetaUIFrame *frame)
type, frame->text_height, flags,
&borders);
/* Frame rect */
area.x = 0;
area.y = 0;
area.width = buffer_rect.width;
area.height = buffer_rect.height;
/* Visible frame rect */
area.x = borders.invisible.left;
area.y = borders.invisible.top;
area.width = frame_rect.width;
area.height = frame_rect.height;
frame_border = cairo_region_create_rectangle (&area);
/* Client rect */
area.x += borders.total.left;
area.y += borders.total.top;
area.width -= borders.total.left + borders.total.right;
area.height -= borders.total.top + borders.total.bottom;
area.x += borders.visible.left;
area.y += borders.visible.top;
area.width -= borders.visible.left + borders.visible.right;
area.height -= borders.visible.top + borders.visible.bottom;
/* Visible frame border */
cairo_region_subtract_rectangle (frame_border, &area);
@@ -1404,13 +1403,6 @@ meta_frames_draw (GtkWidget *widget,
gdk_cairo_region (cr, region);
cairo_clip (cr);
/* The target may be cleared to black or transparent, depending
* on the frame's visual; we don't want decorations to appear
* differently when the theme's decorations aren't fully opaque,
* so clear to black first
*/
cairo_paint (cr);
meta_ui_frame_paint (frame, cr);
cairo_region_destroy (region);

View File

@@ -100,22 +100,25 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,
if (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE)
{
borders->invisible.left = MAX (borders->invisible.left,
draggable_borders - borders->visible.left);
borders->invisible.right = MAX (borders->invisible.right,
draggable_borders - borders->visible.right);
if (!(flags & META_FRAME_CONSTRAINED_LEFT_EDGE))
borders->invisible.left = MAX (borders->invisible.left,
draggable_borders - borders->visible.left);
if (!(flags & META_FRAME_CONSTRAINED_RIGHT_EDGE))
borders->invisible.right = MAX (borders->invisible.right,
draggable_borders - borders->visible.right);
}
if (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE)
{
borders->invisible.bottom = MAX (borders->invisible.bottom,
draggable_borders - borders->visible.bottom);
/* borders.visible.top is the height of the *title bar*. We can't do the same
* algorithm here, titlebars are expectedly much bigger. Just subtract a couple
* pixels to get a proper feel. */
if (type != META_FRAME_TYPE_ATTACHED)
if (!(flags & META_FRAME_CONSTRAINED_TOP_EDGE) && type != META_FRAME_TYPE_ATTACHED)
borders->invisible.top = MAX (borders->invisible.top, draggable_borders - 2);
if (!(flags & META_FRAME_CONSTRAINED_BOTTOM_EDGE))
borders->invisible.bottom = MAX (borders->invisible.bottom,
draggable_borders - borders->visible.bottom);
}
borders->total.left = borders->invisible.left + borders->visible.left;
@@ -992,7 +995,6 @@ create_style_context (GType widget_type,
...)
{
GtkStyleContext *style;
GtkStateFlags state;
GtkWidgetPath *path;
const char *name;
va_list ap;
@@ -1011,19 +1013,6 @@ create_style_context (GType widget_type,
if (object_name)
gtk_widget_path_iter_set_object_name (path, -1, object_name);
state = gtk_style_context_get_state (style);
if (meta_get_locale_direction() == META_LOCALE_DIRECTION_RTL)
{
state |= GTK_STATE_FLAG_DIR_RTL;
state &= ~GTK_STATE_FLAG_DIR_LTR;
}
else
{
state |= GTK_STATE_FLAG_DIR_LTR;
state &= ~GTK_STATE_FLAG_DIR_RTL;
}
gtk_style_context_set_state (style, state);
va_start (ap, first_class);
for (name = first_class; name; name = va_arg (ap, const char *))
gtk_widget_path_iter_add_class (path, -1, name);

View File

@@ -134,19 +134,12 @@ meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer,
for (i = 0; i < n_rectangles; i++)
{
CoglError *error = NULL;
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (region, i, &rect);
cogl_wayland_texture_set_region_from_shm_buffer (buffer->texture,
rect.x, rect.y, rect.width, rect.height,
shm_buffer,
rect.x, rect.y, 0, &error);
if (error)
{
meta_warning ("Failed to set texture region: %s\n", error->message);
cogl_error_free (error);
}
rect.x, rect.y, 0, NULL);
}
wl_shm_buffer_end_access (shm_buffer);

View File

@@ -1424,10 +1424,9 @@ meta_wayland_drag_dest_focus_out (MetaWaylandDataDevice *data_device,
{
MetaWaylandDragGrab *grab = data_device->current_grab;
if (!grab->drag_focus_data_device)
return;
if (grab->drag_focus_data_device)
wl_data_device_send_leave (grab->drag_focus_data_device);
wl_data_device_send_leave (grab->drag_focus_data_device);
wl_list_remove (&grab->drag_focus_listener.link);
grab->drag_focus_data_device = NULL;
}
@@ -1440,9 +1439,6 @@ meta_wayland_drag_dest_motion (MetaWaylandDataDevice *data_device,
MetaWaylandDragGrab *grab = data_device->current_grab;
wl_fixed_t sx, sy;
if (!grab->drag_focus_data_device)
return;
meta_wayland_pointer_get_relative_coordinates (grab->generic.pointer,
grab->drag_focus,
&sx, &sy);
@@ -1457,9 +1453,6 @@ meta_wayland_drag_dest_drop (MetaWaylandDataDevice *data_device,
{
MetaWaylandDragGrab *grab = data_device->current_grab;
if (!grab->drag_focus_data_device)
return;
wl_data_device_send_drop (grab->drag_focus_data_device);
}

View File

@@ -58,7 +58,6 @@
#include <sys/mman.h>
#include <clutter/evdev/clutter-evdev.h>
#include "display-private.h"
#include "backends/meta-backend-private.h"
#include "meta-wayland-private.h"
@@ -280,66 +279,14 @@ notify_key (MetaWaylandKeyboard *keyboard,
return keyboard->grab->interface->key (keyboard->grab, event);
}
static xkb_mod_mask_t
add_vmod (xkb_mod_mask_t mask,
xkb_mod_mask_t mod,
xkb_mod_mask_t vmod,
xkb_mod_mask_t *added)
{
if ((mask & mod) && !(mod & *added))
{
mask |= vmod;
*added |= mod;
}
return mask;
}
static xkb_mod_mask_t
add_virtual_mods (xkb_mod_mask_t mask)
{
MetaKeyBindingManager *keys = &(meta_get_display ()->key_binding_manager);
xkb_mod_mask_t added;
guint i;
/* Order is important here: if multiple vmods share the same real
modifier we only want to add the first. */
struct {
xkb_mod_mask_t mod;
xkb_mod_mask_t vmod;
} mods[] = {
{ keys->super_mask, keys->virtual_super_mask },
{ keys->hyper_mask, keys->virtual_hyper_mask },
{ keys->meta_mask, keys->virtual_meta_mask },
};
added = 0;
for (i = 0; i < G_N_ELEMENTS (mods); ++i)
mask = add_vmod (mask, mods[i].mod, mods[i].vmod, &added);
return mask;
}
static void
keyboard_send_modifiers (MetaWaylandKeyboard *keyboard,
struct wl_resource *resource,
uint32_t serial)
{
struct xkb_state *state = keyboard->xkb_info.state;
xkb_mod_mask_t depressed, latched, locked;
depressed = add_virtual_mods (xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED));
latched = add_virtual_mods (xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED));
locked = add_virtual_mods (xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED));
wl_keyboard_send_modifiers (resource, serial, depressed, latched, locked,
xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE));
}
static void
meta_wayland_keyboard_broadcast_modifiers (MetaWaylandKeyboard *keyboard)
{
struct xkb_state *state;
struct wl_resource *resource;
struct wl_list *l;
state = keyboard->xkb_info.state;
l = &keyboard->focus_resource_list;
if (!wl_list_empty (l))
@@ -347,7 +294,14 @@ meta_wayland_keyboard_broadcast_modifiers (MetaWaylandKeyboard *keyboard)
uint32_t serial = wl_display_next_serial (keyboard->display);
wl_resource_for_each (resource, l)
keyboard_send_modifiers (keyboard, resource, serial);
{
wl_keyboard_send_modifiers (resource,
serial,
xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED),
xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED),
xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE));
}
}
}
@@ -555,13 +509,6 @@ meta_wayland_keyboard_update (MetaWaylandKeyboard *keyboard,
{
gboolean is_press = event->type == CLUTTER_KEY_PRESS;
/* If we get a key event but still have pending modifier state
* changes from a previous event that didn't get cleared, we need to
* send that state right away so that the new key event can be
* interpreted by clients correctly modified. */
if (keyboard->mods_changed)
notify_modifiers (keyboard);
keyboard->mods_changed = xkb_state_update_key (keyboard->xkb_info.state,
event->hardware_keycode,
is_press ? XKB_KEY_DOWN : XKB_KEY_UP);
@@ -655,6 +602,7 @@ broadcast_focus (MetaWaylandKeyboard *keyboard,
struct wl_resource *resource)
{
struct wl_array fake_keys;
struct xkb_state *state = keyboard->xkb_info.state;
/* We never want to send pressed keys to wayland clients on
* enter. The protocol says that we should send them, presumably so
@@ -674,7 +622,11 @@ broadcast_focus (MetaWaylandKeyboard *keyboard,
*/
wl_array_init (&fake_keys);
keyboard_send_modifiers (keyboard, resource, keyboard->focus_serial);
wl_keyboard_send_modifiers (resource, keyboard->focus_serial,
xkb_state_serialize_mods (state, XKB_STATE_MODS_DEPRESSED),
xkb_state_serialize_mods (state, XKB_STATE_MODS_LATCHED),
xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_EFFECTIVE));
wl_keyboard_send_enter (resource, keyboard->focus_serial,
keyboard->focus_surface->resource,
&fake_keys);

View File

@@ -53,80 +53,6 @@ output_resource_destroy (struct wl_resource *res)
wayland_output->resources = g_list_remove (wayland_output->resources, res);
}
static inline enum wl_output_transform
wl_output_transform_from_meta_monitor_transform (MetaMonitorTransform transform)
{
/* The enums are the same. */
return (enum wl_output_transform) transform;
}
static void
send_output_events (struct wl_resource *resource,
MetaWaylandOutput *wayland_output,
MetaMonitorInfo *monitor_info,
gboolean need_all_events)
{
int version = wl_resource_get_version (resource);
MetaOutput *output = monitor_info->outputs[0];
enum wl_output_transform transform = wl_output_transform_from_meta_monitor_transform (output->crtc->transform);
guint mode_flags = WL_OUTPUT_MODE_CURRENT;
MetaMonitorInfo *old_monitor_info = wayland_output->monitor_info;
enum wl_output_transform old_transform = wayland_output->transform;
guint old_mode_flags = wayland_output->mode_flags;
gint old_scale = wayland_output->scale;
gboolean need_done = FALSE;
if (need_all_events ||
old_monitor_info->rect.x != monitor_info->rect.x ||
old_monitor_info->rect.y != monitor_info->rect.y ||
old_transform != transform)
{
wl_output_send_geometry (resource,
(int)monitor_info->rect.x,
(int)monitor_info->rect.y,
monitor_info->width_mm,
monitor_info->height_mm,
output->subpixel_order,
output->vendor,
output->product,
transform);
need_done = TRUE;
}
if (output->crtc->current_mode == output->preferred_mode)
mode_flags |= WL_OUTPUT_MODE_PREFERRED;
if (need_all_events ||
old_monitor_info->rect.width != monitor_info->rect.width ||
old_monitor_info->rect.height != monitor_info->rect.height ||
old_monitor_info->refresh_rate != monitor_info->refresh_rate ||
old_mode_flags != mode_flags)
{
wl_output_send_mode (resource,
mode_flags,
(int)monitor_info->rect.width,
(int)monitor_info->rect.height,
(int)(monitor_info->refresh_rate * 1000));
need_done = TRUE;
}
if (version >= WL_OUTPUT_SCALE_SINCE_VERSION)
{
if (need_all_events ||
old_scale != output->scale)
{
wl_output_send_scale (resource, output->scale);
need_done = TRUE;
}
if (need_done)
wl_output_send_done (resource);
}
}
static void
bind_output (struct wl_client *client,
void *data,
@@ -136,6 +62,7 @@ bind_output (struct wl_client *client,
MetaWaylandOutput *wayland_output = data;
MetaMonitorInfo *monitor_info = wayland_output->monitor_info;
struct wl_resource *resource;
guint mode_flags;
MetaOutput *output = monitor_info->outputs[0];
resource = wl_resource_create (client, &wl_output_interface, version, id);
@@ -150,7 +77,35 @@ bind_output (struct wl_client *client,
monitor_info->rect.width, monitor_info->rect.height,
monitor_info->refresh_rate);
send_output_events (resource, wayland_output, monitor_info, TRUE);
wl_output_send_geometry (resource,
(int)monitor_info->rect.x,
(int)monitor_info->rect.y,
monitor_info->width_mm,
monitor_info->height_mm,
/* Cogl values reflect XRandR values,
and so does wayland */
output->subpixel_order,
output->vendor,
output->product,
output->crtc->transform);
g_assert (output->crtc->current_mode != NULL);
mode_flags = WL_OUTPUT_MODE_CURRENT;
if (output->crtc->current_mode == output->preferred_mode)
mode_flags |= WL_OUTPUT_MODE_PREFERRED;
wl_output_send_mode (resource,
mode_flags,
(int)monitor_info->rect.width,
(int)monitor_info->rect.height,
(int)(monitor_info->refresh_rate * 1000));
if (version >= WL_OUTPUT_SCALE_SINCE_VERSION)
wl_output_send_scale (resource, output->scale);
if (version >= WL_OUTPUT_DONE_SINCE_VERSION)
wl_output_send_done (resource);
}
static void
@@ -162,19 +117,11 @@ wayland_output_destroy_notify (gpointer data)
g_object_unref (wayland_output);
}
static void
wayland_output_set_monitor_info (MetaWaylandOutput *wayland_output,
MetaMonitorInfo *monitor_info)
static inline enum wl_output_transform
wl_output_transform_from_meta_monitor_transform (MetaMonitorTransform transform)
{
MetaOutput *output = monitor_info->outputs[0];
enum wl_output_transform transform = wl_output_transform_from_meta_monitor_transform (output->crtc->transform);
wayland_output->monitor_info = monitor_info;
wayland_output->transform = transform;
wayland_output->mode_flags = WL_OUTPUT_MODE_CURRENT;
if (output->crtc->current_mode == output->preferred_mode)
wayland_output->mode_flags |= WL_OUTPUT_MODE_PREFERRED;
wayland_output->scale = output->scale;
/* The enums are the same. */
return (enum wl_output_transform) transform;
}
static void
@@ -182,21 +129,50 @@ wayland_output_update_for_output (MetaWaylandOutput *wayland_output,
MetaMonitorInfo *monitor_info)
{
GList *iter;
guint mode_flags;
MetaOutput *output = monitor_info->outputs[0];
enum wl_output_transform wl_transform = wl_output_transform_from_meta_monitor_transform (output->crtc->transform);
mode_flags = WL_OUTPUT_MODE_CURRENT;
if (output->crtc->current_mode == output->preferred_mode)
mode_flags |= WL_OUTPUT_MODE_PREFERRED;
for (iter = wayland_output->resources; iter; iter = iter->next)
{
struct wl_resource *resource = iter->data;
send_output_events (resource, wayland_output, monitor_info, FALSE);
if (wayland_output->x != monitor_info->rect.x ||
wayland_output->y != monitor_info->rect.y ||
wayland_output->transform != wl_transform)
{
wl_output_send_geometry (resource,
(int)monitor_info->rect.x,
(int)monitor_info->rect.y,
monitor_info->width_mm,
monitor_info->height_mm,
output->subpixel_order,
output->vendor,
output->product,
wl_transform);
}
wl_output_send_mode (resource,
mode_flags,
(int)monitor_info->rect.width,
(int)monitor_info->rect.height,
(int)(monitor_info->refresh_rate * 1000));
}
/* It's very important that we change the output pointer here, as
the old structure is about to be freed by MetaMonitorManager */
wayland_output_set_monitor_info (wayland_output, monitor_info);
wayland_output->monitor_info = monitor_info;
wayland_output->x = monitor_info->rect.x;
wayland_output->y = monitor_info->rect.y;
wayland_output->transform = wl_transform;
}
static MetaWaylandOutput *
meta_wayland_output_new (MetaWaylandCompositor *compositor,
MetaMonitorInfo *monitor_info)
meta_wayland_output_new (MetaWaylandCompositor *compositor)
{
MetaWaylandOutput *wayland_output;
@@ -205,7 +181,6 @@ meta_wayland_output_new (MetaWaylandCompositor *compositor,
&wl_output_interface,
META_WL_OUTPUT_VERSION,
wayland_output, bind_output);
wayland_output_set_monitor_info (wayland_output, monitor_info);
return wayland_output;
}
@@ -236,7 +211,7 @@ meta_wayland_compositor_update_outputs (MetaWaylandCompositor *compositor,
g_hash_table_steal (compositor->outputs, GSIZE_TO_POINTER (info->winsys_id));
}
else
wayland_output = meta_wayland_output_new (compositor, info);
wayland_output = meta_wayland_output_new (compositor);
wayland_output_update_for_output (wayland_output, info);
g_hash_table_insert (new_table, GSIZE_TO_POINTER (info->winsys_id), wayland_output);

View File

@@ -41,11 +41,10 @@ struct _MetaWaylandOutput
{
GObject parent;
struct wl_global *global;
MetaMonitorInfo *monitor_info;
struct wl_global *global;
int x, y;
enum wl_output_transform transform;
guint mode_flags;
gint scale;
GList *resources;
};

View File

@@ -1138,7 +1138,8 @@ meta_wayland_pointer_can_grab_surface (MetaWaylandPointer *pointer,
MetaWaylandSurface *surface,
uint32_t serial)
{
return (pointer->grab_serial == serial &&
return (pointer->button_count > 0 &&
pointer->grab_serial == serial &&
pointer->focus_surface == surface);
}

View File

@@ -300,21 +300,18 @@ meta_wayland_seat_update (MetaWaylandSeat *seat,
case CLUTTER_BUTTON_PRESS:
case CLUTTER_BUTTON_RELEASE:
case CLUTTER_SCROLL:
if (seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
meta_wayland_pointer_update (&seat->pointer, event);
meta_wayland_pointer_update (&seat->pointer, event);
break;
case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE:
if (seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
meta_wayland_keyboard_update (&seat->keyboard, (const ClutterKeyEvent *) event);
meta_wayland_keyboard_update (&seat->keyboard, (const ClutterKeyEvent *) event);
break;
case CLUTTER_TOUCH_BEGIN:
case CLUTTER_TOUCH_UPDATE:
case CLUTTER_TOUCH_END:
if (seat->capabilities & WL_SEAT_CAPABILITY_TOUCH)
meta_wayland_touch_update (&seat->touch, event);
meta_wayland_touch_update (&seat->touch, event);
break;
default:
@@ -337,19 +334,16 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
case CLUTTER_SCROLL:
case CLUTTER_TOUCHPAD_SWIPE:
case CLUTTER_TOUCHPAD_PINCH:
if (seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
return meta_wayland_pointer_handle_event (&seat->pointer, event);
return meta_wayland_pointer_handle_event (&seat->pointer, event);
case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE:
if (seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
return meta_wayland_keyboard_handle_event (&seat->keyboard,
(const ClutterKeyEvent *) event);
return meta_wayland_keyboard_handle_event (&seat->keyboard,
(const ClutterKeyEvent *) event);
case CLUTTER_TOUCH_BEGIN:
case CLUTTER_TOUCH_UPDATE:
case CLUTTER_TOUCH_END:
if (seat->capabilities & WL_SEAT_CAPABILITY_TOUCH)
return meta_wayland_touch_handle_event (&seat->touch, event);
return meta_wayland_touch_handle_event (&seat->touch, event);
default:
break;
@@ -380,11 +374,10 @@ meta_wayland_seat_set_input_focus (MetaWaylandSeat *seat,
gboolean
meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
MetaWaylandSurface *surface,
uint32_t serial,
gboolean require_pressed,
gfloat *x,
gfloat *y)
MetaWaylandSurface *surface,
uint32_t serial,
gfloat *x,
gfloat *y)
{
ClutterEventSequence *sequence = NULL;
gboolean can_grab_surface = FALSE;
@@ -398,8 +391,7 @@ meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
}
else
{
if ((seat->capabilities & WL_SEAT_CAPABILITY_POINTER) != 0 &&
(!require_pressed || seat->pointer.button_count > 0))
if ((seat->capabilities & WL_SEAT_CAPABILITY_POINTER) != 0)
can_grab_surface = meta_wayland_pointer_can_grab_surface (&seat->pointer, surface, serial);
if (can_grab_surface)

View File

@@ -60,11 +60,10 @@ void meta_wayland_seat_set_input_focus (MetaWaylandSeat *seat,
void meta_wayland_seat_repick (MetaWaylandSeat *seat);
gboolean meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
MetaWaylandSurface *surface,
uint32_t serial,
gboolean require_pressed,
gfloat *x,
gfloat *y);
MetaWaylandSurface *surface,
uint32_t serial,
gfloat *x,
gfloat *y);
gboolean meta_wayland_seat_can_popup (MetaWaylandSeat *seat,
uint32_t serial);

View File

@@ -1338,9 +1338,6 @@ xdg_surface_set_title (struct wl_client *client,
{
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
if (!g_utf8_validate (title, -1, NULL))
title = "";
meta_window_set_title (surface->window, title);
}
@@ -1351,9 +1348,6 @@ xdg_surface_set_app_id (struct wl_client *client,
{
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
if (!g_utf8_validate (app_id, -1, NULL))
app_id = "";
meta_window_set_wm_class (surface->window, app_id, app_id);
}
@@ -1368,7 +1362,7 @@ xdg_surface_show_window_menu (struct wl_client *client,
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, FALSE, NULL, NULL))
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, NULL, NULL))
return;
meta_window_show_menu (surface->window, META_WINDOW_MENU_WM,
@@ -1388,15 +1382,12 @@ begin_grab_op_on_surface (MetaWaylandSurface *surface,
if (grab_op == META_GRAB_OP_NONE)
return FALSE;
/* This is an input driven operation so we set frame_action to
constrain it in the same way as it would be if the window was
being moved/resized via a SSD event. */
return meta_display_begin_grab_op (window->display,
window->screen,
window,
grab_op,
TRUE, /* pointer_already_grabbed */
TRUE, /* frame_action */
FALSE, /* frame_action */
1, /* button. XXX? */
0, /* modmask */
meta_display_get_current_time_roundtrip (window->display),
@@ -1413,7 +1404,7 @@ xdg_surface_move (struct wl_client *client,
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
gfloat x, y;
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, &x, &y))
return;
begin_grab_op_on_surface (surface, seat, META_GRAB_OP_MOVING, x, y);
@@ -1453,7 +1444,7 @@ xdg_surface_resize (struct wl_client *client,
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
gfloat x, y;
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, &x, &y))
return;
begin_grab_op_on_surface (surface, seat, grab_op_for_xdg_surface_resize_edge (edges), x, y);
@@ -1796,7 +1787,7 @@ wl_shell_surface_move (struct wl_client *client,
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
gfloat x, y;
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, &x, &y))
return;
begin_grab_op_on_surface (surface, seat, META_GRAB_OP_MOVING, x, y);
@@ -1836,7 +1827,7 @@ wl_shell_surface_resize (struct wl_client *client,
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
gfloat x, y;
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, &x, &y))
return;
begin_grab_op_on_surface (surface, seat, grab_op_for_wl_shell_surface_resize_edge (edges), x, y);
@@ -1970,9 +1961,6 @@ wl_shell_surface_set_title (struct wl_client *client,
{
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
if (!g_utf8_validate (title, -1, NULL))
title = "";
meta_window_set_title (surface->window, title);
}
@@ -1983,9 +1971,6 @@ wl_shell_surface_set_class (struct wl_client *client,
{
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
if (!g_utf8_validate (class_, -1, NULL))
class_ = "";
meta_window_set_wm_class (surface->window, class_, class_);
}

View File

@@ -27,8 +27,6 @@
#include "meta-window-wayland.h"
#include <meta/errors.h>
#include <errno.h>
#include <string.h> /* for strerror () */
#include "window-private.h"
#include "boxes-private.h"
#include "stack-tracker.h"
@@ -111,24 +109,6 @@ meta_window_wayland_kill (MetaWindow *window)
{
MetaWaylandSurface *surface = window->surface;
struct wl_resource *resource = surface->resource;
pid_t pid;
uid_t uid;
gid_t gid;
wl_client_get_credentials (wl_resource_get_client (resource), &pid, &uid, &gid);
if (pid > 0)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Killing %s with kill()\n",
window->desc);
if (kill (pid, 9) == 0)
return;
meta_topic (META_DEBUG_WINDOW_OPS,
"Failed to signal %s: %s\n",
window->desc, strerror (errno));
}
/* Send the client an unrecoverable error to kill the client. */
wl_resource_post_error (resource,
@@ -151,10 +131,6 @@ surface_state_changed (MetaWindow *window)
{
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
/* don't send notify when the window is being unmanaged */
if (window->unmanaging)
return;
meta_wayland_surface_configure_notify (window->surface,
wl_window->last_sent_width,
wl_window->last_sent_height,
@@ -197,10 +173,6 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
g_assert (window->frame == NULL);
/* don't do anything if we're dropping the window, see #751847 */
if (window->unmanaging)
return;
/* The scale the window is drawn in might change depending on what monitor it
* is mainly on. Scale the configured rectangle to be in logical pixel
* coordinate space so that we can have a scale independent size to pass
@@ -310,7 +282,6 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
if (new_x != window->rect.x || new_y != window->rect.y)
{
*result |= META_MOVE_RESIZE_RESULT_MOVED;
wl_window->has_pending_move = TRUE;
wl_window->pending_move_x = new_x;
wl_window->pending_move_y = new_y;
@@ -392,7 +363,9 @@ meta_window_wayland_main_monitor_changed (MetaWindow *window,
/* Window size. */
scale_rect_size (&window->rect, scale_factor);
scale_rect_size (&window->unconstrained_rect, scale_factor);
scale_rect_size (&window->saved_rect, scale_factor);
scale_rect_size (&window->size_states.normal.rect, scale_factor);
scale_rect_size (&window->size_states.tiled.rect, scale_factor);
scale_rect_size (&window->size_states.maximized.rect, scale_factor);
/* Window geometry offset (XXX: Need a better place, see
* meta_window_wayland_move_resize). */
@@ -432,6 +405,12 @@ appears_focused_changed (GObject *object,
gpointer user_data)
{
MetaWindow *window = META_WINDOW (object);
/* When we're unmanaging, we remove focus from the window,
* causing this to fire. Don't do anything in that case. */
if (window->unmanaging)
return;
surface_state_changed (window);
}

View File

@@ -1577,7 +1577,7 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
gdk_x11_get_xatom_by_name ("TARGETS"),
gdk_x11_get_xatom_by_name ("_META_SELECTION"),
selection->window,
CurrentTime);
selection->timestamp);
XFlush (xdisplay);
}
}

View File

@@ -965,10 +965,10 @@ save_state (void)
{
fprintf (outfile,
" <maximized saved_x=\"%d\" saved_y=\"%d\" saved_width=\"%d\" saved_height=\"%d\"/>\n",
window->saved_rect.x,
window->saved_rect.y,
window->saved_rect.width,
window->saved_rect.height);
window->size_states.normal.rect.x,
window->size_states.normal.rect.y,
window->size_states.normal.rect.width,
window->size_states.normal.rect.height);
}
/* Gravity */

View File

@@ -635,10 +635,7 @@ reload_wm_name (MetaWindow *window,
if (value->type != META_PROP_VALUE_INVALID)
{
g_autofree gchar *title = g_convert (value->v.str, -1,
"UTF-8", "LATIN1",
NULL, NULL, NULL);
set_window_title (window, title);
set_window_title (window, value->v.str);
meta_verbose ("Using WM_NAME for new title of %s: \"%s\"\n",
window->desc, window->title);
@@ -972,13 +969,9 @@ reload_wm_class (MetaWindow *window,
{
if (value->type != META_PROP_VALUE_INVALID)
{
g_autofree gchar *res_class = g_convert (value->v.class_hint.res_class, -1,
"UTF-8", "LATIN1",
NULL, NULL, NULL);
g_autofree gchar *res_name = g_convert (value->v.class_hint.res_name, -1,
"UTF-8", "LATIN1",
NULL, NULL, NULL);
meta_window_set_wm_class (window, res_class, res_name);
meta_window_set_wm_class (window,
value->v.class_hint.res_class,
value->v.class_hint.res_name);
}
else
{

View File

@@ -413,10 +413,10 @@ meta_window_apply_session_info (MetaWindow *window,
info->saved_rect.height,
window->desc);
window->saved_rect.x = info->saved_rect.x;
window->saved_rect.y = info->saved_rect.y;
window->saved_rect.width = info->saved_rect.width;
window->saved_rect.height = info->saved_rect.height;
window->size_states.normal.rect.x = info->saved_rect.x;
window->size_states.normal.rect.y = info->saved_rect.y;
window->size_states.normal.rect.width = info->saved_rect.width;
window->size_states.normal.rect.height = info->saved_rect.height;
}
}
}