Compare commits
23 Commits
wip/fmuell
...
wip/jimmac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
04b0f86433 | ||
![]() |
43584e1d35 | ||
![]() |
2f6323afc2 | ||
![]() |
d25bcbc3a7 | ||
![]() |
dd5d7d3b70 | ||
![]() |
771b1a0788 | ||
![]() |
5a9d094f3e | ||
![]() |
9ca8433170 | ||
![]() |
0ada312748 | ||
![]() |
88697add1b | ||
![]() |
4730b7a094 | ||
![]() |
aa3e64aec3 | ||
![]() |
af26e2b212 | ||
![]() |
8167f20972 | ||
![]() |
bd4aac8f49 | ||
![]() |
785dd5c5f7 | ||
![]() |
71e469a59c | ||
![]() |
6d4b9d29b8 | ||
![]() |
33f5bb39cd | ||
![]() |
a1c3900630 | ||
![]() |
cdaf164c01 | ||
![]() |
2bd80579ed | ||
![]() |
54039c3552 |
@@ -40,7 +40,7 @@ js_check:
|
||||
when: on_failure
|
||||
|
||||
build:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
stage: build
|
||||
before_script:
|
||||
- .gitlab-ci/checkout-mutter.sh
|
||||
@@ -58,7 +58,7 @@ build:
|
||||
- build
|
||||
|
||||
test:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
stage: test
|
||||
before_script:
|
||||
- ninja -C mutter/build install
|
||||
@@ -72,7 +72,7 @@ test:
|
||||
when: on_failure
|
||||
|
||||
test-pot:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
|
||||
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
stage: test
|
||||
before_script:
|
||||
- ninja -C mutter/build install
|
||||
|
@@ -1,19 +0,0 @@
|
||||
FROM registry.gitlab.gnome.org/gnome/mutter/master:v1
|
||||
|
||||
RUN dnf -y update && dnf -y upgrade && \
|
||||
dnf install -y 'dnf-command(copr)' && \
|
||||
dnf copr enable -y fmuellner/gnome-shell-ci && \
|
||||
dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \
|
||||
|
||||
# bt only exports HAVE_BLUETOOTH to js, rest are outdated build-requires
|
||||
dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel \
|
||||
upower-devel python3-devel && \
|
||||
|
||||
# We'll build mutter ourselves
|
||||
dnf remove -y --noautoremove mutter mutter-devel && \
|
||||
|
||||
# Needed for tests
|
||||
dnf install -y '*/xvfb-run' gdm-lib accountsservice-libs && \
|
||||
|
||||
dnf clean all && \
|
||||
rm -rf /var/cache/dnf
|
17
NEWS
17
NEWS
@@ -1,3 +1,20 @@
|
||||
3.33.2
|
||||
======
|
||||
* Fix keeping actors visible in scrollviews [Marco; #1061]
|
||||
* Move some chrome above popup windows [Jonas D.; !358]
|
||||
* Include 'sandboxed-app-id' in winodw introspection info [Florian; #1289]
|
||||
* Port to libecal-2.0 [Milan; !501]
|
||||
* Support TCRYPT in mount password dialog [segfault; !126]
|
||||
* Misc. bug fixes and cleanups [Florian, Marco, Veerasamy; !517, #745, !499,
|
||||
!510, !515, !546, !549]
|
||||
|
||||
Contributors:
|
||||
Cosimo Cecchi, Milan Crha, Jonas Dreßler, Florian Müllner, segfault,
|
||||
Veerasamy Sevagen, Marco Trevisan (Treviño)
|
||||
|
||||
Translators:
|
||||
Daniel Mustieles [es]
|
||||
|
||||
3.33.1
|
||||
======
|
||||
* Refine the app menu [Florian; #968]
|
||||
|
@@ -1,3 +1,5 @@
|
||||
$variant: 'light';
|
||||
|
||||
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
|
||||
@import "gnome-shell-sass/_drawing";
|
||||
@import "gnome-shell-sass/_common";
|
||||
|
@@ -11,6 +11,7 @@ $selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%));
|
||||
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
||||
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
|
||||
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
|
||||
$alt_borders_color: if($variant == 'light', darken($bg_color, 24%), darken($bg_color, 18%));
|
||||
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
||||
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
||||
$top_hilight: $borders_edge;
|
||||
@@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
||||
$osd_bg_color: #2e3436;
|
||||
$osd_borders_color: transparentize(black, 0.3);
|
||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||
$shadow_color: transparentize(black, 0.9);
|
||||
|
||||
$tooltip_borders_color: $osd_outer_borders_color;
|
||||
|
||||
|
@@ -382,7 +382,6 @@ StScrollBar {
|
||||
|
||||
.prompt-dialog-password-box {
|
||||
spacing: 1em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
.prompt-dialog-error-label {
|
||||
@@ -405,6 +404,23 @@ StScrollBar {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.prompt-dialog-pim-box {
|
||||
spacing: 1em;
|
||||
}
|
||||
|
||||
.prompt-dialog-grid {
|
||||
spacing-rows: 15px;
|
||||
spacing-columns: 1em;
|
||||
}
|
||||
|
||||
.prompt-dialog-keyfiles-box {
|
||||
spacing: 1em;
|
||||
}
|
||||
|
||||
.prompt-dialog-button.button {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
|
||||
/* Polkit Dialog */
|
||||
|
||||
@@ -996,8 +1012,11 @@ StScrollBar {
|
||||
}
|
||||
|
||||
.message-list-clear-button.button {
|
||||
background-color: transparent;
|
||||
&:hover,&:focus { background-color: lighten($bg_color,5%); }
|
||||
@include button(normal);
|
||||
&:insensitive { @include button(insensitive); }
|
||||
&:hover { @include button(hover); }
|
||||
&:focus { @include button(focus); }
|
||||
&:active { @include button(active); }
|
||||
margin: 1.5em 1.5em 0;
|
||||
}
|
||||
|
||||
@@ -1521,12 +1540,12 @@ StScrollBar {
|
||||
width: 34em;
|
||||
margin: 5px;
|
||||
border-radius: 6px;
|
||||
color: $_bubble_fg_color;
|
||||
background-color: $_bubble_bg_color;
|
||||
color: $fg_color;
|
||||
background-color: $bg_color;
|
||||
border: 1px solid $borders_color;
|
||||
//box-shadow: 0 1px 4px black;
|
||||
&:hover { background-color: $_bubble_bg_color; }
|
||||
&:focus { background-color: $_bubble_bg_color; }
|
||||
box-shadow: 0 1px 4px black;
|
||||
//&:hover { background-color: $bg_color; }
|
||||
//&:focus { background-color: $bg_color; }
|
||||
|
||||
.notification-icon { padding: 5px; }
|
||||
.notification-content { padding: 5px; spacing: 5px; }
|
||||
@@ -1541,7 +1560,6 @@ StScrollBar {
|
||||
background-color: darken($_bubble_bg_color,5%);
|
||||
&:first-child { border-radius: 0 0 0 6px; }
|
||||
&:last-child { border-radius: 0 0 6px 0; }
|
||||
&:hover, &focus { background-color: darken($_bubble_bg_color,2%); }
|
||||
}
|
||||
}
|
||||
.summary-source-counter {
|
||||
|
@@ -111,7 +111,59 @@
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
|
||||
@function _border_color($c, $darker: false) {
|
||||
@if $darker == true { @return darken($c, 20%); }
|
||||
@else { @return darken($c, 10%); }
|
||||
}
|
||||
|
||||
@function _text_shadow_color ($tc: $fg_color, $bg: $bg_color) {
|
||||
//
|
||||
// calculate the color of text shadows
|
||||
//
|
||||
// $tc is the text color
|
||||
// $bg is the background color
|
||||
//
|
||||
$_lbg: lightness($bg)/100%;
|
||||
@if lightness($tc)<50% { @return transparentize(white, 1-$_lbg/($_lbg*1.3)); }
|
||||
@else { @return transparentize(black, $_lbg*0.8); }
|
||||
}
|
||||
|
||||
@function _button_hilight_color($c) {
|
||||
//
|
||||
// calculate the right top hilight color for buttons
|
||||
//
|
||||
// $c: base color;
|
||||
//
|
||||
@if lightness($c)>95% { @return white; }
|
||||
@else if lightness($c)>90% { @return transparentize(white, 0.2); }
|
||||
@else if lightness($c)>80% { @return transparentize(white, 0.5); }
|
||||
@else if lightness($c)>50% { @return transparentize(white, 0.8); }
|
||||
@else if lightness($c)>40% { @return transparentize(white, 0.9); }
|
||||
@else { @return transparentize(white, 0.98); }
|
||||
}
|
||||
|
||||
@mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) {
|
||||
//
|
||||
// helper function for the text emboss effect
|
||||
//
|
||||
// $tc is the optional text color, not the shadow color
|
||||
//
|
||||
// TODO: this functions needs a way to deal with special cases
|
||||
//
|
||||
|
||||
$_shadow: _text_shadow_color($tc, $bg);
|
||||
|
||||
@if lightness($tc)<50% {
|
||||
text-shadow: 0 1px $_shadow;
|
||||
-gtk-icon-shadow: 0 1px $_shadow;
|
||||
}
|
||||
@else {
|
||||
text-shadow: 0 -1px $_shadow;
|
||||
-gtk-icon-shadow: 0 -1px $_shadow;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: none) {
|
||||
//
|
||||
// Button drawing function
|
||||
//
|
||||
@@ -126,96 +178,222 @@
|
||||
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
||||
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
||||
//
|
||||
|
||||
// This mixin sets the $button_fill global variable which containts the button background-image
|
||||
//
|
||||
$_hilight_color: _button_hilight_color($c);
|
||||
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
||||
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
||||
|
||||
$_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03);
|
||||
|
||||
@if $t==normal {
|
||||
//
|
||||
// normal button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
||||
$osd_bg_color);
|
||||
|
||||
color: $osd_fg_color;
|
||||
background-color: $_bg;
|
||||
border-color: $osd_borders_color;
|
||||
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
}
|
||||
@if $t==focus {
|
||||
//
|
||||
// focused button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
||||
lighten($osd_bg_color,3%));
|
||||
|
||||
color: $osd_fg_color;
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
|
||||
color: $tc;
|
||||
outline-color: transparentize($tc, 0.7);
|
||||
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||
$button_fill: if($variant == 'light', linear-gradient(to top, darken($c, 4%) 2px, $c),
|
||||
linear-gradient(to top, darken($c,1%) 2px, $c)) !global;
|
||||
background-image: $button_fill;
|
||||
@include _button_text_shadow($tc, $c);
|
||||
@include _shadows(inset 0 1px $_hilight_color, $_button_edge, $_button_shadow);
|
||||
}
|
||||
|
||||
@else if $t==hover {
|
||||
//
|
||||
// active osd button
|
||||
// hovered button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
||||
lighten($osd_bg_color,3%));
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: $_bg;
|
||||
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
|
||||
color: $tc;
|
||||
outline-color: transparentize($tc, 0.7);
|
||||
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||
border-bottom-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||
@if $variant == 'light' {
|
||||
$button_fill: linear-gradient(to top, $c, lighten($c, 1%) 1px) !global;
|
||||
@include _button_text_shadow($tc, lighten($c, 6%));
|
||||
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)), $_button_edge, $_button_shadow);
|
||||
}
|
||||
@else {
|
||||
$button_fill: linear-gradient(to top, darken($c,1%), lighten($c, 1%) 1px) !global;
|
||||
@include _button_text_shadow($tc,lighten($c, 6%));
|
||||
@include _shadows(inset 0 1px _button_hilight_color(darken($c, 2%)), $_button_edge, $_button_shadow);
|
||||
}
|
||||
background-image: $button_fill;
|
||||
}
|
||||
|
||||
@if $t==normal-alt {
|
||||
//
|
||||
// normal button alternative look
|
||||
//
|
||||
color: $tc;
|
||||
outline-color: transparentize($tc, 0.7);
|
||||
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||
@include _button_text_shadow($tc, $c);
|
||||
@if $variant == 'light' {
|
||||
background-image: linear-gradient(to bottom, lighten($c, 5%) 20%, $c 90%);
|
||||
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||
$_button_edge, $_button_shadow);
|
||||
}
|
||||
@else {
|
||||
background-image: linear-gradient(to bottom, darken($c, 3%) 20%, darken($c, 6%) 90%);
|
||||
@include _shadows(inset 0 1px $_hilight_color,
|
||||
$_button_edge, $_button_shadow);
|
||||
}
|
||||
}
|
||||
|
||||
@else if $t==hover-alt {
|
||||
//
|
||||
// hovered button alternative look
|
||||
//
|
||||
color: $tc;
|
||||
outline-color: transparentize($tc, 0.7);
|
||||
border-color: if($c != $bg_color, _border_color($c, true), $alt_borders_color);
|
||||
@if $variant == 'light' {
|
||||
$button_fill: linear-gradient(to bottom, lighten($c, 9%) 10%, lighten($c, 4%) 90%) !global;
|
||||
@include _shadows(inset 0 1px _button_hilight_color(lighten($c, 6%)),
|
||||
$_button_edge, $_button_shadow);
|
||||
}
|
||||
@else {
|
||||
$button_fill: linear-gradient(to bottom, $c 20%, darken($c, 4%) 90%) !global;
|
||||
@include _shadows(inset 0 1px $_hilight_color,
|
||||
$_button_edge, $_button_shadow);
|
||||
}
|
||||
background-image: $button_fill;
|
||||
}
|
||||
|
||||
@else if $t==active {
|
||||
//
|
||||
// pushed button
|
||||
//
|
||||
color: $tc;
|
||||
outline-color: transparentize($tc, 0.7);
|
||||
border-color: if($c != $bg_color, _border_color($c), $borders_color);
|
||||
$button_fill: if($variant == 'light', image(darken($c, 14%)), image(darken($c, 9%))) !global;
|
||||
background-image: $button_fill;
|
||||
@include _shadows(inset 0 1px transparentize($_hilight_color, 1), $_button_edge);
|
||||
|
||||
text-shadow: none;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
@else if $t==insensitive {
|
||||
//
|
||||
// insensitive button
|
||||
//
|
||||
$_bg: if($c != $bg_color, mix($c, $base_color, 85%), $insensitive_bg_color);
|
||||
|
||||
label, & { color: if($tc != $fg_color, mix($tc, $_bg, 50%), $insensitive_fg_color); }
|
||||
|
||||
border-color: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||
$button_fill: image($_bg) !global;
|
||||
background-image: $button_fill;
|
||||
text-shadow: none;
|
||||
-gtk-icon-shadow: none;
|
||||
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||
// black with 0 alpha
|
||||
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||
}
|
||||
|
||||
@else if $t==insensitive-active {
|
||||
//
|
||||
// insensitive pushed button
|
||||
//
|
||||
$_bg: if($variant == 'light', darken(mix($c, $base_color, 85%), 8%), darken(mix($c, $base_color, 85%), 6%));
|
||||
$_bc: if($c != $bg_color, _border_color($c), $insensitive_borders_color);
|
||||
|
||||
label, & { color: if($c != $bg_color, mix($tc, $_bg, 60%), $insensitive_fg_color); }
|
||||
|
||||
border-color: $_bc;
|
||||
$button_fill: image($_bg) !global;
|
||||
background-image: $button_fill;
|
||||
// white with 0 alpha to avoid an ugly transition, since no color means
|
||||
// black with 0 alpha
|
||||
@include _shadows(inset 0 1px transparentize(white, 1), $_button_edge);
|
||||
}
|
||||
|
||||
|
||||
@else if $t==osd {
|
||||
//
|
||||
// normal osd button
|
||||
//
|
||||
$_bg: if($c != $bg_color, transparentize($c, 0.5), $osd_bg_color);
|
||||
|
||||
color: $osd_fg_color;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: transparent;
|
||||
$button_fill: image($_bg) !global;
|
||||
background-image: $button_fill;
|
||||
background-clip: padding-box;
|
||||
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||
text-shadow: 0 1px black;
|
||||
-gtk-icon-shadow: 0 1px black;
|
||||
outline-color: transparentize($osd_fg_color, 0.7);
|
||||
}
|
||||
|
||||
@else if $t==osd-hover {
|
||||
//
|
||||
// active osd button
|
||||
//
|
||||
$_bg: if($c!=$bg_color, $c, $osd_borders_color);
|
||||
$_bg: if($c != $bg_color, transparentize($c, 0.3), lighten($osd_bg_color, 12%));
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: $selected_bg_color;
|
||||
// This should be none, but it's creating some issues with borders, so to
|
||||
// workaround it for now, use inset wich goes through a different code path.
|
||||
// see https://bugzilla.gnome.org/show_bug.cgi?id=752934
|
||||
box-shadow: inset 0 0 black;
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
background-color: transparent;
|
||||
$button_fill: image($_bg) !global;
|
||||
background-image: $button_fill;
|
||||
background-clip: padding-box;
|
||||
box-shadow: inset 0 1px transparentize(white, 0.9);
|
||||
text-shadow: 0 1px black;
|
||||
-gtk-icon-shadow: 0 1px black;
|
||||
outline-color: transparentize($osd_fg_color, 0.7);
|
||||
}
|
||||
@else if $t==insensitive {
|
||||
|
||||
@else if $t==osd-active {
|
||||
//
|
||||
// active osd button
|
||||
//
|
||||
$_bg: if($c != $bg_color, $c, $osd_borders_color);
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: transparent;
|
||||
$button_fill: image($_bg) !global;
|
||||
background-image: $button_fill;
|
||||
background-clip: padding-box;
|
||||
box-shadow: none;
|
||||
text-shadow: none;
|
||||
-gtk-icon-shadow: none;
|
||||
outline-color: transparentize($osd_fg_color, 0.7);
|
||||
}
|
||||
|
||||
@else if $t==osd-insensitive {
|
||||
//
|
||||
// insensitive osd button
|
||||
//
|
||||
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
|
||||
|
||||
color: $insensitive_fg_color;
|
||||
color: $osd_insensitive_fg_color;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: $_bg;
|
||||
background-color: transparent;
|
||||
$button_fill: image($osd_insensitive_bg_color) !global;
|
||||
background-image: $button_fill;
|
||||
background-clip: padding-box;
|
||||
box-shadow: none;
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
|
||||
@else if $t==undecorated {
|
||||
//
|
||||
// reset
|
||||
//
|
||||
border-color: transparent;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
$button_fill: none !global;
|
||||
background-image: $button_fill;
|
||||
|
||||
@include _shadows(inset 0 1px transparentize(white,1),
|
||||
$_blank_edge);
|
||||
@include _shadows(inset 0 1px transparentize(white, 1), $_blank_edge);
|
||||
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -10,6 +10,7 @@ $selected_fg_color: #ffffff;
|
||||
$selected_bg_color: darken(#4a90d9,20%);
|
||||
$selected_borders_color: darken($selected_bg_color, 20%);
|
||||
$borders_color: darken($bg_color,12%);
|
||||
$alt_borders_color: darken($bg_color,12%);
|
||||
$borders_edge: transparentize($fg_color, 0.9);
|
||||
$link_color: lighten($selected_bg_color,20%);
|
||||
$link_visited_color: lighten($selected_bg_color,10%);
|
||||
@@ -24,6 +25,7 @@ $osd_fg_color: #eeeeec;
|
||||
$osd_bg_color: #2e3436;
|
||||
$osd_borders_color: transparentize(black, 0.3);
|
||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||
$shadow_color: rgba(0,0,0,0);
|
||||
|
||||
$tooltip_borders_color: $osd_outer_borders_color;
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
$variant: 'dark';
|
||||
$variant: 'light';
|
||||
|
||||
@import "gnome-shell-sass/_colors"; //use gtk colors
|
||||
@import "gnome-shell-sass/_drawing";
|
||||
|
@@ -124,7 +124,7 @@ var Batch = class extends Task {
|
||||
}
|
||||
|
||||
process() {
|
||||
throw new Error('Not implemented');
|
||||
throw new GObject.NotImplementedError(`process in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
runTask() {
|
||||
|
@@ -42,8 +42,6 @@ var IntrospectService = class {
|
||||
}
|
||||
|
||||
_isStandaloneApp(app) {
|
||||
let windows = app.get_windows();
|
||||
|
||||
return app.get_windows().some(w => w.transient_for == null);
|
||||
}
|
||||
|
||||
@@ -55,6 +53,11 @@ var IntrospectService = class {
|
||||
return APP_WHITELIST.includes(sender);
|
||||
}
|
||||
|
||||
_getSandboxedAppId(app) {
|
||||
let ids = app.get_windows().map(w => w.get_sandboxed_app_id());
|
||||
return ids.find(id => id != null);
|
||||
}
|
||||
|
||||
_syncRunningApplications() {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
let apps = this._appSystem.get_running();
|
||||
@@ -76,6 +79,10 @@ var IntrospectService = class {
|
||||
newActiveApplication = app.get_id();
|
||||
}
|
||||
|
||||
let sandboxedAppId = this._getSandboxedAppId(app);
|
||||
if (sandboxedAppId)
|
||||
appInfo['sandboxed-app-id'] = new GLib.Variant('s', sandboxedAppId);
|
||||
|
||||
newRunningApplications[app.get_id()] = appInfo;
|
||||
}
|
||||
|
||||
@@ -137,6 +144,7 @@ var IntrospectService = class {
|
||||
let frameRect = window.get_frame_rect();
|
||||
let title = window.get_title();
|
||||
let wmClass = window.get_wm_class();
|
||||
let sandboxedAppId = window.get_sandboxed_app_id();
|
||||
|
||||
windowsList[windowId] = {
|
||||
'app-id': GLib.Variant.new('s', app.get_id()),
|
||||
@@ -153,6 +161,10 @@ var IntrospectService = class {
|
||||
|
||||
if (wmClass != null)
|
||||
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass);
|
||||
|
||||
if (sandboxedAppId != null)
|
||||
windowsList[windowId]['sandboxed-app-id'] =
|
||||
GLib.Variant.new('s', sandboxedAppId);
|
||||
}
|
||||
}
|
||||
invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));
|
||||
|
@@ -1,4 +1,4 @@
|
||||
const { Clutter, Gio, GLib, Shell } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
|
||||
|
||||
const CheckBox = imports.ui.checkBox;
|
||||
const Dialog = imports.ui.dialog;
|
||||
@@ -15,9 +15,10 @@ var DialogResponse = {
|
||||
CLOSED: 2
|
||||
};
|
||||
|
||||
var AccessDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(invocation, handle, title, subtitle, body, options) {
|
||||
super({ styleClass: 'access-dialog' });
|
||||
var AccessDialog = GObject.registerClass(
|
||||
class AccessDialog extends ModalDialog.ModalDialog {
|
||||
_init(invocation, handle, title, subtitle, body, options) {
|
||||
super._init({ styleClass: 'access-dialog' });
|
||||
|
||||
this._invocation = invocation;
|
||||
this._handle = handle;
|
||||
@@ -109,7 +110,7 @@ var AccessDialog = class extends ModalDialog.ModalDialog {
|
||||
});
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var AccessDialogDBus = class {
|
||||
constructor() {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
@@ -13,10 +13,11 @@ var AudioDevice = {
|
||||
|
||||
const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection');
|
||||
|
||||
var AudioDeviceSelectionDialog =
|
||||
class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
||||
constructor(devices) {
|
||||
super({ styleClass: 'audio-device-selection-dialog' });
|
||||
var AudioDeviceSelectionDialog = GObject.registerClass({
|
||||
Signals: { 'device-selected': { param_types: [GObject.TYPE_UINT] } }
|
||||
}, class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
||||
_init(devices) {
|
||||
super._init({ styleClass: 'audio-device-selection-dialog' });
|
||||
|
||||
this._deviceItems = {};
|
||||
|
||||
@@ -33,10 +34,6 @@ class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
||||
throw new Error('Too few devices for a selection');
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
_buildLayout(devices) {
|
||||
let title = new St.Label({ style_class: 'audio-selection-title',
|
||||
text: _("Select Audio Device"),
|
||||
@@ -125,7 +122,7 @@ class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
|
||||
Main.overview.hide();
|
||||
app.activate();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus {
|
||||
constructor() {
|
||||
|
@@ -5,6 +5,7 @@ const Mainloop = imports.mainloop;
|
||||
const Params = imports.misc.params;
|
||||
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
const Main = imports.ui.main;
|
||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||
|
||||
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
|
||||
@@ -199,12 +200,20 @@ var AutomountManager = class {
|
||||
// error strings are not unique for the cases in the comments below.
|
||||
if (e.message.includes('No key available with this passphrase') || // cryptsetup
|
||||
e.message.includes('No key available to unlock device') || // udisks (no password)
|
||||
e.message.includes('Error unlocking')) { // udisks (wrong password)
|
||||
// libblockdev wrong password opening LUKS device
|
||||
e.message.includes('Failed to activate device: Incorrect passphrase') ||
|
||||
// cryptsetup returns EINVAL in many cases, including wrong TCRYPT password/parameters
|
||||
e.message.includes('Failed to load device\'s parameters: Invalid argument')) {
|
||||
|
||||
this._reaskPassword(volume);
|
||||
} else {
|
||||
if (e.message.includes('Compiled against a version of libcryptsetup that does not support the VeraCrypt PIM setting')) {
|
||||
Main.notifyError(_("Unable to unlock volume"),
|
||||
_("The installed udisks version does not support the PIM setting"));
|
||||
}
|
||||
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
||||
log('Unable to mount volume ' + volume.get_name() + ': ' + e.toString());
|
||||
|
||||
this._closeOperation(volume);
|
||||
}
|
||||
}
|
||||
|
@@ -10,9 +10,10 @@ const CheckBox = imports.ui.checkBox;
|
||||
|
||||
var WORK_SPINNER_ICON_SIZE = 16;
|
||||
|
||||
var KeyringDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor() {
|
||||
super({ styleClass: 'prompt-dialog' });
|
||||
var KeyringDialog = GObject.registerClass(
|
||||
class KeyringDialog extends ModalDialog.ModalDialog {
|
||||
_init() {
|
||||
super._init({ styleClass: 'prompt-dialog' });
|
||||
|
||||
this.prompt = new Shell.KeyringPrompt();
|
||||
this.prompt.connect('show-password', this._onShowPassword.bind(this));
|
||||
@@ -212,7 +213,7 @@ var KeyringDialog = class extends ModalDialog.ModalDialog {
|
||||
_onCancelButton() {
|
||||
this.prompt.cancel();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var KeyringDummyDialog = class {
|
||||
constructor() {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, NM, Pango, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, NM, Pango, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
@@ -12,9 +12,10 @@ const ShellEntry = imports.ui.shellEntry;
|
||||
|
||||
const VPN_UI_GROUP = 'VPN Plugin UI';
|
||||
|
||||
var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(agent, requestId, connection, settingName, hints, flags, contentOverride) {
|
||||
super({ styleClass: 'prompt-dialog' });
|
||||
var NetworkSecretDialog = GObject.registerClass(
|
||||
class NetworkSecretDialog extends ModalDialog.ModalDialog {
|
||||
_init(agent, requestId, connection, settingName, hints, flags, contentOverride) {
|
||||
super._init({ styleClass: 'prompt-dialog' });
|
||||
|
||||
this._agent = agent;
|
||||
this._requestId = requestId;
|
||||
@@ -347,7 +348,7 @@ var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
|
||||
|
||||
return content;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var VPNRequestHandler = class {
|
||||
constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { AccountsService, Clutter, Gio, GLib,
|
||||
Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
|
||||
GObject, Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Animation = imports.ui.animation;
|
||||
@@ -15,9 +15,11 @@ var DIALOG_ICON_SIZE = 48;
|
||||
|
||||
var WORK_SPINNER_ICON_SIZE = 16;
|
||||
|
||||
var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(actionId, body, cookie, userNames) {
|
||||
super({ styleClass: 'prompt-dialog' });
|
||||
var AuthenticationDialog = GObject.registerClass({
|
||||
Signals: { 'done': { param_types: [GObject.TYPE_BOOLEAN] } }
|
||||
}, class AuthenticationDialog extends ModalDialog.ModalDialog {
|
||||
_init(actionId, body, cookie, userNames) {
|
||||
super._init({ styleClass: 'prompt-dialog' });
|
||||
|
||||
this.actionId = actionId;
|
||||
this.message = body;
|
||||
@@ -25,7 +27,7 @@ var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
||||
this._wasDismissed = false;
|
||||
|
||||
this._sessionUpdatedId = Main.sessionMode.connect('updated', () => {
|
||||
this._group.visible = !Main.sessionMode.isLocked;
|
||||
this.visible = !Main.sessionMode.isLocked;
|
||||
});
|
||||
|
||||
this.connect('closed', this._onDialogClosed.bind(this));
|
||||
@@ -326,8 +328,7 @@ var AuthenticationDialog = class extends ModalDialog.ModalDialog {
|
||||
|
||||
this._destroySession();
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(AuthenticationDialog.prototype);
|
||||
});
|
||||
|
||||
var AuthenticationAgent = class {
|
||||
constructor() {
|
||||
|
@@ -19,7 +19,7 @@
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const { AccountsService, Clutter, Gio,
|
||||
GLib, Pango, Polkit, Shell, St } = imports.gi;
|
||||
GLib, GObject, Pango, Polkit, Shell, St } = imports.gi;
|
||||
|
||||
const CheckBox = imports.ui.checkBox;
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
@@ -226,10 +226,11 @@ function init() {
|
||||
_endSessionDialog = new EndSessionDialog();
|
||||
}
|
||||
|
||||
var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
constructor() {
|
||||
super({ styleClass: 'end-session-dialog',
|
||||
destroyOnClose: false });
|
||||
var EndSessionDialog = GObject.registerClass(
|
||||
class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
_init() {
|
||||
super._init({ styleClass: 'end-session-dialog',
|
||||
destroyOnClose: false });
|
||||
|
||||
this._loginManager = LoginManager.getLoginManager();
|
||||
this._userManager = AccountsService.UserManager.get_default();
|
||||
@@ -747,4 +748,4 @@ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
Close(parameters, invocation) {
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Soup, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Soup, St } = imports.gi;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
@@ -176,10 +176,10 @@ function checkForUpdates() {
|
||||
});
|
||||
}
|
||||
|
||||
var InstallExtensionDialog =
|
||||
var InstallExtensionDialog = GObject.registerClass(
|
||||
class InstallExtensionDialog extends ModalDialog.ModalDialog {
|
||||
constructor(uuid, info, invocation) {
|
||||
super({ styleClass: 'extension-dialog' });
|
||||
_init(uuid, info, invocation) {
|
||||
super._init({ styleClass: 'extension-dialog' });
|
||||
|
||||
this._uuid = uuid;
|
||||
this._info = info;
|
||||
@@ -255,7 +255,7 @@ class InstallExtensionDialog extends ModalDialog.ModalDialog {
|
||||
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
function init() {
|
||||
_httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });
|
||||
|
@@ -79,7 +79,7 @@ class BaseIcon extends St.Bin {
|
||||
// This can be overridden by a subclass, or by the createIcon
|
||||
// parameter to _init()
|
||||
createIcon(size) {
|
||||
throw new Error('no implementation of createIcon in ' + this);
|
||||
throw new GObject.NotImplementedError(`createIcon in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
setIconSize(size) {
|
||||
@@ -416,7 +416,8 @@ var IconGrid = GObject.registerClass({
|
||||
|
||||
animatePulse(animationDirection) {
|
||||
if (animationDirection != AnimationDirection.IN)
|
||||
throw new Error("Pulse animation only implements 'in' animation direction");
|
||||
throw new GObject.NotImplementedError("Pulse animation only implements " +
|
||||
"'in' animation direction");
|
||||
|
||||
this._cancelAnimation();
|
||||
|
||||
|
@@ -216,10 +216,17 @@ var LayoutManager = GObject.registerClass({
|
||||
this.uiGroup = new UiActor({ name: 'uiGroup' });
|
||||
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
||||
|
||||
global.stage.add_child(this.uiGroup);
|
||||
|
||||
global.stage.remove_actor(global.window_group);
|
||||
this.uiGroup.add_actor(global.window_group);
|
||||
|
||||
global.stage.add_child(this.uiGroup);
|
||||
// Using addChrome() to add actors to uiGroup will position actors
|
||||
// underneath the top_window_group.
|
||||
// To insert actors at the top of uiGroup, we use addTopChrome() or
|
||||
// add the actor directly using uiGroup.add_actor().
|
||||
global.stage.remove_actor(global.top_window_group);
|
||||
this.uiGroup.add_actor(global.top_window_group);
|
||||
|
||||
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
|
||||
visible: false,
|
||||
@@ -231,7 +238,7 @@ var LayoutManager = GObject.registerClass({
|
||||
clip_to_allocation: true,
|
||||
layout_manager: new Clutter.BinLayout(),
|
||||
});
|
||||
this.addChrome(this.screenShieldGroup);
|
||||
this.addTopChrome(this.screenShieldGroup);
|
||||
|
||||
this.panelBox = new St.BoxLayout({ name: 'panelBox',
|
||||
vertical: true });
|
||||
@@ -247,7 +254,7 @@ var LayoutManager = GObject.registerClass({
|
||||
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
this.addChrome(this.keyboardBox);
|
||||
this.addTopChrome(this.keyboardBox);
|
||||
this._keyboardHeightNotifyId = 0;
|
||||
|
||||
// A dummy actor that tracks the mouse or text cursor, based on the
|
||||
@@ -255,9 +262,6 @@ var LayoutManager = GObject.registerClass({
|
||||
this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
|
||||
this.uiGroup.add_actor(this.dummyCursor);
|
||||
|
||||
global.stage.remove_actor(global.top_window_group);
|
||||
this.uiGroup.add_actor(global.top_window_group);
|
||||
|
||||
let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
|
||||
global.stage.remove_actor(feedbackGroup);
|
||||
this.uiGroup.add_actor(feedbackGroup);
|
||||
@@ -802,6 +806,16 @@ var LayoutManager = GObject.registerClass({
|
||||
this._trackActor(actor, params);
|
||||
}
|
||||
|
||||
// addTopChrome:
|
||||
// @actor: an actor to add to the chrome
|
||||
// @params: (optional) additional params
|
||||
//
|
||||
// Like addChrome(), but adds @actor above all windows, including popups.
|
||||
addTopChrome(actor, params) {
|
||||
this.uiGroup.add_actor(actor);
|
||||
this._trackActor(actor, params);
|
||||
}
|
||||
|
||||
// trackChrome:
|
||||
// @actor: a descendant of the chrome to begin tracking
|
||||
// @params: parameters describing how to track @actor
|
||||
@@ -1058,8 +1072,7 @@ var LayoutManager = GObject.registerClass({
|
||||
}
|
||||
}
|
||||
|
||||
if (!Meta.is_wayland_compositor())
|
||||
global.set_stage_input_region(rects);
|
||||
global.set_stage_input_region(rects);
|
||||
this._isPopupWindowVisible = isPopupMenuVisible;
|
||||
|
||||
let workspaceManager = global.workspace_manager;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const AccessDialog = imports.ui.accessDialog;
|
||||
@@ -689,12 +689,13 @@ function queueDeferredWork(workId) {
|
||||
}
|
||||
}
|
||||
|
||||
var RestartMessage = class extends ModalDialog.ModalDialog {
|
||||
constructor(message) {
|
||||
super({ shellReactive: true,
|
||||
styleClass: 'restart-message headline',
|
||||
shouldFadeIn: false,
|
||||
destroyOnClose: true });
|
||||
var RestartMessage = GObject.registerClass(
|
||||
class RestartMessage extends ModalDialog.ModalDialog {
|
||||
_init(message) {
|
||||
super._init({ shellReactive: true,
|
||||
styleClass: 'restart-message headline',
|
||||
shouldFadeIn: false,
|
||||
destroyOnClose: true });
|
||||
|
||||
let label = new St.Label({ text: message });
|
||||
|
||||
@@ -704,7 +705,7 @@ var RestartMessage = class extends ModalDialog.ModalDialog {
|
||||
y_align: St.Align.MIDDLE });
|
||||
this.buttonLayout.hide();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
function showRestartMessage(message) {
|
||||
let restartMessage = new RestartMessage(message);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Atk, Clutter, Shell, St } = imports.gi;
|
||||
const { Atk, Clutter, GObject, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Dialog = imports.ui.dialog;
|
||||
@@ -21,8 +21,20 @@ var State = {
|
||||
FADED_OUT: 4
|
||||
};
|
||||
|
||||
var ModalDialog = class {
|
||||
constructor(params) {
|
||||
var ModalDialog = GObject.registerClass({
|
||||
Properties: { 'state': GObject.ParamSpec.int('state', 'Dialog state', 'state',
|
||||
GObject.ParamFlags.READABLE,
|
||||
Math.min(...Object.values(State)),
|
||||
Math.max(...Object.values(State)),
|
||||
State.CLOSED) },
|
||||
Signals: { 'opened': {}, 'closed': {} }
|
||||
}, class ModalDialog extends St.Widget {
|
||||
_init(params) {
|
||||
super._init({ visible: false,
|
||||
x: 0,
|
||||
y: 0,
|
||||
accessible_role: Atk.Role.DIALOG });
|
||||
|
||||
params = Params.parse(params, { shellReactive: false,
|
||||
styleClass: null,
|
||||
actionMode: Shell.ActionMode.SYSTEM_MODAL,
|
||||
@@ -30,7 +42,7 @@ var ModalDialog = class {
|
||||
shouldFadeOut: true,
|
||||
destroyOnClose: true });
|
||||
|
||||
this.state = State.CLOSED;
|
||||
this._state = State.CLOSED;
|
||||
this._hasModal = false;
|
||||
this._actionMode = params.actionMode;
|
||||
this._shellReactive = params.shellReactive;
|
||||
@@ -38,31 +50,25 @@ var ModalDialog = class {
|
||||
this._shouldFadeOut = params.shouldFadeOut;
|
||||
this._destroyOnClose = params.destroyOnClose;
|
||||
|
||||
this._group = new St.Widget({ visible: false,
|
||||
x: 0,
|
||||
y: 0,
|
||||
accessible_role: Atk.Role.DIALOG });
|
||||
Main.layoutManager.modalDialogGroup.add_actor(this._group);
|
||||
Main.layoutManager.modalDialogGroup.add_actor(this);
|
||||
|
||||
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||
coordinate: Clutter.BindCoordinate.ALL });
|
||||
this._group.add_constraint(constraint);
|
||||
|
||||
this._group.connect('destroy', this._onGroupDestroy.bind(this));
|
||||
this.add_constraint(constraint);
|
||||
|
||||
this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
|
||||
x_fill: true, y_fill: true });
|
||||
this._monitorConstraint = new Layout.MonitorConstraint();
|
||||
this._backgroundBin.add_constraint(this._monitorConstraint);
|
||||
this._group.add_actor(this._backgroundBin);
|
||||
this.add_actor(this._backgroundBin);
|
||||
|
||||
this.dialogLayout = new Dialog.Dialog(this.backgroundStack, params.styleClass);
|
||||
this.contentLayout = this.dialogLayout.contentLayout;
|
||||
this.buttonLayout = this.dialogLayout.buttonLayout;
|
||||
|
||||
if (!this._shellReactive) {
|
||||
this._lightbox = new Lightbox.Lightbox(this._group,
|
||||
this._lightbox = new Lightbox.Lightbox(this,
|
||||
{ inhibitEvents: true,
|
||||
radialEffect: true });
|
||||
this._lightbox.highlight(this._backgroundBin);
|
||||
@@ -77,8 +83,16 @@ var ModalDialog = class {
|
||||
this._savedKeyFocus = null;
|
||||
}
|
||||
|
||||
destroy() {
|
||||
this._group.destroy();
|
||||
get state() {
|
||||
return this._state;
|
||||
}
|
||||
|
||||
_setState(state) {
|
||||
if (this._state == state)
|
||||
return;
|
||||
|
||||
this._state = state;
|
||||
this.notify('state');
|
||||
}
|
||||
|
||||
clearButtons() {
|
||||
@@ -96,29 +110,25 @@ var ModalDialog = class {
|
||||
return this.dialogLayout.addButton(buttonInfo);
|
||||
}
|
||||
|
||||
_onGroupDestroy() {
|
||||
this.emit('destroy');
|
||||
}
|
||||
|
||||
_fadeOpen(onPrimary) {
|
||||
if (onPrimary)
|
||||
this._monitorConstraint.primary = true;
|
||||
else
|
||||
this._monitorConstraint.index = global.display.get_current_monitor();
|
||||
|
||||
this.state = State.OPENING;
|
||||
this._setState(State.OPENING);
|
||||
|
||||
this.dialogLayout.opacity = 255;
|
||||
if (this._lightbox)
|
||||
this._lightbox.show();
|
||||
this._group.opacity = 0;
|
||||
this._group.show();
|
||||
Tweener.addTween(this._group,
|
||||
this.opacity = 0;
|
||||
this.show();
|
||||
Tweener.addTween(this,
|
||||
{ opacity: 255,
|
||||
time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: () => {
|
||||
this.state = State.OPENED;
|
||||
this._setState(State.OPENED);
|
||||
this.emit('opened');
|
||||
}
|
||||
});
|
||||
@@ -148,8 +158,8 @@ var ModalDialog = class {
|
||||
}
|
||||
|
||||
_closeComplete() {
|
||||
this.state = State.CLOSED;
|
||||
this._group.hide();
|
||||
this._setState(State.CLOSED);
|
||||
this.hide();
|
||||
this.emit('closed');
|
||||
|
||||
if (this._destroyOnClose)
|
||||
@@ -160,12 +170,12 @@ var ModalDialog = class {
|
||||
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||
return;
|
||||
|
||||
this.state = State.CLOSING;
|
||||
this._setState(State.CLOSING);
|
||||
this.popModal(timestamp);
|
||||
this._savedKeyFocus = null;
|
||||
|
||||
if (this._shouldFadeOut)
|
||||
Tweener.addTween(this._group,
|
||||
Tweener.addTween(this,
|
||||
{ opacity: 0,
|
||||
time: OPEN_AND_CLOSE_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
@@ -183,11 +193,11 @@ var ModalDialog = class {
|
||||
return;
|
||||
|
||||
let focus = global.stage.key_focus;
|
||||
if (focus && this._group.contains(focus))
|
||||
if (focus && this.contains(focus))
|
||||
this._savedKeyFocus = focus;
|
||||
else
|
||||
this._savedKeyFocus = null;
|
||||
Main.popModal(this._group, timestamp);
|
||||
Main.popModal(this, timestamp);
|
||||
this._hasModal = false;
|
||||
|
||||
if (!this._shellReactive)
|
||||
@@ -201,7 +211,7 @@ var ModalDialog = class {
|
||||
let params = { actionMode: this._actionMode };
|
||||
if (timestamp)
|
||||
params['timestamp'] = timestamp;
|
||||
if (!Main.pushModal(this._group, params))
|
||||
if (!Main.pushModal(this, params))
|
||||
return false;
|
||||
|
||||
this._hasModal = true;
|
||||
@@ -242,9 +252,8 @@ var ModalDialog = class {
|
||||
time: FADE_OUT_DIALOG_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: () => {
|
||||
this.state = State.FADED_OUT;
|
||||
this._setState(State.FADED_OUT);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ModalDialog.prototype);
|
||||
});
|
||||
|
@@ -122,7 +122,7 @@ var SlidingControl = class {
|
||||
}
|
||||
|
||||
_getSlide() {
|
||||
throw new Error('getSlide() must be overridden');
|
||||
throw new GObject.NotImplementedError(`_getSlide in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
_updateSlide() {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
@@ -23,10 +23,11 @@ const EXEC_ARG_KEY = 'exec-arg';
|
||||
|
||||
var DIALOG_GROW_TIME = 0.1;
|
||||
|
||||
var RunDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor() {
|
||||
super({ styleClass: 'run-dialog',
|
||||
destroyOnClose: false });
|
||||
var RunDialog = GObject.registerClass(
|
||||
class RunDialog extends ModalDialog.ModalDialog {
|
||||
_init() {
|
||||
super._init({ styleClass: 'run-dialog',
|
||||
destroyOnClose: false });
|
||||
|
||||
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
||||
this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA });
|
||||
@@ -282,5 +283,4 @@ var RunDialog = class extends ModalDialog.ModalDialog {
|
||||
|
||||
super.open();
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(RunDialog.prototype);
|
||||
});
|
||||
|
@@ -1,8 +1,9 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Pango, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Pango, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Animation = imports.ui.animation;
|
||||
const CheckBox = imports.ui.checkBox;
|
||||
const Dialog = imports.ui.dialog;
|
||||
const Main = imports.ui.main;
|
||||
@@ -14,6 +15,7 @@ const ShellEntry = imports.ui.shellEntry;
|
||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||
|
||||
var LIST_ITEM_ICON_SIZE = 48;
|
||||
var WORK_SPINNER_ICON_SIZE = 16;
|
||||
|
||||
const REMEMBER_MOUNT_PASSWORD_KEY = 'remember-mount-password';
|
||||
|
||||
@@ -148,7 +150,7 @@ var ShellMountOperation = class {
|
||||
}
|
||||
|
||||
this._dialogId = this._dialog.connect('response',
|
||||
(object, choice, password, remember) => {
|
||||
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
|
||||
if (choice == -1) {
|
||||
this.mountOp.reply(Gio.MountOperationResult.ABORTED);
|
||||
} else {
|
||||
@@ -158,6 +160,9 @@ var ShellMountOperation = class {
|
||||
this.mountOp.set_password_save(Gio.PasswordSave.NEVER);
|
||||
|
||||
this.mountOp.set_password(password);
|
||||
this.mountOp.set_is_tcrypt_hidden_volume(hiddenVolume);
|
||||
this.mountOp.set_is_tcrypt_system_volume(systemVolume);
|
||||
this.mountOp.set_pim(pim);
|
||||
this.mountOp.reply(Gio.MountOperationResult.HANDLED);
|
||||
}
|
||||
});
|
||||
@@ -264,9 +269,11 @@ var ShellUnmountNotifier = class extends MessageTray.Source {
|
||||
}
|
||||
};
|
||||
|
||||
var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(icon) {
|
||||
super({ styleClass: 'mount-dialog' });
|
||||
var ShellMountQuestionDialog = GObject.registerClass({
|
||||
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
|
||||
}, class ShellMountQuestionDialog extends ModalDialog.ModalDialog {
|
||||
_init(icon) {
|
||||
super._init({ styleClass: 'mount-dialog' });
|
||||
|
||||
this._content = new Dialog.MessageDialogContent({ icon });
|
||||
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
||||
@@ -276,34 +283,107 @@ var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
|
||||
_setLabelsForMessage(this._content, message);
|
||||
_setButtonsForChoices(this, choices);
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ShellMountQuestionDialog.prototype);
|
||||
});
|
||||
|
||||
var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(message, icon, flags) {
|
||||
var ShellMountPasswordDialog = GObject.registerClass({
|
||||
Signals: { 'response': { param_types: [GObject.TYPE_INT,
|
||||
GObject.TYPE_STRING,
|
||||
GObject.TYPE_BOOLEAN,
|
||||
GObject.TYPE_BOOLEAN,
|
||||
GObject.TYPE_BOOLEAN,
|
||||
GObject.TYPE_UINT] } }
|
||||
}, class ShellMountPasswordDialog extends ModalDialog.ModalDialog {
|
||||
_init(message, icon, flags) {
|
||||
let strings = message.split('\n');
|
||||
let title = strings.shift() || null;
|
||||
let body = strings.shift() || null;
|
||||
super({ styleClass: 'prompt-dialog' });
|
||||
super._init({ styleClass: 'prompt-dialog' });
|
||||
|
||||
let disksApp = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
|
||||
|
||||
let content = new Dialog.MessageDialogContent({ icon, title, body });
|
||||
this.contentLayout.add_actor(content);
|
||||
content._body.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
|
||||
this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
|
||||
content.messageBox.add(this._passwordBox);
|
||||
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
||||
let grid = new St.Widget({ style_class: 'prompt-dialog-grid',
|
||||
layout_manager: layout });
|
||||
layout.hookup_style(grid);
|
||||
let rtl = grid.get_text_direction() === Clutter.TextDirection.RTL;
|
||||
|
||||
this._passwordLabel = new St.Label(({ style_class: 'prompt-dialog-password-label',
|
||||
text: _("Password") }));
|
||||
this._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
|
||||
if (flags & Gio.AskPasswordFlags.TCRYPT) {
|
||||
this._keyfilesLabel = new St.Label(({ style_class: 'prompt-dialog-keyfiles-label',
|
||||
visible: false }));
|
||||
|
||||
this._hiddenVolume = new CheckBox.CheckBox(_("Hidden Volume"));
|
||||
content.messageBox.add(this._hiddenVolume.actor);
|
||||
|
||||
this._systemVolume = new CheckBox.CheckBox(_("Windows System Volume"));
|
||||
content.messageBox.add(this._systemVolume.actor);
|
||||
|
||||
this._keyfilesCheckbox = new CheckBox.CheckBox(_("Uses Keyfiles"));
|
||||
this._keyfilesCheckbox.actor.connect("clicked", this._onKeyfilesCheckboxClicked.bind(this));
|
||||
content.messageBox.add(this._keyfilesCheckbox.actor);
|
||||
|
||||
this._keyfilesLabel.clutter_text.set_markup(
|
||||
/* Translators: %s is the Disks application */
|
||||
_("To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead.").format(disksApp.get_name())
|
||||
);
|
||||
this._keyfilesLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
this._keyfilesLabel.clutter_text.line_wrap = true;
|
||||
content.messageBox.add(this._keyfilesLabel, { y_fill: false, y_align: St.Align.MIDDLE, expand: true });
|
||||
|
||||
this._pimLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
|
||||
text: _("PIM Number"),
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
this._pimEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
||||
can_focus: true,
|
||||
x_expand: true });
|
||||
this._pimEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
|
||||
this._pimEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
|
||||
ShellEntry.addContextMenu(this._pimEntry, { isPassword: true });
|
||||
|
||||
if (rtl) {
|
||||
layout.attach(this._pimEntry, 0, 0, 1, 1);
|
||||
layout.attach(this._pimLabel, 1, 0, 1, 1);
|
||||
} else {
|
||||
layout.attach(this._pimLabel, 0, 0, 1, 1);
|
||||
layout.attach(this._pimEntry, 1, 0, 1, 1);
|
||||
}
|
||||
|
||||
this._pimErrorMessageLabel = new St.Label({ style_class: 'prompt-dialog-password-entry',
|
||||
text: _("The PIM must be a number or empty."),
|
||||
visible: false });
|
||||
layout.attach(this._pimErrorMessageLabel, 0, 2, 2, 1);
|
||||
} else {
|
||||
this._hiddenVolume = null;
|
||||
this._systemVolume = null;
|
||||
this._pimEntry = null;
|
||||
this._pimErrorMessageLabel = null;
|
||||
}
|
||||
|
||||
this._passwordLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
|
||||
text: _("Password"),
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
||||
text: "",
|
||||
can_focus: true});
|
||||
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
||||
can_focus: true,
|
||||
x_expand: true });
|
||||
this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
|
||||
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
|
||||
this._passwordBox.add(this._passwordEntry, {expand: true });
|
||||
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
|
||||
this.setInitialKeyFocus(this._passwordEntry);
|
||||
this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
|
||||
this._passwordEntry.secondary_icon = this._workSpinner.actor;
|
||||
|
||||
if (rtl) {
|
||||
layout.attach(this._passwordEntry, 0, 1, 1, 1);
|
||||
layout.attach(this._passwordLabel, 1, 1, 1, 1);
|
||||
} else {
|
||||
layout.attach(this._passwordLabel, 0, 1, 1, 1);
|
||||
layout.attach(this._passwordEntry, 1, 1, 1, 1);
|
||||
}
|
||||
|
||||
content.messageBox.add(grid);
|
||||
|
||||
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label',
|
||||
text: _("Sorry, that didn’t work. Please try again.") });
|
||||
@@ -313,8 +393,7 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
||||
content.messageBox.add(this._errorMessageLabel);
|
||||
|
||||
if (flags & Gio.AskPasswordFlags.SAVING_SUPPORTED) {
|
||||
this._rememberChoice = new CheckBox.CheckBox();
|
||||
this._rememberChoice.getLabelActor().text = _("Remember Password");
|
||||
this._rememberChoice = new CheckBox.CheckBox(_("Remember Password"));
|
||||
this._rememberChoice.actor.checked =
|
||||
global.settings.get_boolean(REMEMBER_MOUNT_PASSWORD_KEY);
|
||||
content.messageBox.add(this._rememberChoice.actor);
|
||||
@@ -322,25 +401,36 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
||||
this._rememberChoice = null;
|
||||
}
|
||||
|
||||
let buttons = [{ label: _("Cancel"),
|
||||
action: this._onCancelButton.bind(this),
|
||||
key: Clutter.Escape
|
||||
},
|
||||
{ label: _("Unlock"),
|
||||
action: this._onUnlockButton.bind(this),
|
||||
default: true
|
||||
}];
|
||||
this._defaultButtons = [{ label: _("Cancel"),
|
||||
action: this._onCancelButton.bind(this),
|
||||
key: Clutter.Escape
|
||||
},
|
||||
{ label: _("Unlock"),
|
||||
action: this._onUnlockButton.bind(this),
|
||||
default: true
|
||||
}];
|
||||
|
||||
this.setButtons(buttons);
|
||||
this._usesKeyfilesButtons = [{ label: _("Cancel"),
|
||||
action: this._onCancelButton.bind(this),
|
||||
key: Clutter.Escape
|
||||
},
|
||||
{ /* Translators: %s is the Disks application */
|
||||
label: _("Open %s").format(disksApp.get_name()),
|
||||
action: this._onOpenDisksButton.bind(this),
|
||||
default: true
|
||||
}];
|
||||
|
||||
this.setButtons(this._defaultButtons);
|
||||
}
|
||||
|
||||
reaskPassword() {
|
||||
this._passwordEntry.set_text('');
|
||||
this._errorMessageLabel.show();
|
||||
this._workSpinner.stop();
|
||||
}
|
||||
|
||||
_onCancelButton() {
|
||||
this.emit('response', -1, '', false);
|
||||
this.emit('response', -1, '', false, false, false, 0);
|
||||
}
|
||||
|
||||
_onUnlockButton() {
|
||||
@@ -348,18 +438,68 @@ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
|
||||
}
|
||||
|
||||
_onEntryActivate() {
|
||||
let pim = 0;
|
||||
if (this._pimEntry !== null)
|
||||
pim = this._pimEntry.get_text();
|
||||
if (isNaN(pim)) {
|
||||
this._pimEntry.set_text('');
|
||||
this._pimErrorMessageLabel.show();
|
||||
return;
|
||||
} else if (this._pimErrorMessageLabel !== null) {
|
||||
this._pimErrorMessageLabel.hide();
|
||||
}
|
||||
|
||||
global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY,
|
||||
this._rememberChoice && this._rememberChoice.actor.checked);
|
||||
|
||||
this._workSpinner.play();
|
||||
this.emit('response', 1,
|
||||
this._passwordEntry.get_text(),
|
||||
this._rememberChoice &&
|
||||
this._rememberChoice.actor.checked);
|
||||
this._rememberChoice.actor.checked,
|
||||
this._hiddenVolume &&
|
||||
this._hiddenVolume.actor.checked,
|
||||
this._systemVolume &&
|
||||
this._systemVolume.actor.checked,
|
||||
parseInt(pim));
|
||||
}
|
||||
};
|
||||
|
||||
var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(icon) {
|
||||
super({ styleClass: 'mount-dialog' });
|
||||
_onKeyfilesCheckboxClicked() {
|
||||
let useKeyfiles = this._keyfilesCheckbox.actor.checked;
|
||||
this._passwordEntry.reactive = !useKeyfiles;
|
||||
this._passwordEntry.can_focus = !useKeyfiles;
|
||||
this._passwordEntry.clutter_text.editable = !useKeyfiles;
|
||||
this._passwordEntry.clutter_text.selectable = !useKeyfiles;
|
||||
this._pimEntry.reactive = !useKeyfiles;
|
||||
this._pimEntry.can_focus = !useKeyfiles;
|
||||
this._pimEntry.clutter_text.editable = !useKeyfiles;
|
||||
this._pimEntry.clutter_text.selectable = !useKeyfiles;
|
||||
this._rememberChoice.actor.reactive = !useKeyfiles;
|
||||
this._rememberChoice.actor.can_focus = !useKeyfiles;
|
||||
this._keyfilesLabel.visible = useKeyfiles;
|
||||
this.setButtons(useKeyfiles ? this._usesKeyfilesButtons : this._defaultButtons);
|
||||
}
|
||||
|
||||
_onOpenDisksButton() {
|
||||
let app = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
|
||||
if (app)
|
||||
app.activate();
|
||||
else
|
||||
Main.notifyError(
|
||||
/* Translators: %s is the Disks application */
|
||||
_("Unable to start %s").format(app.get_name()),
|
||||
/* Translators: %s is the Disks application */
|
||||
_("Couldn't find the %s application").format(app.get_name())
|
||||
);
|
||||
this._onCancelButton();
|
||||
}
|
||||
});
|
||||
|
||||
var ShellProcessesDialog = GObject.registerClass({
|
||||
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
|
||||
}, class ShellProcessesDialog extends ModalDialog.ModalDialog {
|
||||
_init(icon) {
|
||||
super._init({ styleClass: 'mount-dialog' });
|
||||
|
||||
this._content = new Dialog.MessageDialogContent({ icon });
|
||||
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
|
||||
@@ -412,8 +552,7 @@ var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
|
||||
_setLabelsForMessage(this._content, message);
|
||||
_setButtonsForChoices(this, choices);
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ShellProcessesDialog.prototype);
|
||||
});
|
||||
|
||||
const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler');
|
||||
|
||||
@@ -515,7 +654,7 @@ var GnomeShellMountOpHandler = class {
|
||||
|
||||
this._dialog = new ShellMountPasswordDialog(message, this._createGIcon(iconName), flags);
|
||||
this._dialog.connect('response',
|
||||
(object, choice, password, remember) => {
|
||||
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
|
||||
let details = {};
|
||||
let response;
|
||||
|
||||
@@ -527,6 +666,9 @@ var GnomeShellMountOpHandler = class {
|
||||
let passSave = remember ? Gio.PasswordSave.PERMANENTLY : Gio.PasswordSave.NEVER;
|
||||
details['password_save'] = GLib.Variant.new('u', passSave);
|
||||
details['password'] = GLib.Variant.new('s', password);
|
||||
details['hidden_volume'] = GLib.Variant.new('b', hiddenVolume);
|
||||
details['system_volume'] = GLib.Variant.new('b', systemVolume);
|
||||
details['pim'] = GLib.Variant.new('u', pim);
|
||||
}
|
||||
|
||||
this._clearCurrentRequest(response, details);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Shell } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
|
||||
|
||||
const Dialog = imports.ui.dialog;
|
||||
const Main = imports.ui.main;
|
||||
@@ -342,9 +342,11 @@ var AppAuthorizer = class {
|
||||
}
|
||||
};
|
||||
|
||||
var GeolocationDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(name, subtitle, reqAccuracyLevel) {
|
||||
super({ styleClass: 'geolocation-dialog' });
|
||||
var GeolocationDialog = GObject.registerClass({
|
||||
Signals: { 'response': { param_types: [GObject.TYPE_UINT] } }
|
||||
}, class GeolocationDialog extends ModalDialog.ModalDialog {
|
||||
_init(name, subtitle, reqAccuracyLevel) {
|
||||
super._init({ styleClass: 'geolocation-dialog' });
|
||||
this.reqAccuracyLevel = reqAccuracyLevel;
|
||||
|
||||
let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' });
|
||||
@@ -375,5 +377,4 @@ var GeolocationDialog = class extends ModalDialog.ModalDialog {
|
||||
this.emit('response', GeoclueAccuracyLevel.NONE);
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(GeolocationDialog.prototype);
|
||||
});
|
||||
|
@@ -613,31 +613,36 @@ var NMDeviceBluetooth = class extends NMConnectionDevice {
|
||||
}
|
||||
};
|
||||
|
||||
var NMWirelessDialogItem = class {
|
||||
constructor(network) {
|
||||
var NMWirelessDialogItem = GObject.registerClass({
|
||||
Signals: {
|
||||
'selected': {},
|
||||
}
|
||||
}, class NMWirelessDialogItem extends St.BoxLayout {
|
||||
_init(network) {
|
||||
this._network = network;
|
||||
this._ap = network.accessPoints[0];
|
||||
|
||||
this.actor = new St.BoxLayout({ style_class: 'nm-dialog-item',
|
||||
can_focus: true,
|
||||
reactive: true });
|
||||
this.actor.connect('key-focus-in', () => { this.emit('selected'); });
|
||||
super._init({ style_class: 'nm-dialog-item',
|
||||
can_focus: true,
|
||||
reactive: true });
|
||||
|
||||
this.connect('key-focus-in', () => { this.emit('selected'); });
|
||||
let action = new Clutter.ClickAction();
|
||||
action.connect('clicked', () => { this.actor.grab_key_focus(); });
|
||||
this.actor.add_action(action);
|
||||
action.connect('clicked', () => { this.grab_key_focus(); });
|
||||
this.add_action(action);
|
||||
|
||||
let title = ssidToLabel(this._ap.get_ssid());
|
||||
this._label = new St.Label({ text: title });
|
||||
|
||||
this.actor.label_actor = this._label;
|
||||
this.actor.add(this._label, { x_align: St.Align.START });
|
||||
this.label_actor = this._label;
|
||||
this.add(this._label, { x_align: St.Align.START });
|
||||
|
||||
this._selectedIcon = new St.Icon({ style_class: 'nm-dialog-icon',
|
||||
icon_name: 'object-select-symbolic' });
|
||||
this.actor.add(this._selectedIcon);
|
||||
this.add(this._selectedIcon);
|
||||
|
||||
this._icons = new St.BoxLayout({ style_class: 'nm-dialog-icons' });
|
||||
this.actor.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
|
||||
this.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
|
||||
|
||||
this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
|
||||
if (this._ap._secType != NMAccessPointSecurity.NONE)
|
||||
@@ -669,12 +674,12 @@ var NMWirelessDialogItem = class {
|
||||
else
|
||||
return 'network-wireless-signal-' + signalToIcon(this._ap.strength) + '-symbolic';
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(NMWirelessDialogItem.prototype);
|
||||
});
|
||||
|
||||
var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(client, device) {
|
||||
super({ styleClass: 'nm-dialog' });
|
||||
var NMWirelessDialog = GObject.registerClass(
|
||||
class NMWirelessDialog extends ModalDialog.ModalDialog {
|
||||
_init(client, device) {
|
||||
super._init({ styleClass: 'nm-dialog' });
|
||||
|
||||
this._client = client;
|
||||
this._device = device;
|
||||
@@ -720,9 +725,11 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
||||
Main.sessionMode.disconnect(id);
|
||||
this.close();
|
||||
});
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
}
|
||||
|
||||
destroy() {
|
||||
_onDestroy() {
|
||||
if (this._apAddedId) {
|
||||
GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
|
||||
this._apAddedId = 0;
|
||||
@@ -748,8 +755,6 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
||||
Mainloop.source_remove(this._scanTimeoutId);
|
||||
this._scanTimeoutId = 0;
|
||||
}
|
||||
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
_onScanTimeout() {
|
||||
@@ -1140,7 +1145,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog {
|
||||
this._itemBox.grab_key_focus();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var NMDeviceWireless = class {
|
||||
constructor(client, device) {
|
||||
|
@@ -162,7 +162,7 @@ var SwitcherPopup = GObject.registerClass({
|
||||
}
|
||||
|
||||
_keyPressHandler(keysym, action) {
|
||||
throw new Error('Not implemented');
|
||||
throw new GObject.NotImplementedError(`_keyPressHandler in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
_keyPressEvent(actor, event) {
|
||||
|
@@ -40,9 +40,10 @@ const GSD_WACOM_OBJECT_PATH = '/org/gnome/SettingsDaemon/Wacom';
|
||||
const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom');
|
||||
const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface);
|
||||
|
||||
var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
|
||||
constructor(wm) {
|
||||
super({ styleClass: 'prompt-dialog' });
|
||||
var DisplayChangeDialog = GObject.registerClass(
|
||||
class DisplayChangeDialog extends ModalDialog.ModalDialog {
|
||||
_init(wm) {
|
||||
super._init({ styleClass: 'prompt-dialog' });
|
||||
|
||||
this._wm = wm;
|
||||
|
||||
@@ -111,7 +112,7 @@ var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
|
||||
this._wm.complete_display_change(true);
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var WindowDimmer = class {
|
||||
constructor(actor) {
|
||||
|
@@ -835,7 +835,7 @@ var LayoutStrategy = class {
|
||||
// (optionally) for each row in @layout.rows. This method is
|
||||
// intended to be called by subclasses.
|
||||
_computeRowSizes(layout) {
|
||||
throw new Error('_computeRowSizes not implemented');
|
||||
throw new GObject.NotImplementedError(`_computeRowSizes in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
// Compute strategy-specific window slots for each window in
|
||||
@@ -848,7 +848,7 @@ var LayoutStrategy = class {
|
||||
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
|
||||
// * rows - A list of rows, which should be instantiated by _newRow.
|
||||
computeLayout(windows, layout) {
|
||||
throw new Error('computeLayout not implemented');
|
||||
throw new GObject.NotImplementedError(`computeLayout in ${this.constructor.name}`);
|
||||
}
|
||||
|
||||
// Given @layout, compute the overall scale and space of the layout.
|
||||
|
@@ -483,7 +483,6 @@ var WorkspacesDisplay = class {
|
||||
this._primaryIndex = Main.layoutManager.primaryIndex;
|
||||
|
||||
this._workspacesViews = [];
|
||||
this._primaryScrollAdjustment = null;
|
||||
switchGesture.enabled = this.actor.mapped;
|
||||
|
||||
this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA });
|
||||
@@ -491,8 +490,6 @@ var WorkspacesDisplay = class {
|
||||
this._workspacesOnlyOnPrimaryChanged.bind(this));
|
||||
this._workspacesOnlyOnPrimaryChanged();
|
||||
|
||||
this._switchWorkspaceNotifyId = 0;
|
||||
|
||||
this._notifyOpacityId = 0;
|
||||
this._restackedNotifyId = 0;
|
||||
this._scrollEventId = 0;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
project('gnome-shell', 'c',
|
||||
version: '3.33.1',
|
||||
version: '3.33.2',
|
||||
meson_version: '>= 0.47.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
@@ -20,10 +20,10 @@ gcr_req = '>= 3.7.5'
|
||||
gdesktop_req = '>= 3.7.90'
|
||||
gio_req = '>= 2.56.0'
|
||||
gi_req = '>= 1.49.1'
|
||||
gjs_req = '>= 1.54.0'
|
||||
gjs_req = '>= 1.57.2'
|
||||
gtk_req = '>= 3.15.0'
|
||||
json_glib_req = '>= 0.13.2'
|
||||
mutter_req = '>= 3.33.1'
|
||||
mutter_req = '>= 3.33.2'
|
||||
polkit_req = '>= 0.100'
|
||||
schemas_req = '>= 3.27.90'
|
||||
startup_req = '>= 0.11'
|
||||
|
110
po/es.po
110
po/es.po
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
|
||||
"PO-Revision-Date: 2019-04-23 10:15+0200\n"
|
||||
"POT-Creation-Date: 2019-05-15 17:25+0000\n"
|
||||
"PO-Revision-Date: 2019-05-16 12:35+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: es\n"
|
||||
@@ -431,7 +431,7 @@ msgstr "Buscar en Software"
|
||||
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
|
||||
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
|
||||
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
|
||||
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:889
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -522,7 +522,8 @@ msgstr "Cerrar la sesión"
|
||||
|
||||
#. Translators: A list of keywords that match the logout action, separated by semicolons
|
||||
#: js/misc/systemActions.js:105
|
||||
msgid "logout;sign off"
|
||||
#| msgid "logout;sign off"
|
||||
msgid "logout;log out;sign off"
|
||||
msgstr "cerrar;sesión;salir"
|
||||
|
||||
#. Translators: The name of the suspend action in search
|
||||
@@ -730,7 +731,6 @@ msgstr "Todas"
|
||||
|
||||
#. Translators: This is the heading of a list of open windows
|
||||
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
|
||||
#| msgid "Windows"
|
||||
msgid "Open Windows"
|
||||
msgstr "Ventanas abiertas"
|
||||
|
||||
@@ -969,7 +969,7 @@ msgstr ""
|
||||
"Alternativamente puede conectarse pulsando el botón «WPS» de su router."
|
||||
|
||||
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
|
||||
#: js/ui/status/network.js:309 js/ui/status/network.js:891
|
||||
#: js/ui/status/network.js:310 js/ui/status/network.js:892
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
@@ -1044,7 +1044,7 @@ msgstr "Contraseña de la red de banda ancha móvil"
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Se requiere una contraseña para conectarse a «%s»."
|
||||
|
||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
|
||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
@@ -1365,13 +1365,13 @@ msgid "Leave On"
|
||||
msgstr "Dejar activada"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
|
||||
#: js/ui/status/network.js:1263
|
||||
#: js/ui/status/network.js:1264
|
||||
msgid "Turn On"
|
||||
msgstr "Encender"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
|
||||
#: js/ui/status/network.js:128 js/ui/status/network.js:310
|
||||
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
|
||||
#: js/ui/status/network.js:128 js/ui/status/network.js:311
|
||||
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
|
||||
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
|
||||
#: js/ui/status/rfkill.js:106
|
||||
msgid "Turn Off"
|
||||
@@ -1433,7 +1433,7 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: js/ui/messageTray.js:1480
|
||||
#: js/ui/messageTray.js:1479
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
@@ -1526,7 +1526,7 @@ msgctxt "System menu in the top bar"
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: js/ui/panel.js:864
|
||||
#: js/ui/panel.js:861
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
@@ -1664,11 +1664,11 @@ msgstr "Rechazo de teclas"
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Teclas del ratón"
|
||||
|
||||
#: js/ui/status/accessibility.js:151
|
||||
#: js/ui/status/accessibility.js:135
|
||||
msgid "High Contrast"
|
||||
msgstr "Contraste alto"
|
||||
|
||||
#: js/ui/status/accessibility.js:182
|
||||
#: js/ui/status/accessibility.js:177
|
||||
msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
@@ -1676,7 +1676,7 @@ msgstr "Texto grande"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
|
||||
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
@@ -1749,13 +1749,13 @@ msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
|
||||
#: js/ui/status/network.js:417 js/ui/status/network.js:1293
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "%s apagada"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:419
|
||||
#: js/ui/status/network.js:420
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "%s conectada"
|
||||
@@ -1763,189 +1763,189 @@ msgstr "%s conectada"
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||
#. %s is a network identifier
|
||||
#: js/ui/status/network.js:424
|
||||
#: js/ui/status/network.js:425
|
||||
#, javascript-format
|
||||
msgid "%s Unmanaged"
|
||||
msgstr "%s sin gestionar"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:427
|
||||
#: js/ui/status/network.js:428
|
||||
#, javascript-format
|
||||
msgid "%s Disconnecting"
|
||||
msgstr "Desconectando %s"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
|
||||
#: js/ui/status/network.js:435 js/ui/status/network.js:1285
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "Conectando %s"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:437
|
||||
#: js/ui/status/network.js:438
|
||||
#, javascript-format
|
||||
msgid "%s Requires Authentication"
|
||||
msgstr "%s requiere autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing; %s is a network identifier
|
||||
#: js/ui/status/network.js:445
|
||||
#: js/ui/status/network.js:446
|
||||
#, javascript-format
|
||||
msgid "Firmware Missing For %s"
|
||||
msgstr "Falta el «firmware» para %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||
#: js/ui/status/network.js:449
|
||||
#: js/ui/status/network.js:450
|
||||
#, javascript-format
|
||||
msgid "%s Unavailable"
|
||||
msgstr "%s no disponible"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:452
|
||||
#: js/ui/status/network.js:453
|
||||
#, javascript-format
|
||||
msgid "%s Connection Failed"
|
||||
msgstr "Falló la conexión %s"
|
||||
|
||||
#: js/ui/status/network.js:464
|
||||
#: js/ui/status/network.js:465
|
||||
msgid "Wired Settings"
|
||||
msgstr "Configuración de red cableada"
|
||||
|
||||
#: js/ui/status/network.js:506
|
||||
#: js/ui/status/network.js:507
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Configuración de banda ancha móvil"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
|
||||
#: js/ui/status/network.js:554 js/ui/status/network.js:1290
|
||||
#, javascript-format
|
||||
msgid "%s Hardware Disabled"
|
||||
msgstr "Hardware %s desactivado"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated
|
||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||
#: js/ui/status/network.js:557
|
||||
#: js/ui/status/network.js:558
|
||||
#, javascript-format
|
||||
msgid "%s Disabled"
|
||||
msgstr "%s desactivado"
|
||||
|
||||
#: js/ui/status/network.js:597
|
||||
#: js/ui/status/network.js:598
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Conectar a Internet"
|
||||
|
||||
#: js/ui/status/network.js:786
|
||||
#: js/ui/status/network.js:787
|
||||
msgid "Airplane Mode is On"
|
||||
msgstr "El modo avión está activado"
|
||||
|
||||
#: js/ui/status/network.js:787
|
||||
#: js/ui/status/network.js:788
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
|
||||
|
||||
#: js/ui/status/network.js:788
|
||||
#: js/ui/status/network.js:789
|
||||
msgid "Turn Off Airplane Mode"
|
||||
msgstr "Apagar el modo avión"
|
||||
|
||||
#: js/ui/status/network.js:797
|
||||
#: js/ui/status/network.js:798
|
||||
msgid "Wi-Fi is Off"
|
||||
msgstr "La Wi-Fi está desactivada"
|
||||
|
||||
#: js/ui/status/network.js:798
|
||||
#: js/ui/status/network.js:799
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
|
||||
|
||||
#: js/ui/status/network.js:799
|
||||
#: js/ui/status/network.js:800
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Activar la Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:824
|
||||
#: js/ui/status/network.js:825
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Redes Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:826
|
||||
#: js/ui/status/network.js:827
|
||||
msgid "Select a network"
|
||||
msgstr "Seleccionar una red"
|
||||
|
||||
#: js/ui/status/network.js:855
|
||||
#: js/ui/status/network.js:856
|
||||
msgid "No Networks"
|
||||
msgstr "No hay redes"
|
||||
|
||||
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
|
||||
#: js/ui/status/network.js:877 js/ui/status/rfkill.js:104
|
||||
msgid "Use hardware switch to turn off"
|
||||
msgstr "Usar el interruptor hardware para apagar"
|
||||
|
||||
#: js/ui/status/network.js:1152
|
||||
#: js/ui/status/network.js:1153
|
||||
msgid "Select Network"
|
||||
msgstr "Seleccionar red"
|
||||
|
||||
#: js/ui/status/network.js:1158
|
||||
#: js/ui/status/network.js:1159
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Configuración de Wi-Fi"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1280
|
||||
#: js/ui/status/network.js:1281
|
||||
#, javascript-format
|
||||
msgid "%s Hotspot Active"
|
||||
msgstr "Punto de acceso %s activo"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1295
|
||||
#: js/ui/status/network.js:1296
|
||||
#, javascript-format
|
||||
msgid "%s Not Connected"
|
||||
msgstr "%s no conectado"
|
||||
|
||||
#: js/ui/status/network.js:1392
|
||||
#: js/ui/status/network.js:1393
|
||||
msgid "connecting…"
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1395
|
||||
#: js/ui/status/network.js:1396
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#: js/ui/status/network.js:1397
|
||||
#: js/ui/status/network.js:1398
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: js/ui/status/network.js:1447
|
||||
#: js/ui/status/network.js:1448
|
||||
msgid "VPN Settings"
|
||||
msgstr "Configuración de VPN"
|
||||
|
||||
#: js/ui/status/network.js:1464
|
||||
#: js/ui/status/network.js:1465
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: js/ui/status/network.js:1474
|
||||
#: js/ui/status/network.js:1475
|
||||
msgid "VPN Off"
|
||||
msgstr "VPN apagada"
|
||||
|
||||
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
|
||||
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: js/ui/status/network.js:1564
|
||||
#: js/ui/status/network.js:1565
|
||||
#, javascript-format
|
||||
msgid "%s Wired Connection"
|
||||
msgid_plural "%s Wired Connections"
|
||||
msgstr[0] "%s conexión cableada"
|
||||
msgstr[1] "%s conexiones cableadas"
|
||||
|
||||
#: js/ui/status/network.js:1568
|
||||
#: js/ui/status/network.js:1569
|
||||
#, javascript-format
|
||||
msgid "%s Wi-Fi Connection"
|
||||
msgid_plural "%s Wi-Fi Connections"
|
||||
msgstr[0] "%s conexión inalámbrica"
|
||||
msgstr[1] "%s conexiones inalámbricas"
|
||||
|
||||
#: js/ui/status/network.js:1572
|
||||
#: js/ui/status/network.js:1573
|
||||
#, javascript-format
|
||||
msgid "%s Modem Connection"
|
||||
msgid_plural "%s Modem Connections"
|
||||
msgstr[0] "%s conexión por módem"
|
||||
msgstr[1] "%s conexiones por módem"
|
||||
|
||||
#: js/ui/status/network.js:1705
|
||||
#: js/ui/status/network.js:1706
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: js/ui/status/network.js:1706
|
||||
#: js/ui/status/network.js:1707
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
|
@@ -1151,11 +1151,10 @@ _shell_app_handle_startup_sequence (ShellApp *app,
|
||||
if (starting && shell_app_get_state (app) == SHELL_APP_STATE_STOPPED)
|
||||
{
|
||||
MetaDisplay *display = shell_global_get_display (shell_global_get ());
|
||||
MetaX11Display *x11_display = meta_display_get_x11_display (display);
|
||||
|
||||
shell_app_state_transition (app, SHELL_APP_STATE_STARTING);
|
||||
meta_x11_display_focus_the_no_focus_window (x11_display,
|
||||
meta_startup_sequence_get_timestamp (sequence));
|
||||
meta_display_unset_input_focus (display,
|
||||
meta_startup_sequence_get_timestamp (sequence));
|
||||
app->started_on_workspace = meta_startup_sequence_get_workspace (sequence);
|
||||
}
|
||||
|
||||
|
@@ -61,8 +61,6 @@ struct _ShellGlobal {
|
||||
|
||||
MetaDisplay *meta_display;
|
||||
MetaWorkspaceManager *workspace_manager;
|
||||
GdkDisplay *gdk_display;
|
||||
MetaX11Display *x11_display;
|
||||
Display *xdisplay;
|
||||
|
||||
char *session_mode;
|
||||
@@ -642,6 +640,9 @@ shell_global_set_stage_input_region (ShellGlobal *global,
|
||||
|
||||
g_return_if_fail (SHELL_IS_GLOBAL (global));
|
||||
|
||||
if (meta_is_wayland_compositor ())
|
||||
return;
|
||||
|
||||
nrects = g_slist_length (rectangles);
|
||||
rects = g_new (XRectangle, nrects);
|
||||
for (r = rectangles, i = 0; r; r = r->next, i++)
|
||||
@@ -846,10 +847,6 @@ _shell_global_set_plugin (ShellGlobal *global,
|
||||
display = meta_plugin_get_display (plugin);
|
||||
global->meta_display = display;
|
||||
global->workspace_manager = meta_display_get_workspace_manager (display);
|
||||
global->x11_display = meta_display_get_x11_display (display);
|
||||
global->xdisplay = meta_x11_display_get_xdisplay (global->x11_display);
|
||||
|
||||
global->gdk_display = gdk_x11_lookup_xdisplay (global->xdisplay);
|
||||
|
||||
global->stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
|
||||
|
||||
@@ -859,6 +856,8 @@ _shell_global_set_plugin (ShellGlobal *global,
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaX11Display *x11_display = meta_display_get_x11_display (display);
|
||||
global->xdisplay = meta_x11_display_get_xdisplay (x11_display);
|
||||
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
|
||||
}
|
||||
|
||||
|
@@ -18,6 +18,7 @@ st_headers = [
|
||||
'st-scrollable.h',
|
||||
'st-scroll-bar.h',
|
||||
'st-scroll-view.h',
|
||||
'st-scroll-view-fade.h',
|
||||
'st-settings.h',
|
||||
'st-shadow.h',
|
||||
'st-texture-cache.h',
|
||||
@@ -73,6 +74,7 @@ st_sources = [
|
||||
'st-scrollable.c',
|
||||
'st-scroll-bar.c',
|
||||
'st-scroll-view.c',
|
||||
'st-scroll-view-fade.c',
|
||||
'st-settings.c',
|
||||
'st-shadow.c',
|
||||
'st-texture-cache.c',
|
||||
@@ -94,11 +96,6 @@ st_enums = gnome.mkenums_simple('st-enum-types',
|
||||
|
||||
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums
|
||||
|
||||
st_non_gir_sources = [
|
||||
'st-scroll-view-fade.c',
|
||||
'st-scroll-view-fade.h'
|
||||
]
|
||||
|
||||
data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
|
||||
|
||||
custom_target('scroll-view-fade-glsl',
|
||||
@@ -123,7 +120,7 @@ st_cflags = [
|
||||
|
||||
# Currently meson requires a shared library for building girs
|
||||
libst = shared_library('st-1.0',
|
||||
sources: st_gir_sources + st_non_gir_sources,
|
||||
sources: st_gir_sources,
|
||||
c_args: st_cflags,
|
||||
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep],
|
||||
build_rpath: mutter_typelibdir,
|
||||
|
Reference in New Issue
Block a user