Compare commits
47 Commits
citadel
...
gnome-3-30
Author | SHA1 | Date | |
---|---|---|---|
|
81309b8eb8 | ||
|
d416691896 | ||
|
7a6ed76a20 | ||
|
a8f6f01d67 | ||
|
1f03c94d31 | ||
|
843ed09b09 | ||
|
51b04134db | ||
|
bfcfa64456 | ||
|
ea3d897439 | ||
|
5979f87295 | ||
|
1cda659732 | ||
|
4010628001 | ||
|
e23f4d6c7c | ||
|
511e8c6584 | ||
|
ee97f73521 | ||
|
ca54b55c01 | ||
|
999cc1214e | ||
|
cf5d496e01 | ||
|
5246da5837 | ||
|
f645368c66 | ||
|
45b4495886 | ||
|
ae0461fd60 | ||
|
4e1747e6ec | ||
|
2a36bf52cb | ||
|
3dffdab1ad | ||
|
fd75921f13 | ||
|
9b9599515a | ||
|
609c81698e | ||
|
62c2dbbc9d | ||
|
a1a7ba7cc7 | ||
|
be35dec71e | ||
|
e55bdb0fbb | ||
|
bacdd1c12d | ||
|
78f6a409aa | ||
|
d7ee164f0f | ||
|
0820b9cbef | ||
|
89a720c050 | ||
|
d2393395ff | ||
|
d21b276c07 | ||
|
ccc5967382 | ||
|
5ee0f743de | ||
|
ec5db74101 | ||
|
24d8066197 | ||
|
c77c47cf29 | ||
|
620bd037d2 | ||
|
54f8232a93 | ||
|
c17ba90209 |
21
NEWS
21
NEWS
@ -1,3 +1,24 @@
|
|||||||
|
3.30.2
|
||||||
|
======
|
||||||
|
* popupMenu: Fix keyboard activation when numlock is active [Andrea; #550]
|
||||||
|
* Do not block all shortcuts while app folders are expanded [Florian; #648]
|
||||||
|
* Fix regression in handling new input sources [Carlos; #691]
|
||||||
|
* Improve performance of app icon animations [Daniel; !253, !261]
|
||||||
|
* Respect natural-scroll setting for workspace swipe gesture [Erik; #516]
|
||||||
|
* notifications: Support icon theme names in 'image-path' hint [Marco; !285]
|
||||||
|
* Confine window preview titles to workspace area [Florian; !214]
|
||||||
|
* Misc. bug fixes [Florian, Cosimo; #602, #693, #768, #430, !286]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Andrea Azzarone, Cosimo Cecchi, Erik Duxstad, Carlos Garnacho,
|
||||||
|
Florian Müllner, Didier Roche, Marco Trevisan (Treviño), verdre,
|
||||||
|
Daniel van Vugt
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Rūdolfs Mazurs [lv], Kristjan SCHMIDT [eo], Milo Casagrande [it],
|
||||||
|
Dušan Kazik [sk], gogo [hr], Anish Sheela [ml], Rafael Fontenelle [pt_BR],
|
||||||
|
Daniel Mustieles [es]
|
||||||
|
|
||||||
3.30.1
|
3.30.1
|
||||||
======
|
======
|
||||||
* Cancel search on overview hiding [Marco; !205]
|
* Cancel search on overview hiding [Marco; !205]
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
<file>be.json</file>
|
<file>be.json</file>
|
||||||
<file>bg.json</file>
|
<file>bg.json</file>
|
||||||
<file>by.json</file>
|
<file>by.json</file>
|
||||||
|
<file>ca.json</file>
|
||||||
<file>cz.json</file>
|
<file>cz.json</file>
|
||||||
<file>de.json</file>
|
<file>de.json</file>
|
||||||
<file>dk.json</file>
|
<file>dk.json</file>
|
||||||
|
599
data/osk-layouts/ca.json
Normal file
599
data/osk-layouts/ca.json
Normal file
@ -0,0 +1,599 @@
|
|||||||
|
{
|
||||||
|
"levels": [
|
||||||
|
{
|
||||||
|
"level": "",
|
||||||
|
"mode": "default",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"q"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"w"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"e",
|
||||||
|
"é",
|
||||||
|
"è",
|
||||||
|
"ê",
|
||||||
|
"ë",
|
||||||
|
"%",
|
||||||
|
"ę",
|
||||||
|
"ė",
|
||||||
|
"ē"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"r"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"t"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"y",
|
||||||
|
"%",
|
||||||
|
"ÿ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"u",
|
||||||
|
"ù",
|
||||||
|
"û",
|
||||||
|
"%",
|
||||||
|
"ü",
|
||||||
|
"ú",
|
||||||
|
"ū"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"i",
|
||||||
|
"î",
|
||||||
|
"%",
|
||||||
|
"ï",
|
||||||
|
"ì",
|
||||||
|
"í",
|
||||||
|
"į",
|
||||||
|
"ī"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"o",
|
||||||
|
"ô",
|
||||||
|
"œ",
|
||||||
|
"%",
|
||||||
|
"ö",
|
||||||
|
"ò",
|
||||||
|
"ó",
|
||||||
|
"õ",
|
||||||
|
"ø",
|
||||||
|
"ō",
|
||||||
|
"º"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"p"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"a",
|
||||||
|
"à",
|
||||||
|
"â",
|
||||||
|
"%",
|
||||||
|
"æ",
|
||||||
|
"á",
|
||||||
|
"ä",
|
||||||
|
"ã",
|
||||||
|
"å",
|
||||||
|
"ā",
|
||||||
|
"ª"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"s"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"d"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"f"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"g"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"h"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"j"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"k"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"l"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"z"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"x"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"c",
|
||||||
|
"ç",
|
||||||
|
"ć",
|
||||||
|
"č"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"b"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"n"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"m"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"#",
|
||||||
|
"!",
|
||||||
|
",",
|
||||||
|
"?",
|
||||||
|
"-",
|
||||||
|
":",
|
||||||
|
"'",
|
||||||
|
"@"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": "shift",
|
||||||
|
"mode": "latched",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"Q"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"W"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"E",
|
||||||
|
"É",
|
||||||
|
"È",
|
||||||
|
"Ê",
|
||||||
|
"Ë",
|
||||||
|
"%",
|
||||||
|
"Ę",
|
||||||
|
"Ė",
|
||||||
|
"Ē"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"R"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"T"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Y",
|
||||||
|
"%",
|
||||||
|
"Ÿ"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"U",
|
||||||
|
"Ù",
|
||||||
|
"Û",
|
||||||
|
"%",
|
||||||
|
"Ü",
|
||||||
|
"Ú",
|
||||||
|
"Ū"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"I",
|
||||||
|
"Î",
|
||||||
|
"%",
|
||||||
|
"Ï",
|
||||||
|
"Ì",
|
||||||
|
"Í",
|
||||||
|
"Į",
|
||||||
|
"Ī"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"O",
|
||||||
|
"Ô",
|
||||||
|
"Œ",
|
||||||
|
"%",
|
||||||
|
"Ö",
|
||||||
|
"Ò",
|
||||||
|
"Ó",
|
||||||
|
"Õ",
|
||||||
|
"Ø",
|
||||||
|
"Ō",
|
||||||
|
"º"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"P"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"A",
|
||||||
|
"À",
|
||||||
|
"Â",
|
||||||
|
"%",
|
||||||
|
"Æ",
|
||||||
|
"Á",
|
||||||
|
"Ä",
|
||||||
|
"Ã",
|
||||||
|
"Å",
|
||||||
|
"Ā",
|
||||||
|
"ª"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"S"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"D"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"F"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"G"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"H"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"J"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"K"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"L"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"Z"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"X"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"C",
|
||||||
|
"Ç",
|
||||||
|
"Ć",
|
||||||
|
"Č"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"V"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"B"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"N"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"M"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"#",
|
||||||
|
"!",
|
||||||
|
",",
|
||||||
|
"?",
|
||||||
|
"-",
|
||||||
|
":",
|
||||||
|
"'",
|
||||||
|
"@"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": "opt",
|
||||||
|
"mode": "locked",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"1",
|
||||||
|
"¹",
|
||||||
|
"½",
|
||||||
|
"⅓",
|
||||||
|
"¼",
|
||||||
|
"⅛"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"2",
|
||||||
|
"²",
|
||||||
|
"⅔"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"3",
|
||||||
|
"³",
|
||||||
|
"¾",
|
||||||
|
"⅜"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"4",
|
||||||
|
"⁴"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"5",
|
||||||
|
"⅝"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"6"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"7",
|
||||||
|
"⅞"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"8"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"9"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"0",
|
||||||
|
"ⁿ",
|
||||||
|
"∅"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"@"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"#"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"$",
|
||||||
|
"¢",
|
||||||
|
"£",
|
||||||
|
"€",
|
||||||
|
"¥",
|
||||||
|
"₱"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"%",
|
||||||
|
"‰"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"&"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"-",
|
||||||
|
"_",
|
||||||
|
"–",
|
||||||
|
"—",
|
||||||
|
"·"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"+",
|
||||||
|
"±"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"(",
|
||||||
|
"<",
|
||||||
|
"{",
|
||||||
|
"["
|
||||||
|
],
|
||||||
|
[
|
||||||
|
")",
|
||||||
|
">",
|
||||||
|
"}",
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"*",
|
||||||
|
"†",
|
||||||
|
"‡",
|
||||||
|
"★"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"\"",
|
||||||
|
"“",
|
||||||
|
"”",
|
||||||
|
"«",
|
||||||
|
"»"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
":"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
";"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"!",
|
||||||
|
"¡"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"?",
|
||||||
|
"¿"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"_"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"…"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"level": "opt+shift",
|
||||||
|
"mode": "locked",
|
||||||
|
"rows": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"~"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"`"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"|"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"•",
|
||||||
|
"♪",
|
||||||
|
"♥",
|
||||||
|
"♠",
|
||||||
|
"♦",
|
||||||
|
"♣"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"√"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Π",
|
||||||
|
"π"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"÷"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"×"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¶",
|
||||||
|
"§"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"∆"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"£"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¢"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"€"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"¥"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"^",
|
||||||
|
"↑",
|
||||||
|
"↓",
|
||||||
|
"←",
|
||||||
|
"→"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"°",
|
||||||
|
"′",
|
||||||
|
"″"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"=",
|
||||||
|
"≠",
|
||||||
|
"≈",
|
||||||
|
"∞"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"{"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"}"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"\\"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"©"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"®"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"™"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"℅"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"["
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"<",
|
||||||
|
"‹",
|
||||||
|
"≤",
|
||||||
|
"«"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
">",
|
||||||
|
"›",
|
||||||
|
"≥",
|
||||||
|
"»"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
" "
|
||||||
|
],
|
||||||
|
[
|
||||||
|
","
|
||||||
|
],
|
||||||
|
[
|
||||||
|
".",
|
||||||
|
"…"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"locale": "fr-CA",
|
||||||
|
"name": "French Canada"
|
||||||
|
}
|
@ -6,10 +6,20 @@
|
|||||||
"rows": [
|
"rows": [
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"q"
|
"a",
|
||||||
|
"à",
|
||||||
|
"â",
|
||||||
|
"%",
|
||||||
|
"æ",
|
||||||
|
"á",
|
||||||
|
"ä",
|
||||||
|
"ã",
|
||||||
|
"å",
|
||||||
|
"ā",
|
||||||
|
"ª"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"w"
|
"z"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"e",
|
"e",
|
||||||
@ -71,17 +81,7 @@
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"a",
|
"q"
|
||||||
"à",
|
|
||||||
"â",
|
|
||||||
"%",
|
|
||||||
"æ",
|
|
||||||
"á",
|
|
||||||
"ä",
|
|
||||||
"ã",
|
|
||||||
"å",
|
|
||||||
"ā",
|
|
||||||
"ª"
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"s"
|
"s"
|
||||||
@ -106,11 +106,14 @@
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
"l"
|
"l"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"m"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"z"
|
"w"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"x"
|
"x"
|
||||||
@ -131,7 +134,11 @@
|
|||||||
"n"
|
"n"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"m"
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -161,10 +168,20 @@
|
|||||||
"rows": [
|
"rows": [
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"Q"
|
"A",
|
||||||
|
"À",
|
||||||
|
"Â",
|
||||||
|
"%",
|
||||||
|
"Æ",
|
||||||
|
"Á",
|
||||||
|
"Ä",
|
||||||
|
"Ã",
|
||||||
|
"Å",
|
||||||
|
"Ā",
|
||||||
|
"ª"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"W"
|
"Z"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"E",
|
"E",
|
||||||
@ -226,17 +243,7 @@
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"A",
|
"Q"
|
||||||
"À",
|
|
||||||
"Â",
|
|
||||||
"%",
|
|
||||||
"Æ",
|
|
||||||
"Á",
|
|
||||||
"Ä",
|
|
||||||
"Ã",
|
|
||||||
"Å",
|
|
||||||
"Ā",
|
|
||||||
"ª"
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"S"
|
"S"
|
||||||
@ -261,11 +268,14 @@
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
"L"
|
"L"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"M"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
"Z"
|
"W"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"X"
|
"X"
|
||||||
@ -286,7 +296,11 @@
|
|||||||
"N"
|
"N"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"M"
|
"'",
|
||||||
|
"‘",
|
||||||
|
"’",
|
||||||
|
"‹",
|
||||||
|
"›"
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -369,10 +383,10 @@
|
|||||||
"#"
|
"#"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"$",
|
"€",
|
||||||
"¢",
|
"¢",
|
||||||
"£",
|
"£",
|
||||||
"€",
|
"$",
|
||||||
"¥",
|
"¥",
|
||||||
"₱"
|
"₱"
|
||||||
],
|
],
|
||||||
@ -511,13 +525,14 @@
|
|||||||
"£"
|
"£"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
"¥"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"$",
|
||||||
"¢"
|
"¢"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"€"
|
"¢"
|
||||||
],
|
|
||||||
[
|
|
||||||
"¥"
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"^",
|
"^",
|
||||||
@ -594,6 +609,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"locale": "fr-CA",
|
"locale": "fr",
|
||||||
"name": "French Canada"
|
"name": "French"
|
||||||
}
|
}
|
@ -11,6 +11,7 @@ const Animation = imports.ui.animation;
|
|||||||
const Batch = imports.gdm.batch;
|
const Batch = imports.gdm.batch;
|
||||||
const GdmUtil = imports.gdm.util;
|
const GdmUtil = imports.gdm.util;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
@ -99,7 +100,7 @@ var AuthPrompt = new Lang.Class({
|
|||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
ShellEntry.addContextMenu(this._entry, { isPassword: true });
|
ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
|
||||||
|
|
||||||
this.actor.add(this._entry,
|
this.actor.add(this._entry,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
|
@ -342,7 +342,8 @@ var SessionMenuButton = new Lang.Class({
|
|||||||
this._button.remove_style_pseudo_class('active');
|
this._button.remove_style_pseudo_class('active');
|
||||||
});
|
});
|
||||||
|
|
||||||
this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
|
this._manager = new PopupMenu.PopupMenuManager({ actor: this._button },
|
||||||
|
{ actionMode: Shell.ActionMode.NONE });
|
||||||
this._manager.addMenu(this._menu);
|
this._manager.addMenu(this._menu);
|
||||||
|
|
||||||
this._button.connect('clicked', () => { this._menu.toggle(); });
|
this._button.connect('clicked', () => { this._menu.toggle(); });
|
||||||
|
@ -210,7 +210,7 @@ var IBusManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
||||||
null, callback);
|
null, callback || null);
|
||||||
},
|
},
|
||||||
|
|
||||||
preloadEngines(ids) {
|
preloadEngines(ids) {
|
||||||
|
@ -17,6 +17,7 @@ var InputMethod = new Lang.Class({
|
|||||||
this._currentFocus = null;
|
this._currentFocus = null;
|
||||||
this._preeditStr = '';
|
this._preeditStr = '';
|
||||||
this._preeditPos = 0;
|
this._preeditPos = 0;
|
||||||
|
this._preeditVisible = false;
|
||||||
this._ibus = IBus.Bus.new_async();
|
this._ibus = IBus.Bus.new_async();
|
||||||
this._ibus.connect('connected', this._onConnected.bind(this));
|
this._ibus.connect('connected', this._onConnected.bind(this));
|
||||||
this._ibus.connect('disconnected', this._clear.bind(this));
|
this._ibus.connect('disconnected', this._clear.bind(this));
|
||||||
@ -80,6 +81,7 @@ var InputMethod = new Lang.Class({
|
|||||||
this._enabled = false;
|
this._enabled = false;
|
||||||
this._preeditStr = ''
|
this._preeditStr = ''
|
||||||
this._preeditPos = 0;
|
this._preeditPos = 0;
|
||||||
|
this._preeditVisible = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_emitRequestSurrounding() {
|
_emitRequestSurrounding() {
|
||||||
@ -98,20 +100,27 @@ var InputMethod = new Lang.Class({
|
|||||||
_onUpdatePreeditText(context, text, pos, visible) {
|
_onUpdatePreeditText(context, text, pos, visible) {
|
||||||
if (text == null)
|
if (text == null)
|
||||||
return;
|
return;
|
||||||
this._preeditStr = text.get_text();
|
|
||||||
this._preeditPos = pos;
|
let preedit = text.get_text();
|
||||||
|
|
||||||
if (visible)
|
if (visible)
|
||||||
this.set_preedit_text(this._preeditStr, pos);
|
this.set_preedit_text(preedit, pos);
|
||||||
else
|
else if (this._preeditVisible)
|
||||||
this.set_preedit_text(null, pos);
|
this.set_preedit_text(null, pos);
|
||||||
|
|
||||||
|
this._preeditStr = preedit;
|
||||||
|
this._preeditPos = pos;
|
||||||
|
this._preeditVisible = visible;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onShowPreeditText(context) {
|
_onShowPreeditText(context) {
|
||||||
|
this._preeditVisible = true;
|
||||||
this.set_preedit_text(this._preeditStr, this._preeditPos);
|
this.set_preedit_text(this._preeditStr, this._preeditPos);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onHidePreeditText(context) {
|
_onHidePreeditText(context) {
|
||||||
this.set_preedit_text(null, this._preeditPos);
|
this.set_preedit_text(null, this._preeditPos);
|
||||||
|
this._preeditVisible = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onForwardKeyEvent(context, keyval, keycode, state) {
|
_onForwardKeyEvent(context, keyval, keycode, state) {
|
||||||
@ -144,8 +153,11 @@ var InputMethod = new Lang.Class({
|
|||||||
this._updateCapabilities();
|
this._updateCapabilities();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unset any preedit text
|
if (this._preeditStr) {
|
||||||
this.set_preedit_text(null, 0);
|
// Unset any preedit text
|
||||||
|
this.set_preedit_text(null, 0);
|
||||||
|
this._preeditStr = null;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
vfunc_reset() {
|
vfunc_reset() {
|
||||||
@ -154,8 +166,11 @@ var InputMethod = new Lang.Class({
|
|||||||
this._emitRequestSurrounding();
|
this._emitRequestSurrounding();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unset any preedit text
|
if (this._preeditStr) {
|
||||||
this.set_preedit_text(null, 0);
|
// Unset any preedit text
|
||||||
|
this.set_preedit_text(null, 0);
|
||||||
|
this._preeditStr = null;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
vfunc_set_cursor_location(rect) {
|
vfunc_set_cursor_location(rect) {
|
||||||
|
@ -52,11 +52,20 @@ var KeyboardManager = new Lang.Class({
|
|||||||
this._current = null;
|
this._current = null;
|
||||||
this._localeLayoutInfo = this._getLocaleLayout();
|
this._localeLayoutInfo = this._getLocaleLayout();
|
||||||
this._layoutInfos = {};
|
this._layoutInfos = {};
|
||||||
|
this._currentKeymap = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_applyLayoutGroup(group) {
|
_applyLayoutGroup(group) {
|
||||||
let options = this._buildOptionsString();
|
let options = this._buildOptionsString();
|
||||||
let [layouts, variants] = this._buildGroupStrings(group);
|
let [layouts, variants] = this._buildGroupStrings(group);
|
||||||
|
|
||||||
|
if (this._currentKeymap &&
|
||||||
|
this._currentKeymap.layouts == layouts &&
|
||||||
|
this._currentKeymap.variants == variants &&
|
||||||
|
this._currentKeymap.options == options)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._currentKeymap = {layouts, variants, options};
|
||||||
Meta.get_backend().set_keymap(layouts, variants, options);
|
Meta.get_backend().set_keymap(layouts, variants, options);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -89,8 +98,6 @@ var KeyboardManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
setUserLayouts(ids) {
|
setUserLayouts(ids) {
|
||||||
let currentId = this._current ? this._current.id : null;
|
|
||||||
let currentGroupIndex = this._current ? this._current.groupIndex : null;
|
|
||||||
this._current = null;
|
this._current = null;
|
||||||
this._layoutInfos = {};
|
this._layoutInfos = {};
|
||||||
|
|
||||||
@ -117,9 +124,6 @@ var KeyboardManager = new Lang.Class({
|
|||||||
info.group = group;
|
info.group = group;
|
||||||
info.groupIndex = groupIndex;
|
info.groupIndex = groupIndex;
|
||||||
|
|
||||||
if (currentId == id && currentGroupIndex == groupIndex)
|
|
||||||
this._current = info;
|
|
||||||
|
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<gresources>
|
<gresources>
|
||||||
<gresource prefix="/org/gnome/shell">
|
<gresource prefix="/org/gnome/shell">
|
||||||
|
<file>portalHelper/main.js</file>
|
||||||
|
|
||||||
<file>misc/config.js</file>
|
<file>misc/config.js</file>
|
||||||
<file>misc/fileUtils.js</file>
|
<file>misc/fileUtils.js</file>
|
||||||
<file>portalHelper/main.js</file>
|
<file>misc/params.js</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
</gresources>
|
</gresources>
|
||||||
|
@ -1462,7 +1462,9 @@ var AppFolderPopup = new Lang.Class({
|
|||||||
global.focus_manager.add_group(this.actor);
|
global.focus_manager.add_group(this.actor);
|
||||||
|
|
||||||
source.actor.connect('destroy', () => { this.actor.destroy(); });
|
source.actor.connect('destroy', () => { this.actor.destroy(); });
|
||||||
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
|
this._grabHelper = new GrabHelper.GrabHelper(this.actor, {
|
||||||
|
actionMode: Shell.ActionMode.POPUP
|
||||||
|
});
|
||||||
this._grabHelper.addActor(Main.layoutManager.overviewGroup);
|
this._grabHelper.addActor(Main.layoutManager.overviewGroup);
|
||||||
this.actor.connect('key-press-event', this._onKeyPress.bind(this));
|
this.actor.connect('key-press-event', this._onKeyPress.bind(this));
|
||||||
},
|
},
|
||||||
|
@ -61,6 +61,15 @@ var BoxPointer = new Lang.Class({
|
|||||||
this._sourceAlignment = 0.5;
|
this._sourceAlignment = 0.5;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
this._muteInput();
|
this._muteInput();
|
||||||
|
|
||||||
|
this.actor.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
if (this._sourceActorDestroyId) {
|
||||||
|
this._sourceActor.disconnect(this._sourceActorDestroyId);
|
||||||
|
delete this._sourceActorDestroyId;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
get arrowSide() {
|
get arrowSide() {
|
||||||
@ -424,9 +433,26 @@ var BoxPointer = new Lang.Class({
|
|||||||
// so that we can query the correct size.
|
// so that we can query the correct size.
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
this._sourceActor = sourceActor;
|
if (!this._sourceActor || sourceActor != this._sourceActor) {
|
||||||
|
if (this._sourceActorDestroyId) {
|
||||||
|
this._sourceActor.disconnect(this._sourceActorDestroyId);
|
||||||
|
delete this._sourceActorDestroyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._sourceActor = sourceActor;
|
||||||
|
|
||||||
|
if (this._sourceActor) {
|
||||||
|
this._sourceActorDestroyId = this._sourceActor.connect('destroy', () => {
|
||||||
|
this._sourceActor = null;
|
||||||
|
delete this._sourceActorDestroyId;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
this._arrowAlignment = alignment;
|
this._arrowAlignment = alignment;
|
||||||
|
|
||||||
|
if (!this._sourceActor)
|
||||||
|
return;
|
||||||
|
|
||||||
this._reposition();
|
this._reposition();
|
||||||
this._updateFlip();
|
this._updateFlip();
|
||||||
},
|
},
|
||||||
|
@ -52,6 +52,8 @@ var DashItemContainer = new Lang.Class({
|
|||||||
this.animatingOut = false;
|
this.animatingOut = false;
|
||||||
|
|
||||||
this.connect('destroy', () => {
|
this.connect('destroy', () => {
|
||||||
|
if (this.child != null)
|
||||||
|
this.child.destroy();
|
||||||
this.label.destroy();
|
this.label.destroy();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -184,7 +184,7 @@ var MessageDialogContent = new Lang.Class({
|
|||||||
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
|
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
|
let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
|
||||||
line_wrap: true };
|
line_wrap: true };
|
||||||
Object.assign(this._subtitle.clutter_text, textProps);
|
Object.assign(this._subtitle.clutter_text, textProps);
|
||||||
Object.assign(this._body.clutter_text, textProps);
|
Object.assign(this._body.clutter_text, textProps);
|
||||||
|
10
js/ui/dnd.js
10
js/ui/dnd.js
@ -132,6 +132,16 @@ var _Draggable = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onTouchEvent(actor, event) {
|
_onTouchEvent(actor, event) {
|
||||||
|
// We only handle touch events here on wayland. On X11
|
||||||
|
// we do get emulated pointer events, which already works
|
||||||
|
// for single-touch cases. Besides, the X11 passive touch grab
|
||||||
|
// set up by Mutter will make us see first the touch events
|
||||||
|
// and later the pointer events, so it will look like two
|
||||||
|
// unrelated series of events, we want to avoid double handling
|
||||||
|
// in these cases.
|
||||||
|
if (!Meta.is_wayland_compositor())
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
|
if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
|
||||||
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
@ -418,6 +418,11 @@ var IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_animationDone() {
|
_animationDone() {
|
||||||
|
this._clonesAnimating.forEach(clone => {
|
||||||
|
clone.source.reactive = true;
|
||||||
|
clone.source.opacity = 255;
|
||||||
|
clone.destroy();
|
||||||
|
});
|
||||||
this._clonesAnimating = [];
|
this._clonesAnimating = [];
|
||||||
this.emit('animation-done');
|
this.emit('animation-done');
|
||||||
},
|
},
|
||||||
@ -443,7 +448,6 @@ var IconGrid = new Lang.Class({
|
|||||||
|
|
||||||
for (let index = 0; index < actors.length; index++) {
|
for (let index = 0; index < actors.length; index++) {
|
||||||
let actor = actors[index];
|
let actor = actors[index];
|
||||||
actor.reactive = false;
|
|
||||||
actor.set_scale(0, 0);
|
actor.set_scale(0, 0);
|
||||||
actor.set_pivot_point(0.5, 0.5);
|
actor.set_pivot_point(0.5, 0.5);
|
||||||
|
|
||||||
@ -465,7 +469,6 @@ var IconGrid = new Lang.Class({
|
|||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (isLastItem)
|
if (isLastItem)
|
||||||
this._animationDone();
|
this._animationDone();
|
||||||
actor.reactive = true;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -538,10 +541,6 @@ var IconGrid = new Lang.Class({
|
|||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (isLastItem)
|
if (isLastItem)
|
||||||
this._animationDone();
|
this._animationDone();
|
||||||
|
|
||||||
actor.opacity = 255;
|
|
||||||
actor.reactive = true;
|
|
||||||
actorClone.destroy();
|
|
||||||
}};
|
}};
|
||||||
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
||||||
transition: 'easeInOutQuad',
|
transition: 'easeInOutQuad',
|
||||||
@ -562,12 +561,8 @@ var IconGrid = new Lang.Class({
|
|||||||
scale_x: scaleX,
|
scale_x: scaleX,
|
||||||
scale_y: scaleY,
|
scale_y: scaleY,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (isLastItem) {
|
if (isLastItem)
|
||||||
this._animationDone();
|
this._animationDone();
|
||||||
this._restoreItemsOpacity();
|
|
||||||
}
|
|
||||||
actor.reactive = true;
|
|
||||||
actorClone.destroy();
|
|
||||||
}};
|
}};
|
||||||
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
||||||
transition: 'easeInOutQuad',
|
transition: 'easeInOutQuad',
|
||||||
@ -581,12 +576,6 @@ var IconGrid = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_restoreItemsOpacity() {
|
|
||||||
for (let index = 0; index < this._items.length; index++) {
|
|
||||||
this._items[index].actor.opacity = 255;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_getAllocatedChildSizeAndSpacing(child) {
|
_getAllocatedChildSizeAndSpacing(child) {
|
||||||
let [,, natWidth, natHeight] = child.get_preferred_size();
|
let [,, natWidth, natHeight] = child.get_preferred_size();
|
||||||
let width = Math.min(this._getHItemSize(), natWidth);
|
let width = Math.min(this._getHItemSize(), natWidth);
|
||||||
|
@ -1322,6 +1322,7 @@ var MessageTray = new Lang.Class({
|
|||||||
this._bannerBin.y = -this._banner.actor.height;
|
this._bannerBin.y = -this._banner.actor.height;
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
this._updateShowingNotification();
|
this._updateShowingNotification();
|
||||||
|
|
||||||
let [x, y, mods] = global.get_pointer();
|
let [x, y, mods] = global.get_pointer();
|
||||||
@ -1459,6 +1460,7 @@ var MessageTray = new Lang.Class({
|
|||||||
|
|
||||||
this._pointerInNotification = false;
|
this._pointerInNotification = false;
|
||||||
this._notificationRemoved = false;
|
this._notificationRemoved = false;
|
||||||
|
Meta.enable_unredirect_for_display(global.display);
|
||||||
|
|
||||||
this._banner.actor.destroy();
|
this._banner.actor.destroy();
|
||||||
this._banner = null;
|
this._banner = null;
|
||||||
|
@ -77,10 +77,8 @@ var FdoNotificationDaemon = new Lang.Class({
|
|||||||
bitsPerSample, nChannels, data] = hints['image-data'];
|
bitsPerSample, nChannels, data] = hints['image-data'];
|
||||||
return Shell.util_create_pixbuf_from_data(data, GdkPixbuf.Colorspace.RGB, hasAlpha,
|
return Shell.util_create_pixbuf_from_data(data, GdkPixbuf.Colorspace.RGB, hasAlpha,
|
||||||
bitsPerSample, width, height, rowStride);
|
bitsPerSample, width, height, rowStride);
|
||||||
} else if (hints['image-path']) {
|
|
||||||
return new Gio.FileIcon({ file: Gio.File.new_for_path(hints['image-path']) });
|
|
||||||
}
|
}
|
||||||
return null;
|
return this._iconForNotificationData(hints['image-path']);
|
||||||
},
|
},
|
||||||
|
|
||||||
_fallbackIconForNotificationData(hints) {
|
_fallbackIconForNotificationData(hints) {
|
||||||
|
@ -118,15 +118,30 @@ var OsdWindow = new Lang.Class({
|
|||||||
this._hideTimeoutId = 0;
|
this._hideTimeoutId = 0;
|
||||||
this._reset();
|
this._reset();
|
||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed',
|
this.actor.connect('destroy', this._onDestroy.bind(this));
|
||||||
this._relayout.bind(this));
|
|
||||||
|
this._monitorsChangedId =
|
||||||
|
Main.layoutManager.connect('monitors-changed',
|
||||||
|
this._relayout.bind(this));
|
||||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||||
themeContext.connect('notify::scale-factor',
|
this._scaleChangedId =
|
||||||
this._relayout.bind(this));
|
themeContext.connect('notify::scale-factor',
|
||||||
|
this._relayout.bind(this));
|
||||||
this._relayout();
|
this._relayout();
|
||||||
Main.uiGroup.add_child(this.actor);
|
Main.uiGroup.add_child(this.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
if (this._monitorsChangedId)
|
||||||
|
Main.layoutManager.disconnect(this._monitorsChangedId);
|
||||||
|
this._monitorsChangedId = 0;
|
||||||
|
|
||||||
|
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||||
|
if (this._scaleChangedId)
|
||||||
|
themeContext.disconnect(this._scaleChangedId);
|
||||||
|
this._scaleChangedId = 0;
|
||||||
|
},
|
||||||
|
|
||||||
setIcon(icon) {
|
setIcon(icon) {
|
||||||
this._icon.gicon = icon;
|
this._icon.gicon = icon;
|
||||||
},
|
},
|
||||||
@ -204,8 +219,8 @@ var OsdWindow = new Lang.Class({
|
|||||||
_reset() {
|
_reset() {
|
||||||
this.actor.hide();
|
this.actor.hide();
|
||||||
this.setLabel(null);
|
this.setLabel(null);
|
||||||
this.setLevel(null);
|
|
||||||
this.setMaxLevel(null);
|
this.setMaxLevel(null);
|
||||||
|
this.setLevel(null);
|
||||||
},
|
},
|
||||||
|
|
||||||
_relayout() {
|
_relayout() {
|
||||||
@ -253,8 +268,8 @@ var OsdWindowManager = new Lang.Class({
|
|||||||
_showOsdWindow(monitorIndex, icon, label, level, maxLevel) {
|
_showOsdWindow(monitorIndex, icon, label, level, maxLevel) {
|
||||||
this._osdWindows[monitorIndex].setIcon(icon);
|
this._osdWindows[monitorIndex].setIcon(icon);
|
||||||
this._osdWindows[monitorIndex].setLabel(label);
|
this._osdWindows[monitorIndex].setLabel(label);
|
||||||
this._osdWindows[monitorIndex].setLevel(level);
|
|
||||||
this._osdWindows[monitorIndex].setMaxLevel(maxLevel);
|
this._osdWindows[monitorIndex].setMaxLevel(maxLevel);
|
||||||
|
this._osdWindows[monitorIndex].setLevel(level);
|
||||||
this._osdWindows[monitorIndex].show();
|
this._osdWindows[monitorIndex].show();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -998,8 +998,8 @@ var Panel = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_toggleMenu(indicator) {
|
_toggleMenu(indicator) {
|
||||||
if (!indicator) // menu not supported by current session mode
|
if (!indicator || !indicator.container.visible)
|
||||||
return;
|
return; // menu not supported by current session mode
|
||||||
|
|
||||||
let menu = indicator.menu;
|
let menu = indicator.menu;
|
||||||
if (!indicator.actor.reactive)
|
if (!indicator.actor.reactive)
|
||||||
@ -1093,6 +1093,7 @@ var Panel = new Lang.Class({
|
|||||||
let windows = activeWorkspace.list_windows().filter(metaWindow => {
|
let windows = activeWorkspace.list_windows().filter(metaWindow => {
|
||||||
return metaWindow.is_on_primary_monitor() &&
|
return metaWindow.is_on_primary_monitor() &&
|
||||||
metaWindow.showing_on_its_workspace() &&
|
metaWindow.showing_on_its_workspace() &&
|
||||||
|
!metaWindow.is_hidden() &&
|
||||||
metaWindow.get_window_type() != Meta.WindowType.DESKTOP;
|
metaWindow.get_window_type() != Meta.WindowType.DESKTOP;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -143,9 +143,10 @@ var PopupBaseMenuItem = new Lang.Class({
|
|||||||
_onKeyPressEvent(actor, event) {
|
_onKeyPressEvent(actor, event) {
|
||||||
let state = event.get_state();
|
let state = event.get_state();
|
||||||
|
|
||||||
// if user has a modifier down (except capslock)
|
// if user has a modifier down (except capslock and numlock)
|
||||||
// then don't handle the key press here
|
// then don't handle the key press here
|
||||||
state &= ~Clutter.ModifierType.LOCK_MASK;
|
state &= ~Clutter.ModifierType.LOCK_MASK;
|
||||||
|
state &= ~Clutter.ModifierType.MOD2_MASK;
|
||||||
state &= Clutter.ModifierType.MODIFIER_MASK;
|
state &= Clutter.ModifierType.MODIFIER_MASK;
|
||||||
|
|
||||||
if (state)
|
if (state)
|
||||||
|
@ -9,6 +9,7 @@ const BoxPointer = imports.ui.boxpointer;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
var EntryMenu = new Lang.Class({
|
var EntryMenu = new Lang.Class({
|
||||||
Name: 'ShellEntryMenu',
|
Name: 'ShellEntryMenu',
|
||||||
@ -150,11 +151,12 @@ function addContextMenu(entry, params) {
|
|||||||
if (entry.menu)
|
if (entry.menu)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
params = Params.parse (params, { isPassword: false });
|
params = Params.parse (params, { isPassword: false, actionMode: Shell.ActionMode.POPUP });
|
||||||
|
|
||||||
entry.menu = new EntryMenu(entry);
|
entry.menu = new EntryMenu(entry);
|
||||||
entry.menu.isPassword = params.isPassword;
|
entry.menu.isPassword = params.isPassword;
|
||||||
entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
|
entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry },
|
||||||
|
{ actionMode: params.actionMode });
|
||||||
entry._menuManager.addMenu(entry.menu);
|
entry._menuManager.addMenu(entry.menu);
|
||||||
|
|
||||||
// Add an event handler to both the entry and its clutter_text; the former
|
// Add an event handler to both the entry and its clutter_text; the former
|
||||||
|
@ -360,11 +360,14 @@ var InputSourceManager = new Lang.Class({
|
|||||||
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
||||||
this._sourcesPerWindowChanged();
|
this._sourcesPerWindowChanged();
|
||||||
this._disableIBus = false;
|
this._disableIBus = false;
|
||||||
|
this._reloading = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
reload() {
|
reload() {
|
||||||
|
this._reloading = true;
|
||||||
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
||||||
this._inputSourcesChanged();
|
this._inputSourcesChanged();
|
||||||
|
this._reloading = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_ibusReadyCallback(im, ready) {
|
_ibusReadyCallback(im, ready) {
|
||||||
@ -458,7 +461,15 @@ var InputSourceManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
activateInputSource(is, interactive) {
|
activateInputSource(is, interactive) {
|
||||||
KeyboardManager.holdKeyboard();
|
// The focus changes during holdKeyboard/releaseKeyboard may trick
|
||||||
|
// the client into hiding UI containing the currently focused entry.
|
||||||
|
// So holdKeyboard/releaseKeyboard are not called when
|
||||||
|
// 'set-content-type' signal is received.
|
||||||
|
// E.g. Focusing on a password entry in a popup in Xorg Firefox
|
||||||
|
// will emit 'set-content-type' signal.
|
||||||
|
// https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
|
||||||
|
if (!this._reloading)
|
||||||
|
KeyboardManager.holdKeyboard();
|
||||||
this._keyboardManager.apply(is.xkbId);
|
this._keyboardManager.apply(is.xkbId);
|
||||||
|
|
||||||
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
||||||
@ -473,7 +484,10 @@ var InputSourceManager = new Lang.Class({
|
|||||||
else
|
else
|
||||||
engine = 'xkb:us::eng';
|
engine = 'xkb:us::eng';
|
||||||
|
|
||||||
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
if (!this._reloading)
|
||||||
|
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
||||||
|
else
|
||||||
|
this._ibusManager.setEngine(engine);
|
||||||
this._currentInputSourceChanged(is);
|
this._currentInputSourceChanged(is);
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
|
@ -58,6 +58,9 @@ var AltSwitcher = new Lang.Class({
|
|||||||
childToShow = this._standard;
|
childToShow = this._standard;
|
||||||
} else if (this._alternate.visible) {
|
} else if (this._alternate.visible) {
|
||||||
childToShow = this._alternate;
|
childToShow = this._alternate;
|
||||||
|
} else {
|
||||||
|
this.actor.hide();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let childShown = this.actor.get_child();
|
let childShown = this.actor.get_child();
|
||||||
@ -79,7 +82,7 @@ var AltSwitcher = new Lang.Class({
|
|||||||
global.sync_pointer();
|
global.sync_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actor.visible = (childToShow != null);
|
this.actor.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
|
@ -478,6 +478,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
|
|||||||
this._dx = 0;
|
this._dx = 0;
|
||||||
this._dy = 0;
|
this._dy = 0;
|
||||||
actor.connect('captured-event', this._handleEvent.bind(this));
|
actor.connect('captured-event', this._handleEvent.bind(this));
|
||||||
|
this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'});
|
||||||
},
|
},
|
||||||
|
|
||||||
_checkActivated() {
|
_checkActivated() {
|
||||||
@ -515,7 +516,11 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
|
|||||||
|
|
||||||
// Scale deltas up a bit to make it feel snappier
|
// Scale deltas up a bit to make it feel snappier
|
||||||
this._dx += dx * 2;
|
this._dx += dx * 2;
|
||||||
this._dy += dy * 2;
|
if(!(this._touchpadSettings.get_boolean('natural-scroll')))
|
||||||
|
this._dy -= dy * 2;
|
||||||
|
else
|
||||||
|
this._dy += dy * 2;
|
||||||
|
|
||||||
this.emit('motion', this._dx, this._dy);
|
this.emit('motion', this._dx, this._dy);
|
||||||
} else {
|
} else {
|
||||||
if ((event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END && ! this._checkActivated()) ||
|
if ((event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END && ! this._checkActivated()) ||
|
||||||
@ -1044,6 +1049,10 @@ var WindowManager = new Lang.Class({
|
|||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
let activeWorkspace = workspaceManager.get_active_workspace();
|
||||||
|
|
||||||
|
// If overview is visible, we would mess up the positioning of windows.
|
||||||
|
if (Main.overview.visible)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!this._switchData)
|
if (!this._switchData)
|
||||||
this._prepareWorkspaceSwitch(activeWorkspace.index(), -1);
|
this._prepareWorkspaceSwitch(activeWorkspace.index(), -1);
|
||||||
|
|
||||||
@ -1083,7 +1092,8 @@ var WindowManager = new Lang.Class({
|
|||||||
if (newWs == activeWorkspace) {
|
if (newWs == activeWorkspace) {
|
||||||
this._switchWorkspaceCancel();
|
this._switchWorkspaceCancel();
|
||||||
} else {
|
} else {
|
||||||
this._switchData.gestureActivated = true;
|
if (this._switchData)
|
||||||
|
this._switchData.gestureActivated = true;
|
||||||
this.actionMoveWorkspace(newWs);
|
this.actionMoveWorkspace(newWs);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -465,6 +465,8 @@ var WindowOverlay = new Lang.Class({
|
|||||||
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||||
windowClone.actor.label_actor = title;
|
windowClone.actor.label_actor = title;
|
||||||
|
|
||||||
|
this._maxTitleWidth = -1;
|
||||||
|
|
||||||
this._updateCaptionId = metaWindow.connect('notify::title', w => {
|
this._updateCaptionId = metaWindow.connect('notify::title', w => {
|
||||||
this.title.text = w.title;
|
this.title.text = w.title;
|
||||||
this.title.text = this._getCaption();
|
this.title.text = this._getCaption();
|
||||||
@ -528,6 +530,13 @@ var WindowOverlay = new Lang.Class({
|
|||||||
Math.max(this.borderSize, this.closeButton.width - this.closeButton._overlap)];
|
Math.max(this.borderSize, this.closeButton.width - this.closeButton._overlap)];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setMaxChromeWidth(max) {
|
||||||
|
if (this._maxTitleWidth == max)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._maxTitleWidth = max;
|
||||||
|
},
|
||||||
|
|
||||||
relayout(animate) {
|
relayout(animate) {
|
||||||
let button = this.closeButton;
|
let button = this.closeButton;
|
||||||
let title = this.title;
|
let title = this.title;
|
||||||
@ -554,13 +563,26 @@ var WindowOverlay = new Lang.Class({
|
|||||||
else
|
else
|
||||||
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
||||||
|
|
||||||
let titleX = cloneX + (cloneWidth - title.width) / 2;
|
// Clutter.Actor.get_preferred_width() will return the fixed width if
|
||||||
|
// one is set, so we need to reset the width by calling set_width(-1),
|
||||||
|
// to forward the call down to StLabel.
|
||||||
|
// We also need to save and restore the current width, otherwise the
|
||||||
|
// animation starts from the wrong point.
|
||||||
|
let prevTitleWidth = title.width;
|
||||||
|
title.set_width(-1);
|
||||||
|
|
||||||
|
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
|
||||||
|
let titleWidth = Math.max(titleMinWidth,
|
||||||
|
Math.min(titleNatWidth, this._maxTitleWidth));
|
||||||
|
title.width = prevTitleWidth;
|
||||||
|
|
||||||
|
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
|
||||||
let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
|
let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
|
||||||
|
|
||||||
if (animate) {
|
if (animate) {
|
||||||
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), title.width);
|
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), titleWidth);
|
||||||
} else {
|
} else {
|
||||||
title.width = title.width;
|
title.width = titleWidth;
|
||||||
title.set_position(Math.floor(titleX), Math.floor(titleY));
|
title.set_position(Math.floor(titleX), Math.floor(titleY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1306,6 +1328,12 @@ var Workspace = new Lang.Class({
|
|||||||
let cloneHeight = clone.actor.height * scale;
|
let cloneHeight = clone.actor.height * scale;
|
||||||
clone.slot = [x, y, cloneWidth, cloneHeight];
|
clone.slot = [x, y, cloneWidth, cloneHeight];
|
||||||
|
|
||||||
|
let cloneCenter = x + cloneWidth / 2;
|
||||||
|
let maxChromeWidth = 2 * Math.min(
|
||||||
|
cloneCenter - area.x,
|
||||||
|
area.x + area.width - cloneCenter);
|
||||||
|
overlay.setMaxChromeWidth(Math.round(maxChromeWidth));
|
||||||
|
|
||||||
if (overlay && (initialPositioning || !clone.positioned))
|
if (overlay && (initialPositioning || !clone.positioned))
|
||||||
overlay.hide();
|
overlay.hide();
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ var WORKSPACE_CUT_SIZE = 10;
|
|||||||
|
|
||||||
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
||||||
|
|
||||||
var OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
var MUTTER_SCHEMA = 'org.gnome.mutter';
|
||||||
|
|
||||||
/* A layout manager that requests size only for primary_actor, but then allocates
|
/* A layout manager that requests size only for primary_actor, but then allocates
|
||||||
all using a fixed layout */
|
all using a fixed layout */
|
||||||
@ -674,7 +674,7 @@ var ThumbnailsBox = new Lang.Class({
|
|||||||
Main.overview.connect('window-drag-cancelled',
|
Main.overview.connect('window-drag-cancelled',
|
||||||
this._onDragCancelled.bind(this));
|
this._onDragCancelled.bind(this));
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA });
|
||||||
this._settings.connect('changed::dynamic-workspaces',
|
this._settings.connect('changed::dynamic-workspaces',
|
||||||
this._updateSwitcherVisibility.bind(this));
|
this._updateSwitcherVisibility.bind(this));
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ var AnimationType = {
|
|||||||
FADE: 1
|
FADE: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
const MUTTER_SCHEMA = 'org.gnome.mutter';
|
||||||
|
|
||||||
var WorkspacesViewBase = new Lang.Class({
|
var WorkspacesViewBase = new Lang.Class({
|
||||||
Name: 'WorkspacesViewBase',
|
Name: 'WorkspacesViewBase',
|
||||||
@ -473,7 +473,7 @@ var WorkspacesDisplay = new Lang.Class({
|
|||||||
this._workspacesViews = [];
|
this._workspacesViews = [];
|
||||||
this._primaryScrollAdjustment = null;
|
this._primaryScrollAdjustment = null;
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: OVERRIDE_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA });
|
||||||
this._settings.connect('changed::workspaces-only-on-primary',
|
this._settings.connect('changed::workspaces-only-on-primary',
|
||||||
this._workspacesOnlyOnPrimaryChanged.bind(this));
|
this._workspacesOnlyOnPrimaryChanged.bind(this));
|
||||||
this._workspacesOnlyOnPrimaryChanged();
|
this._workspacesOnlyOnPrimaryChanged();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell', 'c',
|
project('gnome-shell', 'c',
|
||||||
version: '3.30.1',
|
version: '3.30.2',
|
||||||
meson_version: '>= 0.47.0',
|
meson_version: '>= 0.47.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
|
2
po/es.po
2
po/es.po
@ -1635,7 +1635,7 @@ msgstr "Desconectado"
|
|||||||
|
|
||||||
#: js/ui/status/bluetooth.js:141
|
#: js/ui/status/bluetooth.js:141
|
||||||
msgid "On"
|
msgid "On"
|
||||||
msgstr "Encender"
|
msgstr "Encendido"
|
||||||
|
|
||||||
#: js/ui/status/brightness.js:44
|
#: js/ui/status/brightness.js:44
|
||||||
msgid "Brightness"
|
msgid "Brightness"
|
||||||
|
930
po/pt_BR.po
930
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
@ -248,14 +248,17 @@ st_button_touch_event (ClutterActor *actor,
|
|||||||
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
||||||
{
|
{
|
||||||
clutter_input_device_sequence_grab (device, sequence, actor);
|
clutter_input_device_sequence_grab (device, sequence, actor);
|
||||||
st_button_press (button, device, 0, sequence);
|
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
||||||
|
st_button_press (button, device, 0, sequence);
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
else if (event->type == CLUTTER_TOUCH_END &&
|
else if (event->type == CLUTTER_TOUCH_END &&
|
||||||
priv->device == device &&
|
priv->device == device &&
|
||||||
priv->press_sequence == sequence)
|
priv->press_sequence == sequence)
|
||||||
{
|
{
|
||||||
st_button_release (button, device, mask, 0, sequence);
|
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
||||||
|
st_button_release (button, device, mask, 0, sequence);
|
||||||
|
|
||||||
clutter_input_device_sequence_ungrab (device, sequence);
|
clutter_input_device_sequence_ungrab (device, sequence);
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
@ -984,7 +984,7 @@ file_changed_cb (GFileMonitor *monitor,
|
|||||||
char *key;
|
char *key;
|
||||||
guint file_hash;
|
guint file_hash;
|
||||||
|
|
||||||
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
|
if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
file_hash = g_file_hash (file);
|
file_hash = g_file_hash (file);
|
||||||
|
Loading…
Reference in New Issue
Block a user