diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 18851e9a..9a9ba426 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ include: - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml" -image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/34:2021-08-12.0 +image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/35:2022-02-18.0 stages: - pre_review @@ -26,7 +26,6 @@ default: variables: FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions LINT_LOG: "eslint-report.xml" - JS_LOG: "js-report.txt" workflow: rules: @@ -103,12 +102,7 @@ js_check: stage: review <<: *prereview_req script: - - find extensions -name '*.js' -exec js78 -c '{}' ';' 2>&1 | tee $JS_LOG - - (! grep -q . $JS_LOG) - artifacts: - paths: - - ${JS_LOG} - when: on_failure + - gjs-check-syntax eslint: stage: review diff --git a/NEWS b/NEWS index bc833886..f59b55f5 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +42.rc +===== +* Misc. bug fixes and cleanups [Florian; !215, !218] + +Contributors: + Florian Müllner + +Translators: + Marek Černocký [cs], Dušan Kazik [sk], Piotr Drąg [pl], Jiri Grönroos [fi], + Luna Jernberg [sv], Alan Mortensen [da], Charles Monzat [fr], + Changwoo Ryu [ko] + 42.beta ======= * workspace-indicator: Fix cancelling editing with Esc [Florian; !208] diff --git a/data/gnome-shell-sass/_colors.scss b/data/gnome-shell-sass/_colors.scss index 9d8f72f2..7dfe6662 100644 --- a/data/gnome-shell-sass/_colors.scss +++ b/data/gnome-shell-sass/_colors.scss @@ -1,34 +1,36 @@ // When color definition differs for dark and light variant, -// it gets @if ed depending on $variant +// it gets @if-ed depending on $variant -$base_color: if($variant == 'light', #fff, lighten(desaturate(#241f31, 20%), 2%)); -$bg_color: if($variant == 'light', #f6f5f4, darken(desaturate(#3d3846, 100%), 4%)); -$fg_color: if($variant == 'light', #2e3436, #eeeeec); +$base_color: if($variant == 'light', #fff, darken(desaturate(#241f31, 100%), 2%)); +$bg_color: if($variant == 'light', #f6f5f4, lighten($base_color, 5%)); +$fg_color: if($variant == 'light', transparentize(black, .2), white); $selected_fg_color: #fff; -$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 10%)); +$selected_bg_color: #3584e4; $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, 8%)); -$borders_edge: if($variant == 'light', rgba(255,255,255,0.8), transparentize($fg_color, 0.93)); + +$borders_color: if($variant == 'light', transparentize($fg_color, .5), transparentize($fg_color, .9)); +$borders_edge: if($variant == 'light', rgba(255,255,255,0.8), lighten($bg_color, 5%)); + $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; -$warning_color: #f57900; -$error_color: #ff8080; -$success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%)); +$warning_color: if($variant == 'light', #e5a50a, #f5c211);; +$error_color: if($variant == 'light', #e01b24, #c01c28); +$success_color: if($variant == 'light', #2ec27e, #26a269); $destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%)); -$osd_fg_color: #eeeeec; -$osd_text_color: white; -$osd_bg_color: transparentize(darken(desaturate(#3d3846, 100%), 12%),0.04); +$osd_fg_color: white; +$osd_bg_color: transparentize(desaturate($bg_color, 100%),0.04); $osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5); -$osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%); +$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%)); $osd_borders_color: transparentize(black, 0.3); -$osd_outer_borders_color: transparentize(white, 0.84); +$osd_outer_borders_color: transparentize($osd_fg_color, 0.98); $shadow_color: if($variant == 'light', rgba(0,0,0,0.1), rgba(0,0,0,0.2)); -$system_bg_color: desaturate(#241f31,100%); //neutralize the HIG color + +// overview background color +$system_bg_color: $base_color; //insensitive state derived colors $insensitive_fg_color: mix($fg_color, $bg_color, 50%); diff --git a/data/gnome-shell-sass/_common.scss b/data/gnome-shell-sass/_common.scss index 9df3d8d4..c6e64766 100644 --- a/data/gnome-shell-sass/_common.scss +++ b/data/gnome-shell-sass/_common.scss @@ -28,26 +28,24 @@ $cakeisalie: "This stylesheet is generated, DO NOT EDIT"; // padding, margin and spacing $base_padding: 6px; $base_margin: 4px; -$base_spacing: 6px; // border radii $base_border_radius: 8px; -$modal_radius:$base_border_radius * 2; +// radii of things that display over other things, e.g. popovers +$modal_radius: $base_border_radius*2; // 24px -// non-standard colors -$bubble_borders_color: lighten($borders_color, if($variant=='light', 0%, 5%)); -// $bubble_borders_color: if($variant == 'light', rgba(255,255,255,0.1), rgba(0,0,0,0.3)); +// derived hover colors +$hover_bg_color: if($variant=='light', darken($bg_color, 3%), lighten($bg_color, 4%)); +$hover_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 4%)); -// hover -$hover_bg_color: if($variant=='light', darken($bg_color, 3%), lighten($bg_color, 5%)); -$hover_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 5%)); -$hover_borders_color: lighten($borders_color,if($variant=='light', 5%, 3%)); +// derived active colors +$active_bg_color: if($variant=='light', darken($bg_color, 5%), lighten($bg_color, 6%)); +$active_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 6%)); -// active -$active_bg_color: if($variant == 'light', darken($bg_color, 7%), darken($bg_color, 9%)); -$active_fg_color: darken($fg_color,if($variant=='light', 5%, 3%)); -$active_borders_color: darken($borders_color,if($variant=='light', 5%, 3%)); +// derived checked colors +$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 9%)); +$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 9%)); // fonts $base_font_size: 11; @@ -55,6 +53,7 @@ $text_shadow_color: if($variant == 'light', rgba(255,255,255,0.3), rgba(0,0,0,0. // icons $base_icon_size: 1.09em; +$large_icon_size: $base_icon_size*2; // 32px // $base_icon_size: 16px; // Stage @@ -65,20 +64,13 @@ stage { /* Common Stylings */ -// Text -%status_text { - font-size: 2em; - font-weight: bold; - color: $osd_fg_color; -} - // osd panels %osd_panel { color: $osd_fg_color; background-color: $osd_bg_color; - //border: 1px solid $osd_outer_borders_color; - border-radius: $base_border_radius * 2 + 4px; - padding: $base_padding * 2; + border: 1px solid $osd_outer_borders_color; + border-radius: 999px; + padding: $base_padding*2; } // Overview panels @@ -89,9 +81,10 @@ stage { } // icon tiles -%icon_tile { - border-radius: $base_border_radius + 4px; +%tile { + border-radius: $base_border_radius * 2; // 16px padding: $base_padding; + spacing: $base_padding; border: 2px solid transparent; transition-duration: 100ms; text-align: center; @@ -101,76 +94,128 @@ stage { %bubble_panel { color: $fg_color; background-color: $bg_color; - border: 1px solid if($variant=='light', rgba(0,0,0, 0.6), $borders_color); + border-radius: $base_border_radius*1.25 + 1px; + border: 1px solid $borders_edge; } -// button styling +// normal button styling %button { - border-radius: $base_border_radius; + border-radius: $base_border_radius - 2px; // 6px border-style: solid; border-width: 1px; - min-height: 22px; - padding: $base_padding * 0.5 $base_padding * 4; + font-weight: bold; + padding: $base_padding*.5 $base_padding*4; @include button(normal); &:focus { @include button(focus);} &:hover { @include button(hover);} &:insensitive { @include button(insensitive);} &:active { @include button(active);} + &:checked { @include button(checked);} } -// buttons in dialogs +// buttons in dialogs/notifications +// lighter in color and have a greater radius + +$bubble_button_radius:$base_border_radius*1.25; +$bubble_buttons_color: if($variant == 'light', darken($bg_color, 12%), lighten($bg_color, 7%)); + %bubble_button { - @include button(normal, $shadow: none); padding: $base_padding * 2; - border-style: solid; - border-width: 1px; - border-left-width: 0; - border-bottom-width: 0; + font-weight: bold !important; - &:insensitive { @include button(insensitive, $shadow: none); } - &:focus { @include button(focus, $shadow: none); } - &:hover { @include button(hover, $shadow: none); } - &:active { @include button(active, $shadow: none); } + &:ltr {margin-right: 1px;} + &:rtl {margin-left: 1px;} - // radius is 2 pixel less to fit in bubble - &:first-child { - border-radius: 0 0 0 $modal_radius - 2px; + @include button(normal, $c:$bubble_buttons_color); + &:insensitive { @include button(insensitive, $c:$bubble_buttons_color);} + &:focus { @include button(focus, $c:$bubble_buttons_color);} + &:hover { @include button(hover, $c:$bubble_buttons_color);} + &:active { @include button(active, $c:$bubble_buttons_color);} + &:checked { @include button(checked, $c:$bubble_buttons_color);} + + &:first-child:ltr { + border-radius: 0 0 0 $bubble_button_radius; } - &:last-child { - border-right-width: 0; - border-radius: 0 0 $modal_radius - 2px 0; + &:last-child:ltr { + border-radius: 0 0 $bubble_button_radius 0; + margin-right: 0 !important; + } + + &:first-child:rtl { + border-radius: 0 0 $bubble_button_radius 0; + } + + &:last-child:rtl { + border-radius: 0 0 0 $bubble_button_radius; + margin-left: 0 !important; } &:first-child:last-child { - border-radius: 0 0 $modal_radius - 2px $modal_radius - 2px; + border-radius: 0 0 $bubble_button_radius $bubble_button_radius !important; + margin-left: 0 !important; + margin-right: 0 !important; } } - -// notification styling -@mixin notification_bubble($flat: false) { - border-width: 1px; - border-style: solid; - border-radius: $base_border_radius + 2px; - margin: $base_margin; - - @if $flat { - @include button(undecorated); - } @else { - @include button(normal); - } - - &:focus { - @include button(focus); - } - - &:hover { - @include button(hover); - } - - &:active { - @include button(active); - } +// buttons on OSD elements +// that are undecorated by default and use OSD colors +%osd_button { + @include button(undecorated); + &:insensitive { @include button(undecorated, $c:$osd_bg_color);} + &:focus { @include button(focus, $c:$osd_bg_color);} + &:hover { @include button(hover, $c:$osd_bg_color);} + &:active { @include button(active, $c:$osd_bg_color);} + &:outlined,&:checked { @include button(checked, $c:$osd_bg_color);} } + +/* General Typography */ + +%large_title { + font-weight: 300; + @include fontsize(24); +} + +%title_1 { + font-weight: 800; + @include fontsize(20); +} + +%title_2 { + font-weight: 800; + @include fontsize(15); +} + +%title_3 { + font-weight: 700; + @include fontsize(15); +} + +%title_4 { + font-weight: 700; + @include fontsize(13); +} + +%heading { + font-weight: 700; + @include fontsize(11); +} + +%caption_heading { + font-weight: 700; + @include fontsize(9); +} + +%caption { + font-weight: 400; + @include fontsize(9); +} + +%smaller { + font-weight: 400; + @include fontsize(8); +} + +%monospace {font-family: monospace;} +%numeric { font-feature-settings: "tnum";} diff --git a/data/gnome-shell-sass/_drawing.scss b/data/gnome-shell-sass/_drawing.scss index f09eb123..10c1c3f3 100644 --- a/data/gnome-shell-sass/_drawing.scss +++ b/data/gnome-shell-sass/_drawing.scss @@ -25,103 +25,51 @@ // entries -@mixin entry($t, $fc:$selected_bg_color, $edge: $borders_edge) { +@mixin entry($t, $fc:$selected_bg_color) { // // Entries drawing function // // $t: entry type // $fc: focus color -// $edge: set to none to not draw the bottom edge or specify a color to not use the default one // // possible $t values: // normal, focus, insensitive // @if $t==normal { - background-color: $base_color; - border-color: $borders_color; - + background-color: lighten($bg_color, 5%); + color: transparentize($fg_color,0.3); + border: 2px solid lighten($bg_color, 5%); } + @if $t==focus { - border-color: if($fc==$selected_bg_color, - $selected_borders_color, - darken($fc,35%)); - box-shadow: inset 0 0 0 2px $fc; + background-color: mix(lighten($bg_color, 5%), $selected_bg_color, 95%); + border-color: $fc; + color: $fg_color; + &:hover {} } - @if $t==hover { } + + @if $t==hover { + background-color:lighten($hover_bg_color, 5%); + border-color:lighten($hover_bg_color, 5%); + color: transparentize($fg_color,0.3); + } + @if $t==insensitive { + background-color:lighten($insensitive_bg_color, 5%); + border-color: lighten($insensitive_bg_color, 5%); color: $insensitive_fg_color; - border-color: $insensitive_bg_color; - box-shadow: none; } } -// buttons - -@function draw_border_color ($c) { - // - // colored buttons want the border form the base color - // - @return if($variant == 'light', darken($c, 18%), darken($c, 4%)); -} - -@function draw_text_shadow_color ($tc:$fg_color, $bg:$bg_color) { +// On-screen Keyboard +@mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) { // -// calculate the color of text shadows +// Keyboard key drawing function // -// $tc is the text color -// $bg is the background color -// - $lbg: lightness($bg)/100%; - @if lightness($tc)<50% { @return rgba(255,255,255,$lbg/($lbg*1.3)); } - @else { @return rgba(0,0,0,1-$lbg*0.8); } -} - -@function draw_button_hilight_color($c) { -// -// calculate the right top highlight color for buttons -// -// $c: base color; -// - @if lightness($c)>90% { @return white; } - @else if lightness($c)>80% { @return rgba(255,255,255, 0.7); } - @else if lightness($c)>50% { @return rgba(255,255,255, 0.5); } - @else if lightness($c)>40% { @return rgba(255,255,255, 0.3); } - @else { @return rgba(255,255,255, 0.1); } -} - -@mixin draw_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: draw_text_shadow_color($tc, $bg); - - @if lightness($tc)<50% { - text-shadow: 0 1px $shadow; - icon-shadow: 0 1px $shadow; - } - @else { - text-shadow: 0 -1px $shadow; - icon-shadow: 0 -1px $shadow; - } -} - -@mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: $borders_edge, $shadow: $shadow_color) { -// -// Button drawing function -// -// $t: button type, -// $c: base button color for colored* types +// $t: key type, +// $c: base key color for colored* types // $tc: optional text color for colored* types -// $edge: set to none to not draw the bottom edge or specify a color to not -// use the default one -// $shadow: set to none to not draw the drop shadow or specify a color to not -// use the default one // // possible $t values: // normal, hover, active, insensitive, insensitive-active, @@ -129,104 +77,236 @@ // osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated // - $hilight_color: draw_button_hilight_color($c); - $button_edge: if($edge == none, none, draw_widget_edge($edge)); - $blank_edge: if($edge == none, none, draw_widget_edge(transparentize($edge,1))); - $button_shadow: if($shadow == none, none, 0 1px 1px 0 $shadow); + // normal key + @if $t==normal { + color: $tc; + background-color: lighten($c, 3%); + } + + // focused key + @if $t==focus { + color: $tc; + background-color: mix(lighten($c, 3%), $selected_bg_color, 90%); + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); + &:hover { + background-color: mix(lighten($c, 8%), $selected_bg_color, 90%); + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); + } + &:active { + background-color: mix(lighten($c, 10%), $selected_bg_color, 90%); + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); + } + } + + // hover key + @else if $t==hover { + color: $tc; + background-color: lighten($c, 7%); + } + + // active key + @else if $t==active { + color: $tc; + background-color: lighten($c, 10%); + } + + // checked key + @else if $t==checked { + color: $tc; + background-color: lighten($c, 15%); + } + + // insensitive key + @else if $t==insensitive { + color: $insensitive_fg_color; + background-color: $insensitive_bg_color; + } + + // reset + @else if $t==undecorated { + background-color: transparent; + background-image: none; + } +} + + +// buttons +// since buttons are all flat an borderless now the mixin is simpler + +@mixin button($t, $tc:$fg_color, $c:$bg_color) { + +$button_bg_color: mix($tc, $c, 5%); +// +// Button drawing function +// +// $t: button type, +// $c: base button colors, derived from fg_color +// $tc: base button colors, derived from fg_color +// +// possible $t values: +// normal, hover, active, insensitive, insensitive-active, +// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active, +// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated +// // normal button @if $t==normal { color: $tc; - background-color: lighten($c, 3%); - border-color: draw_border_color($c); - @include draw_shadows($button_shadow); - // box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); - text-shadow: 0 1px $text_shadow_color; - icon-shadow: 0 1px $text_shadow_color; + background-color: $button_bg_color; } // focused button @if $t==focus { color: $tc; - text-shadow: 0 1px $text_shadow_color; - icon-shadow: 0 1px $text_shadow_color; + background-color: mix($button_bg_color, $selected_bg_color, 90%); box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); - //border-color: $selected_bg_color; + &:hover { + background-color: mix(lighten($button_bg_color, 3%), $selected_bg_color, 90%); + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); + } + &:active { + background-color: mix(lighten($button_bg_color, 6%), $selected_bg_color, 90%); + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3); + } } // hover button @else if $t==hover { color: $tc; - background-color: lighten($c, if($variant == 'light', 8%, 5%)); - border-color: if($variant == 'light', draw_border_color(lighten($c, 7%)), draw_border_color($c)); - @include draw_shadows($button_shadow); - text-shadow: 0 1px $text_shadow_color; - icon-shadow: 0 1px $text_shadow_color; + background-color: lighten($button_bg_color, 3%); } // active button @else if $t==active { color: $tc; - background-color: darken($c,3%); - border-color: draw_border_color(if($variant == 'light', $c, darken($c,7%))); - text-shadow: none; - icon-shadow: none; - box-shadow: none; + background-color: lighten($button_bg_color, 6%); + } + + // checked button + @else if $t==checked { + color: $tc; + background-color: lighten($button_bg_color, 9%); + &:hover { background-color: lighten($button_bg_color, 12%);} + &:active { background-color: lighten($button_bg_color, 15%);} } // insensitive button @else if $t==insensitive { - color: $insensitive_fg_color; - border-color: $insensitive_borders_color; - background-color: $insensitive_bg_color; - box-shadow: none; - text-shadow: none; - icon-shadow: none; + color: transparentize($tc, 0.5); + background-color: transparentize($tc, .95); + } + + // default/suggested button + @else if $t==default { + background-color: $selected_bg_color; + color: $selected_fg_color; + &:focus { + box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4); + } + &:hover, &:focus { + background-color: lighten($selected_bg_color, 5%); + color: lighten($selected_fg_color, 5%); + } + &:active { + background-color: darken($selected_bg_color, 7%); + color: darken($selected_fg_color, 7%); + } + &:insensitive { + @include button(insensitive); + background-color: transparentize($selected_bg_color, .5); + color: transparentize($selected_fg_color, .5); + } } // reset @else if $t==undecorated { - border-color: transparent; background-color: transparent; - background-image: none; - @include draw_shadows(inset 0 1px rgba(255,255,255,0),$blank_edge); - text-shadow: none; - icon-shadow: none; + background-color: none; + &:insensitive { + @include button(insensitive); + background-color: transparent; + color: transparentize($selected_fg_color, .5); + } } } -// overview icons -@mixin overview-icon($color) { - .overview-icon { - @extend %icon_tile; - color: $color; +// tile +@mixin tile_button($color, $flat: true) { + @extend %tile; + @if $flat { + background-color: transparent; + } @else { + background-color: transparentize($color, .84); } + &:hover { background-color: transparentize($color, .9);} + &:selected, &:focus { + background-color: transparentize($color, .87); + &:hover { background-color: transparentize($color, .84);} + &:active { background-color: transparentize($color, .87);} + } + &:active { background-color: transparentize($color, .84);} + &:outlined, &:checked { + background-color: transparentize($color, .81); + &:active { background-color: transparentize($color, .78);} + &:hover { background-color: transparentize($color, .75);} + } + &:drop { + border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping + background-color: transparentize($selected_bg_color, .8); + } +} - &:hover, - &:selected { - .overview-icon { - background-color: transparentize($color, .9); - } +// overview icon, dash, app grid +@mixin overview_icon($color, $flat: true) { + .overview-icon { @extend %tile; } + @if $flat { + .overview-icon { background-color: transparent;} + } @else { + .overview-icon { background-color: transparentize($color, .81);} + } + &:hover .overview-icon { background-color: transparentize($color, .9);} + + &:selected .overview-icon, + &:focus .overview-icon { + background-color: transparentize($color, .87); + &:hover .overview-icon { background-color: transparentize($color, .84);} + &:active .overview-icon { background-color: transparentize($color, .87);} + } + &:active .overview-icon { background-color: transparentize($color, .84);} + &:outlined .overview-icon, + &:checked .overview-icon { + background-color: transparentize($color, .81); + &:active .overview-icon { background-color: transparentize($color, .78);} + &:hover .overview-icon { background-color: transparentize($color, .75);} + } + &:drop .overview-icon { + border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping + background-color: transparentize($selected_bg_color, .8); + } +} + +// styling for elements within popovers that look like notifications +@mixin card($flat: false) { + border-radius: $base_border_radius; + margin: $base_margin; + box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + + @if $flat { + @include button(undecorated); + box-shadow: none !important; + } @else { + @include button(normal); } &:focus { - .overview-icon { - background-color: transparentize($color, .7); - // border-color: $selected_bg_color; - } + @include button(focus); } - &:drop { - .overview-icon { - border: 2px solid $selected_bg_color; //already 2px transparent so no jumping - background-color: transparentize($selected_bg_color, .8); - } + &:hover { + @include button(hover); } - &:active, - &:checked { - .overview-icon { - background-color: transparentize(darken($osd_bg_color, 10%), .5); - } + &:active { + @include button(active); } } diff --git a/data/gnome-shell-sass/_high-contrast-colors.scss b/data/gnome-shell-sass/_high-contrast-colors.scss index b34e0b18..54f6853c 100644 --- a/data/gnome-shell-sass/_high-contrast-colors.scss +++ b/data/gnome-shell-sass/_high-contrast-colors.scss @@ -1,7 +1,6 @@ // When color definition differs for dark and light variant, // it gets @if ed depending on $variant - $base_color: #222; $bg_color: #000; $fg_color: #fff; @@ -13,7 +12,6 @@ $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%); -$top_hilight: $borders_edge; $warning_color: #f57900; $error_color: #cc0000; @@ -24,6 +22,8 @@ $osd_fg_color: #eeeeec; $osd_bg_color: #2e3436; $osd_borders_color: rgba(0,0,0, 0.7); $osd_outer_borders_color: rgba(255,255,255, 0.1); +$osd_insensitive_bg_color: mix($osd_fg_color, $osd_bg_color, 10%); +$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%)); $shadow_color: rgba(0,0,0, 0.1); $system_bg_color: desaturate(#241f31,100%); //neutralize the HIG color diff --git a/data/gnome-shell-sass/_widgets.scss b/data/gnome-shell-sass/_widgets.scss index a8d0aa9f..4ed082f1 100644 --- a/data/gnome-shell-sass/_widgets.scss +++ b/data/gnome-shell-sass/_widgets.scss @@ -29,6 +29,7 @@ @import 'widgets/osd'; @import 'widgets/switcher-popup'; @import 'widgets/workspace-switcher'; +@import 'widgets/screenshot'; // Panel @import 'widgets/panel'; @import 'widgets/corner-ripple'; @@ -43,7 +44,6 @@ // A11y / misc @import 'widgets/a11y'; @import 'widgets/misc'; -@import 'widgets/tiled-previews'; @import 'widgets/keyboard'; @import 'widgets/looking-glass'; // Lock / login screens diff --git a/data/gnome-shell-sass/widgets/_app-grid.scss b/data/gnome-shell-sass/widgets/_app-grid.scss index 2df69116..c936e4b6 100644 --- a/data/gnome-shell-sass/widgets/_app-grid.scss +++ b/data/gnome-shell-sass/widgets/_app-grid.scss @@ -4,45 +4,39 @@ $app_icon_size: 96px; // app icons .icon-grid { - row-spacing: $base_spacing * 2; - column-spacing: $base_spacing * 2; - max-row-spacing: $base_spacing * 12; - max-column-spacing: $base_spacing * 12; + row-spacing: $base_padding * 2; + column-spacing: $base_padding * 2; + max-row-spacing: $base_padding * 7; + max-column-spacing: $base_padding * 7; page-padding-top: $base_padding * 4; page-padding-bottom: $base_padding * 4; - page-padding-left: $base_padding * 2; - page-padding-right: $base_padding * 2; + page-padding-left: $base_padding * 3; + page-padding-right: $base_padding * 3; } /* App Icons */ -$app_grid_fg_color: #fff; - // Icon tiles in the app grid -.app-well-app, -%app-well-app { - @include overview-icon($app_grid_fg_color); +.app-well-app { + @include overview_icon($osd_fg_color); + .overview-icon { padding: $base_padding*2;} .overview-icon.overview-icon-with-label { - padding: 10px 8px 5px 8px; - > StBoxLayout { - spacing: $base_spacing; + spacing: $base_padding; } } } -/* App Folders */ +// app folders .app-well-app.app-folder { - background-color: $dash_background_color; - border-radius: $base_border_radius + 4px; // same as %icon_tile + @include overview_icon($osd_fg_color, $flat: false); } // expanded folder -.app-folder-dialog { //style like the dash - border-radius: $modal_radius * 1.5; +.app-folder-dialog { + border-radius: $modal_radius*2; background-color: $dash_background_color; - padding: 12px 0px 12px 0px; & .folder-name-container { padding: 24px 36px 0; @@ -50,8 +44,7 @@ $app_grid_fg_color: #fff; & .folder-name-label, & .folder-name-entry { - font-size: 18pt; - font-weight: 800; + @extend %title_1; } & .folder-name-entry { width: 300px } @@ -61,19 +54,17 @@ $app_grid_fg_color: #fff; & .edit-folder-button { @extend %button; - padding: 0; width: 36px; height: 36px; - border-radius: 18px; - - & > StIcon { icon-size: 16px } + border-radius: 99px; + & > StIcon { icon-size: $base_icon_size } } } & .icon-grid { - row-spacing: $base_spacing * 2; - column-spacing: $base_spacing * 5; + row-spacing: $base_padding * 2; + column-spacing: $base_padding * 5; page-padding-top: 0; page-padding-bottom: 0; page-padding-left: 0; @@ -84,10 +75,11 @@ $app_grid_fg_color: #fff; margin-bottom: 18px; } } + .app-folder-dialog-container { - padding: 12px; - width: 620px; - height: 620px; + padding: $base_padding*2; + width: 640px; + height: 640px; } // Running app indicator (also shown in dash) @@ -95,23 +87,18 @@ $app_grid_fg_color: #fff; height: 5px; width: 5px; border-radius:5px; + margin-bottom: 8px; background-color: $osd_fg_color; - margin-bottom: 1px; } // Rename popup for app folders .rename-folder-popup { .rename-folder-popup-item { - spacing: $base_spacing; + spacing: $base_padding; &:ltr, &:rtl { padding: 0 $base_padding * 2; } } } -// right-click app menu -.app-menu { - max-width: 27.25em; -} - // App Grid pagination indicators .page-indicator { padding: $base_padding $base_padding * 2 0; @@ -148,7 +135,7 @@ $app_grid_fg_color: #fff; background-gradient-start: rgba(255, 255, 255, 0.05); background-gradient-end: transparent; background-gradient-direction: horizontal; - border-radius: 15px 0px 0px 15px; + border-radius: $modal_radius*1.5 0px 0px $modal_radius*1.5; } &.previous:ltr, @@ -156,7 +143,7 @@ $app_grid_fg_color: #fff; background-gradient-start: transparent; background-gradient-end: rgba(255, 255, 255, 0.05); background-gradient-direction: horizontal; - border-radius: 0px 15px 15px 0px; + border-radius: 0px $modal_radius*1.5 $modal_radius*1.5 0px; } } diff --git a/data/gnome-shell-sass/widgets/_buttons.scss b/data/gnome-shell-sass/widgets/_buttons.scss index 709ac467..6a72c079 100644 --- a/data/gnome-shell-sass/widgets/_buttons.scss +++ b/data/gnome-shell-sass/widgets/_buttons.scss @@ -2,4 +2,5 @@ .button { @extend %button; // that's it + min-height: 22px; } diff --git a/data/gnome-shell-sass/widgets/_calendar.scss b/data/gnome-shell-sass/widgets/_calendar.scss index 33aea17a..8d03ab90 100644 --- a/data/gnome-shell-sass/widgets/_calendar.scss +++ b/data/gnome-shell-sass/widgets/_calendar.scss @@ -1,291 +1,256 @@ /* Date/Time Menu */ -.clock-display-box { - spacing: 2px; - - .clock { - padding-left: $base_padding * 2; - padding-right: $base_padding * 2; - } -} - // overall menu #calendarArea { - padding:0; + padding: $base_padding - 2px; } // Calendar menu side column .datemenu-calendar-column { - spacing: $base_spacing; - border: 0 solid $bubble_borders_color; - padding: 0 $base_padding * 2; - - &:ltr {margin-right: $base_margin * 2; border-left-width: 1px; } - &:rtl {margin-left: $base_margin * 2; border-right-width: 1px; } - - .datemenu-displays-section { - } - - .datemenu-displays-box { - spacing: $base_spacing; - } -} - -.events-section-title { - @include notification_bubble($flat: true); - color: desaturate(darken($fg_color,40%), 10%); - font-weight: bold; - padding: .4em; + spacing: $base_padding; + &:ltr {padding-left: $base_padding;} + &:rtl {padding-right: $base_padding;} + .datemenu-displays-box {spacing: $base_padding;} } /* today button (the date) */ .datemenu-today-button { - @include notification_bubble($flat: true); + @include card($flat: true); padding: $base_padding * 1.5; // weekday label .day-label { - @include fontsize($base_font_size+1); - font-weight: bold; + @extend %heading; } // date label .date-label { - @include fontsize($base_font_size+7); - font-weight: 1000; + @extend %title_2; } } /* Calendar */ .calendar { - @include notification_bubble; - padding: $base_padding; + @include card(flat); + margin-top: 0; - // month - .calendar-month-label { - color: lighten($fg_color,5%); - font-weight: bold; - padding: 8px 0; - &:focus {} + // month header + .calendar-month-header { + + // prev/next month icons + .calendar-change-month-back StIcon, + .calendar-change-month-forward StIcon { + icon-size: $base_icon_size; + } + + // month label + .calendar-month-label { + color: lighten($fg_color,5%); + @extend %heading; + padding: 8px 0; + } + .pager-button { + background-color: transparent; + height: 32px; + width: 32px; + margin: 2px; + border-radius: $base_border_radius - 2px; + &:hover, &:focus {background-color: $hover_bg_color;} + &:active {background-color: $active_bg_color;} + } } - // prev/next month icons - .calendar-change-month-back StIcon, - .calendar-change-month-forward StIcon { - icon-size: $base_icon_size; - } - - .pager-button { - background-color: transparent; - height: 32px; - width: 32px; - border-radius: $base_border_radius; - &:hover, &:focus { background-color: lighten($hover_bg_color, 5%); } - &:active { background-color: $active_bg_color; } - } - - $calendar_day_size: 32px; .calendar-day-base { - @include fontsize($base_font_size - 3); text-align: center; - width: $calendar_day_size; - height: $calendar_day_size; - padding: 0; margin: 2px; - border-radius: $calendar_day_size * 0.5 + 2px; - border: 1px solid transparent; //avoid jumparound due to today - font-feature-settings: "tnum"; - &:hover, &:focus { background-color: $hover_bg_color; } + padding: 0 !important; + height: $calendar_day_size !important; + width: $calendar_day_size !important; + border-radius: 99px; + @extend %numeric; + @extend %smaller; + + &:hover {background-color: $hover_bg_color;} + &:focus { + background-color: mix($bg_color, $selected_bg_color, 80%); + color: $selected_fg_color; + box-shadow:inset 0 0 0 2px transparentize($selected_bg_color, 0.4); + } + &:active,&:selected { - color: lighten($fg_color,10%); - background-color: darken($bg_color,5%); + color: $active_fg_color; + background-color: $active_bg_color; + &:focus { + background-color: mix($active_bg_color, $selected_bg_color, 80%); + } } // day of week heading &.calendar-day-heading { - color: lighten($fg_color,10%); - margin-top: 1em; - @include fontsize($base_font_size - 4); + color: $insensitive_fg_color; + padding-top: $base_padding; + height: 16px !important; // force heading to be smaller height + font-weight: bold; + @extend %smaller; } } - .calendar-day { //border collapse hack - see calendar.js - border-width: 0; - } - - .calendar-day-top { - border-top-width: 1px; - } - - .calendar-day-left { - border-left-width: 1px; - } - + .calendar-day {} .calendar-work-day {} - - .calendar-nonwork-day { - color: $insensitive_fg_color; + .calendar-nonwork-day {color: $insensitive_fg_color;} + .calendar-other-month-day { + color: transparentize($fg_color, 0.5); + &.calendar-nonwork-day { + color: transparentize($insensitive_fg_color, 0.5); + } } // Today .calendar-today { - font-weight: bold; - border: 1px solid transparent; background-color: $selected_bg_color; - color: $selected_fg_color; + font-weight: 800; + color: $selected_fg_color !important; &:hover,&:focus { background-color:lighten($selected_bg_color, 3%); - color: $selected_fg_color; + color: inherit; } &:active,&:selected { background-color: $selected_bg_color; - color: $selected_fg_color; + color: inherit; &:hover,&:focus { background-color:lighten($selected_bg_color, 3%); - color: $selected_fg_color; + color: inherit; } } } .calendar-day-with-events { - background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg"); - &.calendar-work-day { - color: lighten($fg_color,10%); - font-weight: bold; - } - } - - .calendar-other-month-day { - color: transparentize($fg_color ,0.5); + background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/calendar-today-light.svg"),url("resource:///org/gnome/shell/theme/calendar-today.svg")); + background-size: contain; } .calendar-week-number { @include fontsize($base_font_size - 4); font-weight: bold; - height: 1.8em; - width: 2.3em; - border-radius: 2px; + font-feature-settings: "tnum"; margin: 6px; + padding: 0 $base_padding; + border-radius: 3px; background-color: darken($bg_color, 2%); - color: lighten($fg_color, 5%); + color: $insensitive_fg_color } } /* Events */ .events-button { - @include notification_bubble; + @include card; padding: $base_padding * 2; .events-box { - spacing: $base_spacing; + spacing: $base_padding; } .events-list { - spacing: 2 * $base_spacing; + spacing: 2 * $base_padding; } .events-title { - color: desaturate(darken($fg_color,40%), 10%); - font-weight: bold; + @extend %heading; + color: $insensitive_fg_color; margin-bottom: $base_margin; } .event-time { - color: darken($fg_color,20%); - font-feature-settings: "tnum"; - @include fontsize($base_font_size - 1); + @extend %numeric; + @extend %caption; + color: $insensitive_fg_color; } } /* World clocks */ .world-clocks-button { - @include notification_bubble; + @include card; padding: $base_padding * 2; .world-clocks-grid { - spacing-rows: $base_spacing; - spacing-columns: $base_spacing * 2; + spacing-rows: $base_padding; + spacing-columns: $base_padding * 2; } // title .world-clocks-header { - color: desaturate(darken($fg_color,40%), 10%); - font-weight: bold; + @extend %heading; + color: $insensitive_fg_color; } // city label .world-clocks-city { color: $fg_color; - @include fontsize($base_font_size); - font-weight: normal; } // timezone time .world-clocks-time { - font-weight: bold; + @extend %heading; + @extend %numeric; color: $fg_color; - font-feature-settings: "tnum"; - @include fontsize($base_font_size); - &:ltr { text-align: right; } - &:rtl { text-align: left; } + &:ltr {text-align: right;} + &:rtl {text-align: left;} } // timezone offset label .world-clocks-timezone { - color: darken($fg_color,20%); - font-feature-settings: "tnum"; - @include fontsize($base_font_size - 1); + @extend %numeric; + @extend %caption; + color: $insensitive_fg_color; } } /* Weather */ .weather-button { - @include notification_bubble; + @include card; padding: $base_padding * 2; .weather-box { - spacing: $base_spacing + $base_margin; + spacing: $base_padding + $base_margin; } .weather-header-box { - spacing: $base_spacing; + spacing: $base_padding; } .weather-header { - color: desaturate(darken($fg_color,40%), 10%); - font-weight: bold; + color: $insensitive_fg_color; + @extend %heading; &.location { font-weight: normal; - @include fontsize($base_font_size - 1); } } .weather-grid { - spacing-rows: $base_spacing; - spacing-columns: $base_spacing * 2; + spacing-rows: $base_padding; + spacing-columns: $base_padding * 2; } .weather-forecast-time { + @extend %numeric; + @extend %caption; color: darken($fg_color,30%); - font-feature-settings: "tnum"; - @include fontsize($base_font_size - 2); - font-weight: normal; padding-top: 0.2em; padding-bottom: 0.4em; } .weather-forecast-icon { - icon-size: $base_icon_size * 2; + icon-size: $large_icon_size; } .weather-forecast-temp { - font-weight: bold; + @extend %heading; } } diff --git a/data/gnome-shell-sass/widgets/_check-box.scss b/data/gnome-shell-sass/widgets/_check-box.scss index fc71467d..1480ade2 100644 --- a/data/gnome-shell-sass/widgets/_check-box.scss +++ b/data/gnome-shell-sass/widgets/_check-box.scss @@ -1,7 +1,7 @@ /* Check Boxes */ // these are equal to the size of the SVG assets -$check_height: 22px; +$check_height: 24px; $check_width: 24px; @@ -10,9 +10,9 @@ $check_width: 24px; StBin { width: $check_width; height: $check_height; - background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); + background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off.svg")); } - &:focus StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); } + &:focus StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-focused-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"));; } &:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); } &:focus:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); } -} \ No newline at end of file +} diff --git a/data/gnome-shell-sass/widgets/_dash.scss b/data/gnome-shell-sass/widgets/_dash.scss index cf21552c..8f5d5f93 100644 --- a/data/gnome-shell-sass/widgets/_dash.scss +++ b/data/gnome-shell-sass/widgets/_dash.scss @@ -1,18 +1,14 @@ /* Dash */ -$dash_background_color: #3b3b3b; +$dash_background_color: lighten($system_bg_color, 5%); $dash_placeholder_size: 32px; -$dash_padding: $base_padding + 4px; // 10px -$dash_spacing: $base_padding / 4; - -$dash_bottom_margin: $base_margin * 4; - -$dash_border_radius: $modal_radius * 1.5; +$dash_padding: $base_padding*2; // 12px +$dash_border_radius: $modal_radius + $dash_padding; +// container for the dash #dash { - @include fontsize($base_font_size - 2); - margin-top: $base_spacing * 3; - padding: 0 $dash_padding; + @extend %caption; + margin-top: $dash_padding; .placeholder { // background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg"); @@ -26,27 +22,46 @@ $dash_border_radius: $modal_radius * 1.5; height: $dash_placeholder_size; } - .overview-icon { - padding: $dash_padding / 2; + // Running app indicator (also shown in app grid) + .app-well-app-running-dot { + margin-bottom: 14px; // hardcoded } } +// background of the dash behind app icons .dash-background { background-color: $dash_background_color; - margin-bottom: $dash_bottom_margin; - padding: $dash_padding; border-radius: $dash_border_radius; + padding: $dash_padding; + spacing: $base_padding; + margin-bottom: $dash_padding; } -// Dash Items -.dash-item-container .app-well-app, .show-apps { - padding: $dash_padding $dash_spacing $dash_padding + $dash_bottom_margin; +// items on the dash +.dash-item-container { + > * {margin: 0 2px;} + &:ltr:first-child {margin-left: 0;} + &:rtl:first-child {margin-right: 0;} + + // each app item on the dash + .app-well-app .overview-icon { + padding: $base_padding; + } + + // show apps button + .show-apps { @include overview_icon($osd_fg_color);} + + .show-apps, .app-well-app { + padding-bottom: $dash_padding; + } } +// separator between favourites and running apps .dash-separator { width: 1px; - margin: 0 ($dash_spacing + ($dash_padding / 2)) $dash_bottom_margin; - background-color: transparentize($osd_fg_color,0.7); + margin: 0 $base_margin; + background-color: $borders_color; + margin-bottom: $dash_padding; } // OSD Tooltip @@ -56,18 +71,5 @@ $dash_border_radius: $modal_radius * 1.5; border-radius: 99px; padding: $base_padding $base_padding * 2; text-align: center; - -y-offset: $base_margin * 3; // distance from the dash edge -} - -// Show apps button -.show-apps { - @include overview-icon($osd_fg_color); - - &:focus, - &:checked { - .overview-icon { - background-color: transparentize($osd_bg_color,0.5); - color: $fg_color; - } - } + -y-offset: $base_margin * 2; // distance from the dash edge } diff --git a/data/gnome-shell-sass/widgets/_dialogs.scss b/data/gnome-shell-sass/widgets/_dialogs.scss index 6eb1cc10..6ac4e8fd 100644 --- a/data/gnome-shell-sass/widgets/_dialogs.scss +++ b/data/gnome-shell-sass/widgets/_dialogs.scss @@ -1,11 +1,10 @@ /* Modal Dialogs */ .headline { - @include fontsize($base_font_size + 1); + @extend %title_4; } .modal-dialog { - border-radius: $modal_radius; @extend %bubble_panel; .modal-dialog-content-box { @@ -35,13 +34,9 @@ .message-dialog-title { text-align: center; - font-size: 18pt; - font-weight: 800; + @extend %title_2; - &.lightweight { - font-size: 13pt; - font-weight: 800; - } + &.lightweight { @extend %title_4;} } .message-dialog-description { text-align: center; } } @@ -52,7 +47,7 @@ .dialog-list-title { text-align: center; - font-weight: bold; + @extend %heading; } .dialog-list-scrollview { max-height: 200px; } @@ -65,7 +60,7 @@ .dialog-list-item-title { font-weight: bold; } .dialog-list-item-description { color: darken($fg_color,5%); - @include fontsize($base_font_size - 1); + @extend %caption; } } } @@ -79,7 +74,7 @@ } .run-dialog-entry { width: 20em; } .run-dialog-description { - @include fontsize($base_font_size - 1); + @extend %caption; text-align: center; color: darken($fg_color, 20%); } @@ -120,7 +115,7 @@ .prompt-dialog-info-label, .prompt-dialog-null-label { text-align: center; - @include fontsize($base_font_size - 1); + @extend %caption; } .prompt-dialog-error-label { @@ -145,8 +140,7 @@ } .audio-selection-device { - border: 1px solid $bubble_borders_color; - border-radius: 12px; + border-radius: $base_border_radius*2; &:hover,&:focus { background-color: $hover_bg_color; } &:active { background-color: $selected_bg_color; diff --git a/data/gnome-shell-sass/widgets/_entries.scss b/data/gnome-shell-sass/widgets/_entries.scss index 5a119455..6be67609 100644 --- a/data/gnome-shell-sass/widgets/_entries.scss +++ b/data/gnome-shell-sass/widgets/_entries.scss @@ -3,23 +3,27 @@ StEntry { border-radius: $base_border_radius; padding: 8px; - border-width: 0; color: $fg_color; + @include entry(normal); - //&:hover { @include entry(hover);} + &:hover { @include entry(hover);} &:focus { @include entry(focus);} &:insensitive { @include entry(insensitive);} + selection-background-color: $selected_bg_color; selected-color: $selected_fg_color; + StIcon.capslock-warning { icon-size: 16px; warning-color: $warning_color; padding: 0 4px; } + StIcon.peek-password { icon-size: $base_icon_size; padding: 0 4px; } + StLabel.hint-text { margin-left: 2px; color: transparentize($fg_color, 0.3); diff --git a/data/gnome-shell-sass/widgets/_ibus-popup.scss b/data/gnome-shell-sass/widgets/_ibus-popup.scss index eead703e..28f89f33 100644 --- a/data/gnome-shell-sass/widgets/_ibus-popup.scss +++ b/data/gnome-shell-sass/widgets/_ibus-popup.scss @@ -5,31 +5,32 @@ } .candidate-popup-content { - padding: 0.5em; - spacing: 0.3em; + padding: $base_padding; + spacing: $base_padding; + @extend .popup-menu-content; } .candidate-index { - padding: 0 0.5em 0 0; - color: darken($fg_color,10%); + padding: 0; + padding-right: $base_padding; + color: $insensitive_fg_color; } .candidate-box { - padding: 0.3em 0.5em 0.3em 0.5em; + padding: $base_padding $base_padding*2 $base_padding $base_padding*2; border-radius: $base_border_radius; - &:selected,&:hover { background-color: $selected_bg_color; color: $selected_fg_color; } + &:selected { background-color: $selected_bg_color; color: $selected_fg_color; } + &:hover { background-color: $hover_bg_color; color: $hover_fg_color; } } .candidate-page-button-box { height: 2em; - .vertical & { padding-top: 0.5em; } - .horizontal & { padding-left: 0.5em; } + .vertical & { padding-top: $base_padding*2; } + .horizontal & { padding-left: $base_padding*2; } } -.candidate-page-button { - padding: 4px; -} +.candidate-page-button { padding: $base_padding;} -.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0; } -.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px; } -.candidate-page-button-icon { icon-size: 1em; } \ No newline at end of file +.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;} +.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;} +.candidate-page-button-icon { icon-size: $base_icon_size; } diff --git a/data/gnome-shell-sass/widgets/_keyboard.scss b/data/gnome-shell-sass/widgets/_keyboard.scss index f866d77c..91d9a3d5 100644 --- a/data/gnome-shell-sass/widgets/_keyboard.scss +++ b/data/gnome-shell-sass/widgets/_keyboard.scss @@ -1,15 +1,16 @@ /* On-screen Keyboard */ $key_size: 1.2em; -$key_border_radius: $base_border_radius + 3px; -$key_bg_color: $bg_color; +$key_border_radius: $base_border_radius + 4px; // 12px +$key_bg_color: darken($osd_fg_color, 70%); // $default_key_bg_color: darken($key_bg_color, 4%); -$default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten($osd_bg_color, 2%)); +$default_key_bg_color: if($variant=='light', darken($key_bg_color, 11%), darken($key_bg_color, 10%)); // draw keys using button function #keyboard { - background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1); + // background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1); + background-color: $osd_bg_color; box-shadow: inset 0 1px 0 0 $osd_outer_borders_color; .page-indicator { @@ -31,18 +32,21 @@ $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten // the keys .keyboard-key { - @include button(normal, $c:$key_bg_color); - - &:focus { @include button(focus);} - &:hover, &:checked { @include button(hover, $c: $key_bg_color);} - &:active { @include button(active, $c: $key_bg_color); } - @include fontsize($base_font_size + 5); + font-weight: bold; min-height: $key_size; min-width: $key_size; border-width: 1px; border-style: solid; border-radius: $key_border_radius; + box-shadow: 0 1px 0 0 $shadow_color; + + @include keyboard_key(normal, $key_bg_color, $osd_fg_color); + + &:focus { @include keyboard_key(focus);} + &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);} + &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); } + &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); } &:grayed { //FIXMEy background-color: darken($bg_color, 3%); @@ -52,42 +56,59 @@ $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten // non-character keys &.default-key { - @include button(normal, $c:$default_key_bg_color); - &:hover, &:checked {@include button(hover, $c: $default_key_bg_color);} - &:active { @include button(active, $c: $default_key_bg_color);} + @include keyboard_key(normal, $default_key_bg_color, $osd_fg_color); + &:hover {@include keyboard_key(hover, $default_key_bg_color, $osd_fg_color);} + &:active { @include keyboard_key(active, $default_key_bg_color, $osd_fg_color);} + &:checked { @include keyboard_key(checked, $default_key_bg_color, $osd_fg_color);} + border-radius: $key_border_radius; } // enter key is suggested-action &.enter-key { - @include button(normal, $c:$selected_bg_color, $tc:$selected_fg_color); - &:hover, &:checked { @include button(hover, $c: lighten($selected_bg_color, 3%));} - &:active {@include button(active, $c: darken($selected_bg_color, 2%));} + @include keyboard_key(normal, $selected_bg_color, $selected_fg_color); + &:hover { @include keyboard_key(hover, $selected_bg_color, $selected_fg_color);} + &:active {@include keyboard_key(active, $selected_bg_color, $selected_fg_color);} + &:checked {@include keyboard_key(checked, $selected_bg_color, $selected_fg_color);} + border-radius: $key_border_radius; + color: $osd_fg_color; } - &.shift-key-uppercase { color: $selected_bg_color } + &.shift-key-lowercase {} + + // pressed shift has different style + &.shift-key-uppercase { + background-color: lighten($key_bg_color, 20%); + color: $osd_bg_color; + &:hover { + background-color: lighten($key_bg_color, 25%); + color: lighten($osd_bg_color, 5%); + } + } - StIcon { icon-size: 1.125em; } + // size of icons on keys + StIcon { icon-size: 24px; } } // long press on a key popup .keyboard-subkeys { - color: $osd_fg_color; - -arrow-border-radius: $modal_radius; + -arrow-border-radius: $base_border_radius*2; -arrow-background-color: $osd_bg_color; -arrow-border-width: 1px; -arrow-border-color: lighten($osd_bg_color, 9%); -arrow-base: 20px; -arrow-rise: 10px; - -boxpointer-gap: $base_spacing; + -boxpointer-gap: $base_padding; + padding: $base_padding; .keyboard-key { - @include button(normal, $c:$key_bg_color); + @include keyboard_key(normal, $key_bg_color, $osd_fg_color); - &:focus { @include button(focus);} - &:hover, &:checked { @include button(hover, $c: $key_bg_color);} - &:active { @include button(active, $c: $key_bg_color); } + &:focus { @include keyboard_key(focus);} + &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);} + &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); } + &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); } - border-radius:$base_border_radius; + border-radius:$key_border_radius; } } @@ -112,4 +133,21 @@ $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten @include fontsize($base_font_size + 3); spacing: 12px; min-height: 20pt; + padding: $base_padding*2; + color: $osd_fg_color; + + // each suggestion + StButton { + margin: 0 3px; + min-width: 32px; + border-radius: $base_border_radius - 2px; + padding: $base_padding $base_padding*3; + + @include keyboard_key(undecorated, $key_bg_color, $osd_fg_color); + + &:focus { @include keyboard_key(focus);} + &:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);} + &:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); } + &:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); } + } } diff --git a/data/gnome-shell-sass/widgets/_login-dialog.scss b/data/gnome-shell-sass/widgets/_login-dialog.scss index 1789beca..2572f970 100644 --- a/data/gnome-shell-sass/widgets/_login-dialog.scss +++ b/data/gnome-shell-sass/widgets/_login-dialog.scss @@ -13,14 +13,6 @@ $_gdm_bg: $system_bg_color; - StEntry { - @if $variant=='dark' { - $_gdm_entry_bg: darken($system_bg_color, 3%); - background-color: $_gdm_entry_bg; - color: $fg_color; - } - } - .modal-dialog-button-box { spacing: 3px; } .modal-dialog-button { padding: 4px 18px; @@ -47,26 +39,7 @@ color: transparentize($osd_fg_color, 0.3); } &:default { - @include button(normal, $c:$selected_bg_color, $tc:$selected_fg_color); - border-color: $selected_bg_color; - &:hover, &:focus { - @include button(hover,$c:$selected_bg_color, $tc:$selected_fg_color); - $_def_hover_c: lighten($selected_bg_color, 5%); - background-color: $_def_hover_c; - border-color: $_def_hover_c; - } - &:active { - @include button(active,$c:$selected_bg_color, $tc:$selected_fg_color); - $_def_active_c: darken($selected_bg_color, 5%); - background-color: $_def_active_c; - border-color: $_def_active_c; - } - &:insensitive { - @include button(insensitive); - border-color: darken($selected_bg_color, 10%); - background-color: darken($selected_bg_color, 10%); - color: transparentize($selected_fg_color, 0.3); - } + @include button(default); } } @@ -75,8 +48,8 @@ .login-dialog-session-list-button { padding: 0; border-radius: 99px; - width: $base_icon_size * 2; - height: $base_icon_size * 2; + width: $large_icon_size; + height: $large_icon_size; border-color: darken($system_bg_color, 3%); background-color: darken($system_bg_color, 3%); @@ -103,12 +76,38 @@ } .login-dialog-not-listed-label { - @include fontsize($base_font_size - 1); + @extend %caption; font-weight: bold; color: darken($osd_fg_color,30%); padding-top: 1em; } +.login-dialog-auth-list-view { -st-vfade-offset: 1em; } +.login-dialog-auth-list { + spacing: 6px; + margin-left: 2em; +} + +.login-dialog-auth-list-title { + margin-left: 2em; +} + +.login-dialog-auth-list-item { + border-radius: $base_border_radius + 4px; + padding: 6px; + color: darken($osd_fg_color,30%); + &:focus, &:selected { background-color: $selected_bg_color; color: $selected_fg_color; } +} + +.login-dialog-auth-list-label { + @include fontsize($base_font_size + 2); + font-weight: bold; + padding-left: 15px; + + &:ltr { padding-left: 14px; text-align: left; } + &:rtl { padding-right: 14px; text-align: right; } +} + .login-dialog-user-list-view { -st-vfade-offset: 1em; } .login-dialog-user-list { spacing: 12px; @@ -159,7 +158,7 @@ .login-dialog-prompt-layout { padding-top: 24px; padding-bottom: 12px; - spacing: $base_spacing * 2; + spacing: $base_padding * 2; width: 23em; } @@ -172,3 +171,34 @@ @include fontsize($base_font_size + 1); padding-top: 1em; } + +.login-dialog { + StEntry { + @if $variant=='dark' { + $_gdm_entry_bg: darken($system_bg_color, 3%); + background-color: $_gdm_entry_bg; + color: $fg_color; + } + } +} + +// Custom styling for unlock entry +.unlock-dialog { + StEntry { + border:none !important; + &:focus { + background-color: transparentize($fg_color, 0.9); + } + &:insensitive { + color: transparentize($fg_color, 0.5); + background-color: transparentize($fg_color, 0.95); + } + } + + .cancel-button, + .switch-user-button, + .login-dialog-session-list-button { + border-color: transparent; + background-color: transparentize($fg_color, 0.9); + } +} diff --git a/data/gnome-shell-sass/widgets/_looking-glass.scss b/data/gnome-shell-sass/widgets/_looking-glass.scss index 006c2ef9..8639889e 100644 --- a/data/gnome-shell-sass/widgets/_looking-glass.scss +++ b/data/gnome-shell-sass/widgets/_looking-glass.scss @@ -1,46 +1,65 @@ /* Looking Glass */ -$text_fg_color: #ccc; - // Dialog #LookingGlassDialog { background-color: $osd_bg_color; - spacing: $base_spacing; - padding: 4px; - border: 1px solid transparentize($osd_fg_color, 0.8); - border-radius: $base_border_radius; + border-radius: 0 0 $modal_radius $modal_radius; + border-top-width: 0; + border: 1px solid $osd_outer_borders_color; color: $osd_fg_color; + padding: $base_padding; + spacing: $base_padding; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1); & > #Toolbar { border: none; - border-radius: $base_border_radius; - background-color: $osd_bg_color; + padding: $base_padding; + border-radius: 0; + background-color: transparent; + spacing: $base_padding; + + .lg-toolbar-button { + padding: $base_padding $base_padding*2; + @extend %button; + + & > StIcon { icon-size: $base_icon_size; } + } + } + + .labels { + spacing: $base_padding; } - .labels { spacing: $base_spacing; } .notebook-tab { - -natural-hpadding: $base_padding * 2; - -minimum-hpadding: 6px; + -natural-hpadding: $base_padding*2; + -minimum-hpadding: $base_padding*2; + font-weight: bold; + padding: $base_padding $base_padding*2; color: darken($osd_fg_color, 15%); transition-duration: 100ms; - padding-left: .3em; - padding-right: .3em; - border-bottom-width: 2px; + box-shadow:none; + border:none; + border-radius: $base_border_radius - 2px; + background-color: transparent; + &:hover { color: $osd_fg_color; + background-color: transparentize($osd_fg_color, 0.95); } + &:selected { - border-bottom-width: 2px; - box-shadow: inset 0 -2px 0 0 lighten($selected_bg_color, 5%); color: $osd_fg_color; + background-color: transparentize($osd_fg_color, 0.9); } } - StBoxLayout#EvalBox { padding: 4px; spacing: $base_spacing; } - StBoxLayout#ResultsArea { spacing: $base_spacing; } + + StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; } + StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; } } .lg-dialog { + StEntry { background-color: transparentize(lighten($osd_bg_color, 5%), 0.4); color: $osd_fg_color; @@ -49,55 +68,55 @@ $text_fg_color: #ccc; selection-background-color: $selected_bg_color; selected-color: $selected_fg_color; } + .shell-link { color: $link_color; &:hover { color: lighten($link_color, 10%); } &:active { color: darken($link_color, 10%); } } + .actor-link { - color: $text_fg_color; - &:hover { color: lighten($text_fg_color, 20%); } - &:active { color: darken($text_fg_color, 20%); } + color: $insensitive_fg_color; + &:hover { color: lighten($insensitive_fg_color, 20%); } + &:active { color: darken($insensitive_fg_color, 20%); } } } .lg-completions-text { - font-size: .9em; - font-style: italic; + @extend %caption; + font-style: italic; } .lg-obj-inspector-title { - spacing: $base_spacing; + spacing: $base_padding; } .lg-obj-inspector-button { - border: 1px solid $osd_borders_color; - padding: 4px; - border-radius: $base_border_radius; - &:hover { border: 1px solid #ffffff; } + border: 1px solid $osd_borders_color; + padding: 4px; + border-radius: $base_border_radius; + &:hover { border: 1px solid #ffffff; } } // Extensions -#lookingGlassExtensions { padding: 4px; } +#lookingGlassExtensions { padding: $base_padding; } .lg-extensions-list { - padding: 4px; - spacing: 6px; + padding: $base_padding; + spacing: $base_padding; } .lg-extension { - border: 1px solid lighten($osd_borders_color, 5%); - background-color: lighten($osd_bg_color, 5%); - border-radius: $base_border_radius; - padding: 4px; + padding: $base_padding*2; + @include card; } .lg-extension-name { - font-weight: bold; + @extend %heading; } .lg-extension-meta { - spacing: 6px; + spacing: $base_padding; } // Inspector @@ -105,5 +124,19 @@ $text_fg_color: #ccc; background: $osd_bg_color; border: 1px solid $osd_borders_color; border-radius: $base_border_radius; - padding: 6px; -} \ No newline at end of file + padding: $base_padding; +} + +.lg-debug-flag-button { + StLabel { padding: $base_padding, 2 * $base_padding; } + + color: $fg_color; + &:hover { color: lighten($fg_color, 20%); } + &:active { color: darken($fg_color, 20%); } +} + +.lg-debug-flags-header { + padding-top: 2 * $base_padding; + padding: $base_padding; + @extend %title_2; +} diff --git a/data/gnome-shell-sass/widgets/_message-list.scss b/data/gnome-shell-sass/widgets/_message-list.scss index bb9239f4..7f93e817 100644 --- a/data/gnome-shell-sass/widgets/_message-list.scss +++ b/data/gnome-shell-sass/widgets/_message-list.scss @@ -3,28 +3,47 @@ // main list .message-list { - width: 31.5em; - padding: 0 $base_padding * 2; + width: 29em; + border: solid $borders_color; - .message-list-placeholder { spacing: 12px; } + // padding and margins to account for scrollbar + &:ltr {margin-left: 0; margin-right: $base_margin; padding-right: $base_padding; border-right-width: 1px; } + &:rtl {margin-right: 0; margin-left: $base_margin; padding-left: $base_padding; border-left-width: 1px; } + + .message-list-placeholder { + @extend %title_2; + color: transparentize($insensitive_fg_color, .5); + + // icon size and color + > StIcon { + icon-size: $base_icon_size*3; // 48px + margin-bottom: $base_margin*3; + -st-icon-style: symbolic; + } + } } .message-list-sections { - spacing: $base_spacing; - margin: 0 $base_margin * 4; // to account for scrollbar + spacing: $base_padding; + margin: 0; + padding-bottom: $base_padding; + + // to account for scrollbar + &:ltr {margin-right: $base_margin * 3; } + &:rtl {margin-left: $base_margin * 3;} } .message-list-section, .message-list-section-list { - spacing: $base_spacing; + spacing: $base_padding; } // do-not-disturb + clear button .message-list-controls { - margin: ($base_margin * 2) ($base_margin * 4) 0; // NOTE: remove the padding if notification_bubble could remove margin for drop shadow - padding: $base_margin; - spacing: $base_spacing * 2; + padding: $base_padding; + spacing: $base_padding; + @extend %heading; .dnd-button { // We need this because the focus outline isn't inset like for the buttons @@ -32,7 +51,7 @@ // its color when focusing. border-width: 2px; border-color: transparent; - border-radius: 99px; + border-radius: 32px; border-style: solid; &:focus { @@ -43,19 +62,18 @@ // message bubbles .message { - @include notification_bubble; + @include card; // icon container .message-icon-bin { - padding: ($base_padding * 3) 0 ($base_padding * 3) ($base_padding * 2); + padding: ($base_padding * 3); - &:rtl { - padding: ($base_padding * 3) ($base_padding * 2) ($base_padding * 3) 0; - } + &:ltr {padding-right:$base_padding;} + &:rtl {padding-left:$base_padding;} // icon size and color > StIcon { - icon-size: $base_icon_size*2; // 32px + icon-size: $large_icon_size; // 32px -st-icon-style: symbolic; } @@ -68,13 +86,16 @@ // content .message-content { - padding: $base_padding + $base_margin * 2; spacing: 4px; + padding: ($base_padding*1.5); + margin-bottom: $base_margin*2; } // title .message-title { font-weight: bold; + /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */ + padding-top: 0.57em; } // secondary container in title box @@ -95,15 +116,17 @@ // close button .message-close-button { - color: lighten($fg_color, 15%); - &:hover { color: if($variant=='light', lighten($fg_color, 30%), darken($fg_color, 10%)); } - &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); } + color: $fg_color; + background-color: transparentize($fg_color, 0.9); + border-radius: 99px; + padding: $base_padding - 1px; + margin: 1px; + &:hover {background-color: transparentize($fg_color, 0.8);} + &:active {background-color: transparentize($fg_color, 0.9);} } // body - .message-body { - color: darken($fg_color, 10%); - } + .message-body {color: darken($fg_color, 10%);} } // URLs in messages @@ -113,30 +136,32 @@ /* Media Controls */ .message-media-control { - padding: $base_padding * 2 1.64em; // $base_padding * 4 = 24px - color: darken($fg_color, 15%); + padding: 0 $base_padding*3; + margin: $base_padding*2 0; + border-radius: $base_border_radius; + color: $fg_color; - // uses $hover_bg_color since the media controls are in a notification_bubble + // colors are lightened since the media controls are in a card &:hover { background-color: lighten($hover_bg_color, 5%); color: $fg_color; } &:active { - background-color: darken($hover_bg_color, 2%); + background-color: lighten($active_bg_color, 5%); color: $fg_color; } - &:insensitive { color: darken($fg_color,40%); } + &:insensitive { color: lighten($insensitive_fg_color, 5%); } - // fix border-radius for last button - &:last-child:ltr { border-radius: 0 $base_border_radius+2 $base_border_radius+2 0; } - &:last-child:rtl { border-radius: $base_border_radius+2 0 0 $base_border_radius+2; } + // fix margin for last button + &:last-child:ltr { margin-right: $base_margin*3; } + &:last-child:rtl { margin-left: $base_margin*3; } } // album-art .media-message-cover-icon { - icon-size: $base_icon_size*2 !important; // 48px + icon-size: $base_icon_size*3 !important; // 48px border-radius: $base_border_radius; // when there is no artwork @@ -145,6 +170,7 @@ background-color: $bg_color; border: 1px solid transparent; border-radius: $base_border_radius; - icon-size: $base_icon_size * 2 !important; + icon-size: $large_icon_size !important; // 32px + padding: ($base_padding*2 + 2); // 16px } } diff --git a/data/gnome-shell-sass/widgets/_misc.scss b/data/gnome-shell-sass/widgets/_misc.scss index 0fe174a7..74092782 100644 --- a/data/gnome-shell-sass/widgets/_misc.scss +++ b/data/gnome-shell-sass/widgets/_misc.scss @@ -48,7 +48,7 @@ .caps-lock-warning-label { text-align: center; padding-bottom: 8px; - @include fontsize($base_font_size - 1); + @extend %caption; color: $warning_color; } @@ -57,3 +57,9 @@ .workspace-animation { background-color: $system_bg_color; } + +/* Tiled window previews */ +.tile-preview { + background-color: transparentize($selected_bg_color,0.5); + border: 1px solid $selected_bg_color; +} diff --git a/data/gnome-shell-sass/widgets/_network-dialog.scss b/data/gnome-shell-sass/widgets/_network-dialog.scss index 7973d225..11e4e676 100644 --- a/data/gnome-shell-sass/widgets/_network-dialog.scss +++ b/data/gnome-shell-sass/widgets/_network-dialog.scss @@ -1,4 +1,4 @@ -/* Network Dialogs */ +/* Select Network dialogs */ .nm-dialog { max-height: 34em; min-height: 31em; @@ -10,47 +10,39 @@ padding: 24px; } -.nm-dialog-airplane-box { spacing: 12px; } - -.nm-dialog-airplane-headline { - font-weight: bold; - text-align: center; -} - -.nm-dialog-airplane-text { color: $fg_color; } - -// header -.nm-dialog-header { - font-weight: bold; -} -.nm-dialog-header-icon { - icon-size: $base_icon_size * 2; -} +.nm-dialog-header { @extend %heading; } +.nm-dialog-subheader { color: $insensitive_fg_color;} +.nm-dialog-header-icon { icon-size: $large_icon_size;} .nm-dialog-header-hbox { spacing: 10px; } -// list of networks .nm-dialog-scroll-view { - border: 1px solid $borders_color; - padding:0; - background-color: darken($bg_color, 3%); + padding:$base_padding; + border-radius: $base_border_radius; + background-color: $base_color; } -// list item .nm-dialog-item { - @include fontsize($base_font_size); - border-bottom: 1px solid $borders_color; padding: $base_padding * 2; - spacing: 0px; + &:selected { background-color: $selected_bg_color; + border-radius: $base_border_radius - 3px; color: $selected_fg_color; } + &:hover { background-color:$hover_bg_color;} } -// icons in list .nm-dialog-icon { icon-size: $base_icon_size; } -.nm-dialog-icons { spacing: $base_spacing * 2; } +.nm-dialog-icons { spacing: $base_padding * 2; } // no networks +.no-networks-box { spacing: $base_padding; } .no-networks-label { color: $insensitive_fg_color; } -.no-networks-box { spacing: $base_padding; } \ No newline at end of file + +// airplane mode +.nm-dialog-airplane-box { + text-align: center; + spacing: 12px; +} +.nm-dialog-airplane-headline { @extend %title_3;} +.nm-dialog-airplane-text { color: $insensitive_fg_color;} diff --git a/data/gnome-shell-sass/widgets/_notifications.scss b/data/gnome-shell-sass/widgets/_notifications.scss index 5ff46a05..7866767e 100644 --- a/data/gnome-shell-sass/widgets/_notifications.scss +++ b/data/gnome-shell-sass/widgets/_notifications.scss @@ -2,11 +2,15 @@ $notification_banner_height: 64px; $notification_banner_width: 34em; +$notification_banner_radius: $base_border_radius*1.5; // Banner notifications .notification-banner { min-height: $notification_banner_height; width: $notification_banner_width; + box-shadow: 0 2px 4px 2px rgba(0,0,0,0.1); + border-radius: $notification_banner_radius; + margin: $base_margin; .notification-actions { spacing: 0; diff --git a/data/gnome-shell-sass/widgets/_osd.scss b/data/gnome-shell-sass/widgets/_osd.scss index f85124c7..e4fb0e57 100644 --- a/data/gnome-shell-sass/widgets/_osd.scss +++ b/data/gnome-shell-sass/widgets/_osd.scss @@ -1,29 +1,39 @@ /* OSD */ -$osd_levelbar_height:8px; +$osd_levelbar_height:6px; .osd-window { @extend %osd_panel; + @extend %heading; text-align: center; font-weight: bold; - spacing: $base_spacing * 2; // 12px - margin: $base_margin * 8; // 32px - min-width: 64px; - min-height: 64px; + spacing: $base_padding * 2; // 12px + padding: $base_padding * 2 $base_padding * 3; + & > * { spacing: 8px; } + margin-bottom: 4em; - StIcon { - icon-size:$base_icon_size * 6; - } + StIcon { icon-size:$large_icon_size;} .osd-monitor-label { font-size: 3em; } + StLabel { + &:ltr { margin-right: 6px; } + &:rtl { margin-left: 6px; } + } + .level { + margin-bottom: 4px; + &:first-child { margin-bottom: 0px; } + height: $osd_levelbar_height; + min-width:$base_icon_size * 10; -barlevel-height: $osd_levelbar_height; -barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9)); -barlevel-active-background-color: $osd_fg_color; -barlevel-overdrive-color: $destructive_color; -barlevel-overdrive-separator-width: 3px; + &:ltr { margin-right: 6px; } + &:rtl { margin-left: 6px; } } } @@ -42,4 +52,4 @@ $osd_levelbar_height:8px; .resize-popup { @extend %osd_panel; -} \ No newline at end of file +} diff --git a/data/gnome-shell-sass/widgets/_overview.scss b/data/gnome-shell-sass/widgets/_overview.scss index c593cebc..d8e70eaf 100644 --- a/data/gnome-shell-sass/widgets/_overview.scss +++ b/data/gnome-shell-sass/widgets/_overview.scss @@ -1,7 +1,7 @@ /* OVERVIEW */ .controls-manager, .secondary-monitor-workspaces { - spacing: $base_spacing * 2; + spacing: $base_padding * 2; } #overviewGroup { diff --git a/data/gnome-shell-sass/widgets/_panel.scss b/data/gnome-shell-sass/widgets/_panel.scss index 1f465077..3fc57eb0 100644 --- a/data/gnome-shell-sass/widgets/_panel.scss +++ b/data/gnome-shell-sass/widgets/_panel.scss @@ -1,9 +1,8 @@ /* Top Bar */ // a.k.a. the panel -$panel_corner_radius: $base_border_radius+1; $panel_bg_color: #000; -$panel_fg_color: #ddd; +$panel_fg_color: if($variant == 'light', lighten($bg_color, 10%), darken($fg_color, 5%)); $panel_height: 2.2em; $panel_transition_duration: 250ms; // same as the overview transition duration @@ -11,7 +10,7 @@ $panel_transition_duration: 250ms; // same as the overview transition duration background-color: $panel_bg_color; font-weight: bold; height: $panel_height; - font-feature-settings: "tnum"; + @extend %numeric; transition-duration: $panel_transition_duration; // transparent panel on lock & login screens @@ -19,20 +18,6 @@ $panel_transition_duration: 250ms; // same as the overview transition duration &.login-screen, &:overview { background-color: transparent; - - .panel-corner { - -panel-corner-opacity: 0; - } - } - - // the rounded outset corners - .panel-corner { - -panel-corner-radius: $panel_corner_radius; - -panel-corner-background-color: $panel_bg_color; - -panel-corner-border-width: 2px; - -panel-corner-border-color: transparent; - -panel-corner-opacity: 1; - transition-duration: $panel_transition_duration; } // panel menus @@ -53,8 +38,20 @@ $panel_transition_duration: 250ms; // same as the overview transition duration } } - &:hover, &:active, &:overview, &:focus, &:checked { - box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.20); + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px $screenshot_ui_button_red; + + StBoxLayout { + spacing: $base_padding; + } + + StIcon { + icon-size: $base_icon_size; + } + } + + &:active, &:overview, &:focus, &:checked { + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8); // The clock display needs to have the background on .clock because // we want to exclude the do-not-disturb indicator from the background @@ -62,9 +59,41 @@ $panel_transition_duration: 250ms; // same as the overview transition duration box-shadow: none; .clock { - box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.20); + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8); } } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15); + } + } + + &:hover { + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85); + &.clock-display { + box-shadow: none; + .clock { + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85); + } + } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1); + } + } + + &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover { + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75); + &.clock-display { + box-shadow: none; + .clock { + box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75); + } + } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2); + } } // status area icons @@ -94,16 +123,48 @@ $panel_transition_duration: 250ms; // same as the overview transition duration &.login-screen, &:overview { .panel-button { - &:hover, &:active, &:overview, &:focus, &:checked { - box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); + &:active, &:overview, &:focus, &:checked { + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15); &.clock-display { box-shadow: none; .clock { - box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.15); + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15); } } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15); + } + } + + &:hover { + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10); + &.clock-display { + box-shadow: none; + .clock { + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10); + } + } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1); + } + } + + &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover { + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2); + &.clock-display { + box-shadow: none; + .clock { + box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2); + } + } + + &.screen-recording-indicator { + box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2); + } } } } @@ -125,11 +186,23 @@ $panel_transition_duration: 250ms; // same as the overview transition duration // App Menu #appMenu { - spacing: $base_spacing; + spacing: $base_padding; .label-shadow { color: transparent; } } #appMenu .panel-status-menu-box { padding: 0 $base_padding; - spacing: $base_spacing; + spacing: $base_padding; +} + + +// Clock + +.clock-display-box { + spacing: 2px; + + .clock { + padding-left: $base_padding * 2; + padding-right: $base_padding * 2; + } } diff --git a/data/gnome-shell-sass/widgets/_popovers.scss b/data/gnome-shell-sass/widgets/_popovers.scss index db9df9aa..08ad3246 100644 --- a/data/gnome-shell-sass/widgets/_popovers.scss +++ b/data/gnome-shell-sass/widgets/_popovers.scss @@ -1,16 +1,8 @@ /* Popovers/Menus */ -$popover_arrow_height: 12px; - -//.the popover itself +// the popover itself .popup-menu-boxpointer { - -arrow-border-radius: $base_border_radius+4; - -arrow-background-color: $bg_color; - -arrow-border-width: 1px; - -arrow-border-color: $borders_color; - -arrow-base: $popover_arrow_height * 2; - -arrow-rise: $popover_arrow_height; - -arrow-box-shadow: 0 1px 3px rgba(0,0,0,0.5); // dreaming bugzilla #689995 + -arrow-rise: $base_margin+2px; // distance from the panel & screen edge } // container of the popover menu @@ -18,114 +10,195 @@ $popover_arrow_height: 12px; min-width: 15em; color: $fg_color; - //.popup-status-menu-item { font-weight: normal; color: pink; } //dunno what that is + //.popup-status-menu-item {font-weight: normal; color: pink;} //dunno what that is &.panel-menu { - -boxpointer-gap: $base_margin; // distance from the panel - margin-bottom: 1.75em; + margin-bottom: 1.75em; // so it doesn't touch the bottom of the screen } } +// popover content .popup-menu-content { - padding: $base_padding * 2 + $base_margin 0; + padding: $base_padding; + border-radius: $modal_radius - 2px; + border: 1px solid $borders_edge; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1); + background-color: $bg_color; } // menu items .popup-menu-item { + padding: $base_padding*1.5 $base_padding*2; + border-radius: $base_border_radius; spacing: $base_padding; - padding: $base_padding; + transition: 0.2s all ease; + background-color: transparent; - &:ltr { padding-right:1.75em; padding-left: 0; } - &:rtl { padding-right: 0; padding-left:1.75em; } + &:ltr {padding-left: $base_padding;} + &:rtl {padding-right: $base_padding;} + + &:focus, &:hover { + background-color: $hover_bg_color !important; + &:active { background-color: $active_bg_color !important;} + } + + &:checked {background-color: $checked_bg_color !important;} &:checked { - background-color: lighten($bg_color, 2%); - box-shadow: none; + margin-bottom: 0; + box-shadow: inset 0 -1px 0 0 darken($checked_bg_color, 5%); + border-radius: $base_border_radius $base_border_radius 0 0; + &:focus,&:hover { background-color: lighten($checked_bg_color, 3%) !important;} + &:active { background-color: lighten($checked_bg_color, 5%) !important;} } - &.selected { - background-color: transparentize(white, if($variant=='light', 0.2, 0.9)); - color: $fg_color; + &:active { + background-color: lighten($active_bg_color, 5%); + color: $active_fg_color; } - &:active { - background-color: $selected_bg_color; - color: $selected_fg_color; - } + &:insensitive {color: transparentize($fg_color,0.5);} - &:insensitive { color: transparentize($fg_color,0.5);} + // add margin to switches in menu items + .toggle-switch { + &:ltr { margin-left: $base_margin;} + &:rtl { margin-right: $base_margin;} + } } -// all icons and other graphical elements + +// all other graphical elements (sliders) .popup-inactive-menu-item { color: $fg_color; - - &:insensitive { color: transparentize($fg_color,0.5); } + &:insensitive { color: $insensitive_fg_color; } } // symbolic icons in popover .popup-menu-arrow, -.popup-menu-icon { icon-size: $base_icon_size; } +.popup-menu-icon { + icon-size: 16px !important; // for some reason the variable doesn't work here +} + +.popup-menu-arrow { +} + // popover submenus .popup-sub-menu { - background-color: darken($bg_color, 3%); - box-shadow: none; - border-top: 1px solid transparentize($borders_color, 0.2); - border-bottom: 1px solid transparentize($borders_color, 0.2); + background-color: $checked_bg_color; + border-radius: 0 0 $base_border_radius $base_border_radius; + + .popup-menu-ornament { + min-width: $base_icon_size !important; + } + + // submenu specific styles + .popup-menu-item { + border-radius: 0; + margin: 0; + + &:last-child { + border-radius: 0 0 $base_border_radius $base_border_radius; + } + + &:focus,&:hover { background-color: lighten($hover_bg_color, 10%) !important;} + &:checked { + background-color: lighten($checked_bg_color, 10%) !important; + &:focus,&:hover { background-color: lighten($checked_bg_color, 8%) !important;} + } + &:active { background-color: lighten($active_bg_color, 10%) !important;} + } + + .popup-menu-section { + .popup-menu-item:last-child { + &:hover,&:focus { border-radius: 0;} + } + &:last-child .popup-menu-item:last-child { + border-radius: 0 0 $base_border_radius $base_border_radius; + } + } } // container for radio and check boxes .popup-menu-ornament { + @extend %heading; width: 1.2em; + text-align: center !important; - &:ltr { text-align: right }; - &:rtl { text-align: left }; + &:ltr { text-align: right;} + &:rtl { text-align: left;} } // separator .popup-separator-menu-item { - padding: 0; + margin: 6px 0; + padding:0 !important; + &:ltr { margin-right: $base_margin;} + &:rtl { margin-left: $base_margin;} .popup-separator-menu-item-separator { - //-margin-horizontal: 24px; height: 1px; //not really the whole box - margin: 6px 64px; - background-color: lighten($borders_color, 2%); - .popup-sub-menu & { //submenu separators - margin: 0 64px 0 32px; - @if $variant == 'dark' { - background-color: lighten($bg_color,10%); - } + background-color: $borders_color; + } + + .popup-menu-ornament { + width: 0 !important; + } + + // separators in submenus + .popup-sub-menu & { + background-color: transparent; + + // account for ornament + &:ltr { margin-right: 2.5em;} + &:rtl { margin-left: 2.5em;} + + .popup-separator-menu-item-separator { + background-color: lighten($borders_color, 7%); } } } // desktop background menu .background-menu { - -boxpointer-gap: $base_margin; + -boxpointer-gap: 0px; -arrow-rise: 0px; // hide the beak on the menu } // system status menu .aggregate-menu { - min-width: 21em; + min-width: 22em; + + // this is unneeded at the top-level in this menu, hide it + .popup-menu-ornament { width: 0 !important; } // lock screen, shutdown, etc. buttons - .popup-menu-icon { - padding:0; - margin: 0 $base_margin; + .popup-menu-icon { -st-icon-style: symbolic; + &:ltr {margin-right: $base_margin*2;} + &:rtl {margin-left: $base_margin*2;} } + // account for ornaments in submenus with padding .popup-sub-menu .popup-menu-item > :first-child { - // account for icons in submenus with padding - &:ltr { - padding-left: $base_padding + $base_margin * 2; - margin-left: $base_icon_size; - } - &:rtl { - padding-right: $base_padding + $base_margin * 2; ; - margin-right: $base_icon_size; + // this value is hardcoded for visual effect + &:ltr { margin-left: 1em;} + &:rtl { margin-right: 1em;} + } +} + +// right-click (and panel) app menu +.app-menu { + max-width: 27.25em; + + // this is unneeded at the top-level in this menu, hide it + .popup-menu-ornament { width: 0 !important; } + + .popup-inactive-menu-item:first-child { + // "Open Windows" label + > StLabel { + @extend %caption_heading; + &:ltr {margin-right: $base_margin*2;} + &:rtl {margin-left: $base_margin*2;} } } } diff --git a/data/gnome-shell-sass/widgets/_screen-shield.scss b/data/gnome-shell-sass/widgets/_screen-shield.scss index e289fdba..6550e5bc 100644 --- a/data/gnome-shell-sass/widgets/_screen-shield.scss +++ b/data/gnome-shell-sass/widgets/_screen-shield.scss @@ -11,7 +11,7 @@ .unlock-dialog-clock-time { font-size: 64pt; padding-top: 42px; - font-feature-settings: "tnum"; + @extend %numeric; } .unlock-dialog-clock-date { @@ -25,10 +25,11 @@ } .unlock-dialog-notifications-container { - margin: 12px 0; + margin: 12px; spacing: 6px; width: 23em; background-color: transparent; + .summary-notification-stack-scrollview { padding-top: 0; padding-bottom: 0; @@ -36,39 +37,36 @@ .notification, .unlock-dialog-notification-source { - padding: 12px 6px; + padding: 12px 16px; border: none; - background-color: transparentize($osd_bg_color,0.7); + background-color: transparentize($osd_fg_color,0.9); color: $osd_fg_color; border-radius: $modal_radius; - &.critical { background-color: transparentize($osd_bg_color,0.1) } + &.critical { background-color: transparentize($osd_fg_color,0.8) } } } .unlock-dialog-notification-label { - padding: 0px 0px 0px 12px; + padding: 0 0 0 12px; } .unlock-dialog-notification-count-text { - weight: bold; - padding: 0 6px; - color: $osd_bg_color; - background-color: transparentize($osd_fg_color, 0.7); + font-weight: bold; + padding: 0 12px; + color: $osd_fg_color; + background-color: transparentize($osd_fg_color, 0.9); border-radius: 99px; - margin-right: 12px; - } .screen-shield-background { //just the shadow, really background: black; - box-shadow: 0px 2px 4px rgba(0,0,0,0.6); + box-shadow: 0 2px 4px rgba(0,0,0,0.6); } #lockDialogGroup { background-color: $system_bg_color; } - #unlockDialogNotifications { StButton#vhandle, StButton#hhandle { background-color: transparentize($bg_color,0.7); diff --git a/data/gnome-shell-sass/widgets/_screenshot.scss b/data/gnome-shell-sass/widgets/_screenshot.scss new file mode 100644 index 00000000..458c6f04 --- /dev/null +++ b/data/gnome-shell-sass/widgets/_screenshot.scss @@ -0,0 +1,202 @@ +// Screenshot UI +.icon-label-button-container { + spacing: $base_padding; + @extend %caption; + + StIcon { icon-size: 32px;} +} + +$screenshot_ui_panel_padding: $base_padding*3; +$screenshot_ui_shot_cast_margin: 21px; +$screenshot_ui_panel_border_radius: $modal_radius + $screenshot_ui_shot_cast_margin; +$screenshot_ui_shot_cast_spacing: 3px; + +$screenshot_ui_button_red: $error_color; + +.screenshot-ui-panel { + @extend %osd_panel; + border-radius: $screenshot_ui_panel_border_radius; + padding: $screenshot_ui_panel_padding; + // Reduce the bottom padding a little to accommodate the large capture button. + padding-bottom: $screenshot_ui_panel_padding - 6px; + margin-bottom: 4em; + spacing: $base_padding * 2; +} + +.screenshot-ui-close-button { + @extend .window-close; // copy window close button + padding: $base_padding; // but with more padding + &.left { margin-left: 8px; } + &.right { margin-right: 8px; } +} + +.screenshot-ui-type-button { + @extend %osd_button; + padding: $base_padding * 2 $base_padding * 3 !important; + border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding; +} + +.screenshot-ui-capture-button { + width: 36px; + height: 36px; + border-radius: 99px; + border: 4px $osd_fg_color; + padding: 4px; + + .screenshot-ui-capture-button-circle { + background-color: $osd_fg_color; + transition-duration: 200ms; + &:hover, &:focus { background-color: $hover_bg_color; } + border-radius: 99px; + } + + &:hover, &:focus { + .screenshot-ui-capture-button-circle { + background-color: darken($osd_fg_color, 15%); + } + } + + &:active { + .screenshot-ui-capture-button-circle { + background-color: darken($osd_fg_color, 50%); + } + } + + &:cast { + .screenshot-ui-capture-button-circle { + background-color: $screenshot_ui_button_red; + } + + &:hover, &:focus { + .screenshot-ui-capture-button-circle { + background-color: darken($screenshot_ui_button_red, 15%); + } + } + + &:active { + .screenshot-ui-capture-button-circle { + background-color: darken($screenshot_ui_button_red, 30%); + } + } + } +} + +.screenshot-ui-shot-cast-container { + background-color: $hover_bg_color; + border-radius: $modal_radius; + padding: $screenshot_ui_shot_cast_spacing; + spacing: $screenshot_ui_shot_cast_spacing; + + &:ltr { margin-left: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding; } + &:rtl { margin-right: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding; } +} + +.screenshot-ui-shot-cast-button { + padding: $base_padding $base_padding*2; + background-color: transparent; + &:hover, &:focus { background-color: lighten($hover_bg_color, 5%); } + &:active { background-color: lighten($active_bg_color,5%); } + &:checked { background-color: white; color: black; } + + border-radius: $modal_radius - $screenshot_ui_shot_cast_spacing; + + StIcon { icon-size: $base_icon_size; } +} + +.screenshot-ui-show-pointer-button { + @extend %osd_button; + border-radius: 99px; + padding: $base_padding * 2 !important; + StIcon { icon-size: $base_icon_size; } +} + +.screenshot-ui-area-indicator-shade { + background-color: rgba(0,0,0,.3); +} + +.screenshot-ui-area-selector { + .screenshot-ui-area-indicator-shade { + background-color: rgba(0,0,0,.5); + } + + .screenshot-ui-area-indicator-selection { + border: 2px white; + } +} + +.screenshot-ui-area-selector-handle { + border-radius: 99px; + background-color: white; + box-shadow: 0 1px 3px 2px rgba(0,0,0,0.2); + width: 24px; + height: 24px; +} + +.screenshot-ui-window-selector { + background-color: $system_bg_color; + + .screenshot-ui-window-selector-window-container { + margin: 100px; + } + + &:primary-monitor { + .screenshot-ui-window-selector-window-container { + // Make some room for the panel. + margin-bottom: 200px; + } + } +} + +.screenshot-ui-window-selector-window-border { + transition-duration: 200ms; + border-radius: $modal_radius; + border: 6px transparent; +} + +.screenshot-ui-window-selector-check { + transition-duration: 200ms; + color: transparent; + border-radius: 99px; + border-width: 12px; + icon-size: 24px; +} + +.screenshot-ui-window-selector-window { + &:hover { + .screenshot-ui-window-selector-window-border { + border-color: darken($selected_bg_color, 15%); + } + } + &:checked { + .screenshot-ui-window-selector-window-border { + border-color: $selected_bg_color; + background-color: transparentize($selected_bg_color, 0.8); + } + + .screenshot-ui-window-selector-check { + color: white; + background-color: $selected_bg_color; + } + } +} + +.screenshot-ui-screen-selector { + transition-duration: 200ms; + background-color: rgba(0,0,0,.5); + + &:hover { background-color: rgba(0,0,0,.3); } + &:active { background-color: rgba(0,0,0,.7); } + &:checked { + background-color: transparent; + border: 2px white; + } +} + +.screenshot-ui-tooltip { + color: $osd_fg_color; + background-color: $osd_bg_color; + border-radius: 99px; + padding: $base_padding $base_padding * 2; + text-align: center; + -y-offset: 24px; +} diff --git a/data/gnome-shell-sass/widgets/_scrollbars.scss b/data/gnome-shell-sass/widgets/_scrollbars.scss index 5d50994d..77cde653 100644 --- a/data/gnome-shell-sass/widgets/_scrollbars.scss +++ b/data/gnome-shell-sass/widgets/_scrollbars.scss @@ -9,8 +9,8 @@ StScrollBar { padding: 0; StScrollView & { - min-width: 14px; - min-height: 14px; + min-width: 8px; + min-height: 8px; } StBin#trough { @@ -20,10 +20,10 @@ StScrollBar { StButton#vhandle, StButton#hhandle { border-radius: 8px; - background-color: mix($fg_color, $bg_color, 60%); - //border: 3px solid transparent; //would be nice to margin or at least to transparent - margin: 3px; - &:hover { background-color: mix($fg_color, $bg_color, 80%); } - &:active { background-color: $selected_bg_color; } + background-color: mix($fg_color, $bg_color, 30%); + border: 3px solid transparent; //would be nice to margin or at least to transparent + transition: 500ms all ease; + &:hover {background-color: mix($fg_color, $bg_color, 50%);} + &:active {background-color: mix($fg_color, $bg_color, 40%);} } -} \ No newline at end of file +} diff --git a/data/gnome-shell-sass/widgets/_search-entry.scss b/data/gnome-shell-sass/widgets/_search-entry.scss index d3584fb9..faca50e4 100644 --- a/data/gnome-shell-sass/widgets/_search-entry.scss +++ b/data/gnome-shell-sass/widgets/_search-entry.scss @@ -5,30 +5,22 @@ $search_entry_height: 36px; %search_entry, .search-entry { - width: $search_entry_width; - padding: $base_padding+1 $base_padding+3; border-radius: $search_entry_height * 0.5; // half the height - color: transparentize($fg_color,0.3); - background-color: $bg_color; - margin-top: $base_spacing * 2; - margin-bottom: $base_spacing; - border-width: 2px; - border-color: transparent; - &:hover { - background-color: $hover_bg_color; - color: $hover_fg_color; - } - &:focus { - border-style: solid; - border-color: $selected_bg_color; - color: $fg_color; - box-shadow: inset 0 1px 2px 1px rgba(0,0,0,0.2); - } + margin-top: $base_padding * 2; + margin-bottom: $base_padding; + padding: $base_padding+1 $base_padding+3; + width: $search_entry_width; - .search-entry-icon { - icon-size: $base_icon_size; - padding: 0 4px; + @include entry(normal); + &:hover { @include entry(hover);} + &:focus { @include entry(focus);} + &:insensitive { @include entry(insensitive);} + + .search-entry-icon { color: inherit; + icon-size: $base_icon_size; + margin-top: 2px; // center vertically + padding: 0 4px; } } diff --git a/data/gnome-shell-sass/widgets/_search-results.scss b/data/gnome-shell-sass/widgets/_search-results.scss index 0d81c974..644c53db 100644 --- a/data/gnome-shell-sass/widgets/_search-results.scss +++ b/data/gnome-shell-sass/widgets/_search-results.scss @@ -1,94 +1,82 @@ /* Search */ // search overview container +#searchResults { + margin: 0 $base_margin; +} + #searchResultsContent { - max-width: 1024px; - spacing: $base_margin * 2; + max-width: 1072px; } // search results sections "the boxes" .search-section { // This should be equal to #searchResultsContent spacing - spacing: $base_margin * 2; + spacing: $base_padding*3; - // separator + // separator (unstyled) .search-section-separator { - // height: 1px; - // background-color: $osd_outer_borders_color; - height: 0; + height: $base_margin*2; // use it as a spacer background-color: transparent; } } // content .search-section-content { - background-color: transparentize(lighten($osd_bg_color, 5%), 0.2); - border-radius: $modal_radius+3; + background-color: lighten($system_bg_color, 5%); + border-radius: $modal_radius*1.5; border: 1px solid $osd_outer_borders_color; - box-shadow: 0 2px 4px 0 $shadow_color; - text-shadow: 0 1px if($variant == 'light', rgba(255,255,255,0.2), rgba(0,0,0,0.2)); color: $osd_fg_color; - padding: $base_padding * 3; - // This is the space between the provider icon and the results container - spacing: $base_margin * 2; + padding: $base_padding*2; + margin:0 $base_margin*3; } -%search-section-content-item { - @extend %icon_tile; - - &:focus, - &:hover, - &:selected { - background-color: transparentize($osd_fg_color, .9); - transition-duration: 200ms; - } - - &:active, - &:checked { - background-color: transparentize(darken($osd_bg_color, 10%), .1); - } +%search_section_content_item { + @include tile_button($osd_fg_color); + border-radius: $base_border_radius+3px; } // "no results" text .search-statustext { - @extend %status_text; + @extend %title_1; } .grid-search-results { - spacing: $base_spacing * 6; + spacing: $base_padding*5; + margin:0 $base_margin*3; } // Search results with icons .grid-search-result { - @extend %app-well-app; + @extend .app-well-app; } // search result provider .search-provider-icon { - @extend %search-section-content-item; + @extend %search_section_content_item; + &:ltr {margin-right: $base_margin;} + &:rtl {margin-left: $base_margin;} // content .list-search-provider-content { - spacing: $base_spacing * 2; + spacing: $base_padding * 2; // provider labels .list-search-provider-details { width: 120px; - margin-top: 0; - color: darken($osd_fg_color, 8%); - // font-weight: bold; + color: $osd_fg_color; } } } // search results list .list-search-results { - spacing: $base_spacing; + spacing: $base_padding; } // search result listitem .list-search-result { - @extend %search-section-content-item; + @extend %search_section_content_item; // content .list-search-result-content { @@ -97,12 +85,12 @@ // list item title (with leading icon) .list-search-result-title { - spacing: $base_spacing * 2; + spacing: $base_padding * 2; // font-weight: bold; } // list item description .list-search-result-description { - color: darken($osd_fg_color, 30%); + color: $osd_insensitive_fg_color; } } diff --git a/data/gnome-shell-sass/widgets/_slider.scss b/data/gnome-shell-sass/widgets/_slider.scss index f21d62e6..500249aa 100644 --- a/data/gnome-shell-sass/widgets/_slider.scss +++ b/data/gnome-shell-sass/widgets/_slider.scss @@ -1,27 +1,22 @@ /* Slider */ -$slider_size: 15px; +$slider_size: 16px; .slider { - height: $slider_size; // slider trough - -barlevel-height: 3px; // has to be an odd number - -barlevel-background-color: $borders_color; //background of the trough - -barlevel-border-width: 1px; - -barlevel-border-color: $borders_color; // trough border color + -barlevel-height: 4px; + -barlevel-background-color: if($variant == 'light', transparentize($fg_color, 0.6), transparentize($fg_color, 0.8)); //background of the trough + -barlevel-border-width: 2px; + -barlevel-border-color: transparent; // trough border color // fill style - -barlevel-active-background-color: $selected_bg_color; //active trough fill - -barlevel-active-border-color: if($variant == 'light', darken($selected_bg_color, 4%), lighten($selected_bg_color, 2%)); //active trough border + -barlevel-active-background-color: $selected_bg_color; + -barlevel-active-border-color: transparent; // overfill style (red in this case) -barlevel-overdrive-color: $destructive_color; - -barlevel-overdrive-border-color: if($variant == 'light', darken($destructive_color, 4%), lighten($destructive_color, 2%)); //trough border when red; + -barlevel-overdrive-border-color: transparent; //trough border when red; -barlevel-overdrive-separator-width:1px; // slider handler -slider-handle-radius: $slider_size * 0.5; // half the size of the size - -slider-handle-border-width: 1px; - -slider-handle-border-color: if($variant == 'light', $borders_color, $fg_color); - - color: if($variant == 'light', lighten($bg_color, 10%), $fg_color); - &:hover { color: $hover_bg_color; } - &:active { color: $active_bg_color; } -} \ No newline at end of file + -slider-handle-border-width: 0; + -slider-handle-border-color: transparent; // because 0 width +} diff --git a/data/gnome-shell-sass/widgets/_switcher-popup.scss b/data/gnome-shell-sass/widgets/_switcher-popup.scss index 32cbbe54..cec6c9aa 100644 --- a/data/gnome-shell-sass/widgets/_switcher-popup.scss +++ b/data/gnome-shell-sass/widgets/_switcher-popup.scss @@ -1,37 +1,33 @@ /* App Switcher */ +// same as dash +$switcher_padding: $base_padding + 4px; // 10px +$switcher_border_radius: $modal_radius + 8px; + + +// the full screen container of the switcher .switcher-popup { - padding: 8px; - spacing: $base_spacing * 4; + padding: 0; + spacing: $base_padding * 4; } // switcher onscreen panel .switcher-list { @extend %osd_panel; + padding: $switcher_padding; + border-radius: $switcher_border_radius; + box-shadow: 0 8px 8px 0 rgba(0,0,0,0.1); + // container for items in list + .switcher-list-item-container { + spacing: $base_padding * 2; + } + + // each item in the list .item-box { - padding: 8px; - border-radius: $base_border_radius + 1px; - border: 1px solid transparent; - - &:outlined { - background-color: transparentize($osd_fg_color, 0.7); - } - - &:selected { - background-color: transparentize($osd_fg_color, 0.7); - color: $osd_fg_color; - } - } - - // window thumbnails - .thumbnail-box { - padding: 2px; - spacing: $base_spacing; - } - - .thumbnail { - width: 256px; + @include tile_button($osd_fg_color); + // override over style so mouse doesn't steal focus + &:hover {background: none;} } .separator { @@ -39,16 +35,27 @@ background: $borders_color; } - .switcher-list-item-container { - spacing: $base_spacing * 2; + // container of thumbnails + .thumbnail-box { + padding: 2px; + spacing: $base_padding; + } + + // window thumbnail itself + .thumbnail { + width: 256px; // equal to THUMBNAIL_DEFAULT_SIZE in altTab.js + border-radius:$base_border_radius; } } +// arrow if app has multiple windows .switcher-arrow { - border-color: rgba(0,0,0,0); - color: transparentize($fg_color,0.2); + border-color: transparentize($osd_fg_color, 0.2); + color: transparentize($osd_fg_color, 0.2); + &:highlighted { - color: $fg_color; + border-color: $osd_fg_color; + color: $osd_fg_color; } } diff --git a/data/gnome-shell-sass/widgets/_switches.scss b/data/gnome-shell-sass/widgets/_switches.scss index fd7472ed..b6d8fe83 100644 --- a/data/gnome-shell-sass/widgets/_switches.scss +++ b/data/gnome-shell-sass/widgets/_switches.scss @@ -1,16 +1,16 @@ /* Switches */ // these are equal to the size of the SVG assets -$switch_height: 22px; -$switch_width: 46px; +$switch_height: 26px; +$switch_width: 48px; .toggle-switch { color: $fg_color; height: $switch_height; width: $switch_width; background-size: contain; - background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off.svg"),url("resource:///org/gnome/shell/theme/toggle-off-dark.svg")); + background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off-light.svg"),url("resource:///org/gnome/shell/theme/toggle-off.svg")); &:checked { - background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on.svg"),url("resource:///org/gnome/shell/theme/toggle-on-dark.svg")); + background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on-light.svg"),url("resource:///org/gnome/shell/theme/toggle-on.svg")); } -} \ No newline at end of file +} diff --git a/data/gnome-shell-sass/widgets/_tiled-previews.scss b/data/gnome-shell-sass/widgets/_tiled-previews.scss deleted file mode 100644 index a9d000fe..00000000 --- a/data/gnome-shell-sass/widgets/_tiled-previews.scss +++ /dev/null @@ -1,19 +0,0 @@ - -/* Tiled window previews */ -$tile_corner_radius: $base_border_radius + 1px; -.tile-preview { - background-color: transparentize($selected_bg_color,0.5); - border: 1px solid $selected_bg_color; -} - -.tile-preview-left.on-primary { - border-radius: $tile_corner_radius 0 0 0; -} - -.tile-preview-right.on-primary { - border-radius: 0 $tile_corner_radius 0 0; -} - -.tile-preview-left.tile-preview-right.on-primary { - border-radius: $tile_corner_radius $tile_corner_radius 0 0; -} \ No newline at end of file diff --git a/data/gnome-shell-sass/widgets/_window-picker.scss b/data/gnome-shell-sass/widgets/_window-picker.scss index fa3f1919..e494f6d8 100644 --- a/data/gnome-shell-sass/widgets/_window-picker.scss +++ b/data/gnome-shell-sass/widgets/_window-picker.scss @@ -1,10 +1,11 @@ /* Window Picker */ -$window_picker_spacing: $base_spacing; // 6px +$window_picker_spacing: $base_padding; // 6px $window_picker_padding: $base_padding * 2; // 12px $window_thumbnail_label_color: transparentize($osd_bg_color, 0.4); +$window_close_button_color: darken(transparentize($osd_bg_color, .05), 3%); $window_close_button_size: 30px; $window_close_button_padding: 3px; @@ -24,24 +25,23 @@ $window_close_button_padding: 3px; // Close button .window-close { - background-color: $osd_bg_color; + background-color: $window_close_button_color; color: $osd_fg_color; border-radius: $window_close_button_size * 0.5 + $window_close_button_padding * 2; padding: $window_close_button_padding; height: $window_close_button_size; width: $window_close_button_size; - box-shadow: -1px 1px 5px 0px rgba(0,0,0,0.5); transition-duration: 300ms; - & StIcon { icon-size: 24px; } + & StIcon { icon-size: 24px; } // uses non standard icon size &:hover { - background-color: lighten($osd_bg_color, 15%); + background-color: mix($osd_fg_color, $window_close_button_color, 15%); } &:active { color: transparentize($osd_fg_color, 0.2); - background-color: darken($osd_bg_color, 5%); + background-color: darken($window_close_button_color, 5%); } } diff --git a/data/gnome-shell-sass/widgets/_workspace-switcher.scss b/data/gnome-shell-sass/widgets/_workspace-switcher.scss index 5b15a30f..f06130ba 100644 --- a/data/gnome-shell-sass/widgets/_workspace-switcher.scss +++ b/data/gnome-shell-sass/widgets/_workspace-switcher.scss @@ -1,36 +1,25 @@ /* Workspace Switcher */ -.workspace-switcher-group { - padding: $base_padding * 2; -} -.workspace-switcher-container { - @extend %osd_panel; -} +$ws_indicator_height: $large_icon_size; +$ws_dot_active: $ws_indicator_height / 3; +$ws_dot_inactive: $ws_indicator_height / 6; .workspace-switcher { - background: transparent; - border: none; - border-radius: 0; - padding: 0; - spacing: $base_spacing * 2; + @extend %osd_panel; + margin-bottom: 4em; + spacing: $base_padding * 2; + padding: $base_padding * 2 $base_padding * 3; } -.ws-switcher-box { - background: transparent; - height: 50px; - background-size: 32px; - border: 1px solid transparentize($osd_fg_color,0.9); - border-radius: $base_border_radius + 3px; -} +.ws-switcher-indicator { + background-color: transparentize($osd_fg_color,0.5); + padding: $ws_dot_inactive / 2; + margin: ($ws_indicator_height - $ws_dot_inactive) / 2; + border-radius: $ws_indicator_height; -// active workspace in the switcher -.ws-switcher-active-up, -.ws-switcher-active-down, -.ws-switcher-active-left, -.ws-switcher-active-right { - height: 52px; - background-color: $selected_bg_color; - border: 1px solid if($variant=='light', darken($selected_bg_color, 8%), lighten($selected_bg_color, 5%)); - border-radius: $base_border_radius + 3px; - color: $selected_fg_color; + &:active { + background-color: $osd_fg_color; + padding: $ws_dot_active / 2; + margin: ($ws_indicator_height - $ws_dot_active) / 2; + } } diff --git a/data/gnome-shell-sass/widgets/_workspace-thumbnails.scss b/data/gnome-shell-sass/widgets/_workspace-thumbnails.scss index 508ac253..0a1867cc 100644 --- a/data/gnome-shell-sass/widgets/_workspace-thumbnails.scss +++ b/data/gnome-shell-sass/widgets/_workspace-thumbnails.scss @@ -3,7 +3,7 @@ // thumbnails in overview .workspace-thumbnails { visible-width: 32px; //amount visible before hover - spacing: $base_spacing; + spacing: $base_padding; padding: $base_padding; .workspace-thumbnail { diff --git a/data/meson.build b/data/meson.build index 81547592..c22ed764 100644 --- a/data/meson.build +++ b/data/meson.build @@ -82,7 +82,6 @@ theme_sources = files( 'gnome-shell-sass/widgets/_slider.scss', 'gnome-shell-sass/widgets/_switcher-popup.scss', 'gnome-shell-sass/widgets/_switches.scss', - 'gnome-shell-sass/widgets/_tiled-previews.scss', 'gnome-shell-sass/widgets/_window-picker.scss', 'gnome-shell-sass/widgets/_workspace-switcher.scss', 'gnome-shell-sass/widgets/_workspace-thumbnails.scss' diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js index b9c3fca3..cc1d697c 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js @@ -24,10 +24,13 @@ const NAVIGATION_REGION_OVERSHOOT = 50; Gio._promisify(Gio._LocalFilePrototype, 'query_info_async', 'query_info_finish'); Gio._promisify(Gio._LocalFilePrototype, 'set_attributes_async', 'set_attributes_finish'); -var ApplicationMenuItem = GObject.registerClass( class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem { - _init(button, app) { - super._init(); + static { + GObject.registerClass(this); + } + + constructor(button, app) { + super(); this._app = app; this._button = button; @@ -93,12 +96,15 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem { icon.style_class = 'icon-dropshadow'; this._iconBin.set_child(icon); } -}); +} -var CategoryMenuItem = GObject.registerClass( class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { - _init(button, category) { - super._init(); + static { + GObject.registerClass(this); + } + + constructor(button, category) { + super(); this._category = category; this._button = button; @@ -214,7 +220,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { this._button.selectCategory(this._category); this._button.scrollToCatButton(this); } -}); +} class ApplicationsMenu extends PopupMenu.PopupMenu { constructor(sourceActor, arrowAlignment, arrowSide, button) { @@ -353,10 +359,13 @@ class DesktopTarget { } Signals.addSignalMethods(DesktopTarget.prototype); -let ApplicationsButton = GObject.registerClass( class ApplicationsButton extends PanelMenu.Button { - _init() { - super._init(1.0, null, false); + static { + GObject.registerClass(this); + } + + constructor() { + super(1.0, null, false); this.setMenu(new ApplicationsMenu(this, 1.0, St.Side.TOP, this)); Main.panel.menuManager.addMenu(this.menu); @@ -665,7 +674,7 @@ class ApplicationsButton extends PanelMenu.Button { return applist; } -}); +} let appsMenuButton; diff --git a/extensions/auto-move-windows/prefs.js b/extensions/auto-move-windows/prefs.js index fd787af0..acfd7fa2 100644 --- a/extensions/auto-move-windows/prefs.js +++ b/extensions/auto-move-windows/prefs.js @@ -12,129 +12,195 @@ const SETTINGS_KEY = 'application-list'; const WORKSPACE_MAX = 36; // compiled in limit of mutter -const AutoMoveSettingsWidget = GObject.registerClass( +class NewItem extends GObject.Object {} +GObject.registerClass(NewItem); + +class NewItemModel extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #item = new NewItem(); + + vfunc_get_item_type() { + return NewItem; + } + + vfunc_get_n_items() { + return 1; + } + + vfunc_get_item(_pos) { + return this.#item; + } +} + +class Rule extends GObject.Object { + static [GObject.properties] = { + 'app-info': GObject.ParamSpec.object( + 'app-info', 'app-info', 'app-info', + GObject.ParamFlags.READWRITE, + Gio.DesktopAppInfo), + 'workspace': GObject.ParamSpec.uint( + 'workspace', 'workspace', 'workspace', + GObject.ParamFlags.READWRITE, + 1, WORKSPACE_MAX, 1), + }; + + static { + GObject.registerClass(this); + } +} + +class RulesList extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #settings = ExtensionUtils.getSettings(); + #rules = []; + #changedId; + + constructor() { + super(); + + this.#changedId = + this.#settings.connect(`changed::${SETTINGS_KEY}`, + () => this.#sync()); + this.#sync(); + } + + append(appInfo) { + const pos = this.#rules.length; + + this.#rules.push(new Rule({ appInfo })); + this.#saveRules(); + + this.items_changed(pos, 0, 1); + } + + remove(id) { + const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id); + if (pos < 0) + return; + + this.#rules.splice(pos, 1); + this.#saveRules(); + + this.items_changed(pos, 1, 0); + } + + changeWorkspace(id, workspace) { + const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id); + if (pos < 0) + return; + + this.#rules[pos].set({ workspace }); + this.#saveRules(); + } + + #saveRules() { + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(SETTINGS_KEY, + this.#rules.map(r => `${r.app_info.get_id()}:${r.workspace}`)); + this.#settings.unblock_signal_handler(this.#changedId); + } + + #sync() { + const removed = this.#rules.length; + + this.#rules = []; + for (const stringRule of this.#settings.get_strv(SETTINGS_KEY)) { + const [id, workspace] = stringRule.split(':'); + const appInfo = Gio.DesktopAppInfo.new(id); + if (appInfo) + this.#rules.push(new Rule({ appInfo, workspace })); + else + log(`Invalid ID ${id}`); + } + this.items_changed(0, removed, this.#rules.length); + } + + vfunc_get_item_type() { + return Rule; + } + + vfunc_get_n_items() { + return this.#rules.length; + } + + vfunc_get_item(pos) { + return this.#rules[pos] ?? null; + } +} + class AutoMoveSettingsWidget extends Adw.PreferencesGroup { - _init() { - super._init({ + static { + GObject.registerClass(this); + + this.install_action('rules.add', null, self => self._addNewRule()); + this.install_action('rules.remove', 's', + (self, name, param) => self._rules.remove(param.unpack())); + this.install_action('rules.change-workspace', '(si)', + (self, name, param) => self._rules.changeWorkspace(...param.deepUnpack())); + } + + constructor() { + super({ title: _('Workspace Rules'), }); + this._rules = new RulesList(); + + const store = new Gio.ListStore({ item_type: Gio.ListModel }); + const listModel = new Gtk.FlattenListModel({ model: store }); + store.append(this._rules); + store.append(new NewItemModel()); + this._list = new Gtk.ListBox({ selection_mode: Gtk.SelectionMode.NONE, css_classes: ['boxed-list'], }); this.add(this._list); - this._list.append(new NewRuleRow()); - - this._actionGroup = new Gio.SimpleActionGroup(); - this._list.insert_action_group('rules', this._actionGroup); - - let action; - action = new Gio.SimpleAction({ name: 'add' }); - action.connect('activate', this._onAddActivated.bind(this)); - this._actionGroup.add_action(action); - - action = new Gio.SimpleAction({ - name: 'remove', - parameter_type: new GLib.VariantType('s'), + this._list.bind_model(listModel, item => { + return item instanceof NewItem + ? new NewRuleRow() + : new RuleRow(item); }); - action.connect('activate', this._onRemoveActivated.bind(this)); - this._actionGroup.add_action(action); - - action = new Gio.SimpleAction({ name: 'update' }); - action.connect('activate', () => { - this._settings.set_strv(SETTINGS_KEY, - this._getRuleRows().map(row => `${row.id}:${row.value}`)); - }); - this._actionGroup.add_action(action); - this._updateAction = action; - - this._settings = ExtensionUtils.getSettings(); - this._changedId = this._settings.connect('changed', - this._sync.bind(this)); - this._sync(); - - this.connect('destroy', () => this._settings.run_dispose()); } - _onAddActivated() { + _addNewRule() { const dialog = new NewRuleDialog(this.get_root()); dialog.connect('response', (dlg, id) => { const appInfo = id === Gtk.ResponseType.OK ? dialog.get_widget().get_app_info() : null; - if (appInfo) { - this._settings.set_strv(SETTINGS_KEY, [ - ...this._settings.get_strv(SETTINGS_KEY), - `${appInfo.get_id()}:1`, - ]); - } + if (appInfo) + this._rules.append(appInfo); dialog.destroy(); }); dialog.show(); } +} - _onRemoveActivated(action, param) { - const removed = param.deepUnpack(); - this._settings.set_strv(SETTINGS_KEY, - this._settings.get_strv(SETTINGS_KEY).filter(entry => { - const [id] = entry.split(':'); - return id !== removed; - })); - } - - _getRuleRows() { - return [...this._list].filter(row => !!row.id); - } - - _sync() { - const oldRules = this._getRuleRows(); - const newRules = this._settings.get_strv(SETTINGS_KEY).map(entry => { - const [id, value] = entry.split(':'); - return { id, value }; - }); - - this._settings.block_signal_handler(this._changedId); - this._updateAction.enabled = false; - - newRules.forEach(({ id, value }, index) => { - const row = oldRules.find(r => r.id === id); - const appInfo = row - ? null : Gio.DesktopAppInfo.new(id); - - if (row) - row.set({ value }); - else if (appInfo) - this._list.insert(new RuleRow(appInfo, value), index); - }); - - const removed = oldRules.filter( - ({ id }) => !newRules.find(r => r.id === id)); - removed.forEach(r => this._list.remove(r)); - - this._settings.unblock_signal_handler(this._changedId); - this._updateAction.enabled = true; - } -}); - -const WorkspaceSelector = GObject.registerClass({ - Properties: { +class WorkspaceSelector extends Gtk.Widget { + static [GObject.properties] = { 'number': GObject.ParamSpec.uint( 'number', 'number', 'number', GObject.ParamFlags.READWRITE, 1, WORKSPACE_MAX, 1), - }, -}, class WorkspaceSelector extends Gtk.Widget { - static _classInit(klass) { - super._classInit(klass); + }; - klass.set_layout_manager_type(Gtk.BoxLayout); + static { + GObject.registerClass(this); - return klass; + this.set_layout_manager_type(Gtk.BoxLayout); } - _init() { - super._init(); + constructor() { + super(); this.layout_manager.spacing = 6; @@ -174,27 +240,21 @@ const WorkspaceSelector = GObject.registerClass({ this._decButton.sensitive = this.number > 1; this._incButton.sensitive = this.number < WORKSPACE_MAX; } -}); +} -const RuleRow = GObject.registerClass({ - Properties: { - 'id': GObject.ParamSpec.string( - 'id', 'id', 'id', - GObject.ParamFlags.READABLE, - ''), - 'value': GObject.ParamSpec.uint( - 'value', 'value', 'value', - GObject.ParamFlags.READWRITE, - 1, WORKSPACE_MAX, 1), - }, -}, class RuleRow extends Adw.ActionRow { - _init(appInfo, value) { - super._init({ +class RuleRow extends Adw.ActionRow { + static { + GObject.registerClass(this); + } + + constructor(rule) { + const { appInfo } = rule; + const id = appInfo.get_id(); + + super({ activatable: false, - title: appInfo.get_display_name(), - value, + title: rule.appInfo.get_display_name(), }); - this._appInfo = appInfo; const icon = new Gtk.Image({ css_classes: ['icon-dropshadow'], @@ -204,33 +264,34 @@ const RuleRow = GObject.registerClass({ this.add_prefix(icon); const wsButton = new WorkspaceSelector(); - this.bind_property('value', + rule.bind_property('workspace', wsButton, 'number', - GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL); + GObject.BindingFlags.SYNC_CREATE); this.add_suffix(wsButton); + wsButton.connect('notify::number', () => { + this.activate_action('rules.change-workspace', + new GLib.Variant('(si)', [id, wsButton.number])); + }); + const button = new Gtk.Button({ action_name: 'rules.remove', - action_target: new GLib.Variant('s', this.id), + action_target: new GLib.Variant('s', id), icon_name: 'edit-delete-symbolic', has_frame: false, valign: Gtk.Align.CENTER, }); this.add_suffix(button); - - this.connect('notify::value', - () => this.activate_action('rules.update', null)); } +} - get id() { - return this._appInfo.get_id(); - } -}); - -const NewRuleRow = GObject.registerClass( class NewRuleRow extends Gtk.ListBoxRow { - _init() { - super._init({ + static { + GObject.registerClass(this); + } + + constructor() { + super({ action_name: 'rules.add', child: new Gtk.Image({ icon_name: 'list-add-symbolic', @@ -244,12 +305,15 @@ class NewRuleRow extends Gtk.ListBoxRow { this.update_property( [Gtk.AccessibleProperty.LABEL], [_('Add Rule')]); } -}); +} -const NewRuleDialog = GObject.registerClass( class NewRuleDialog extends Gtk.AppChooserDialog { - _init(parent) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(parent) { + super({ transient_for: parent, modal: true, }); @@ -272,7 +336,7 @@ class NewRuleDialog extends Gtk.AppChooserDialog { this.set_response_sensitive(Gtk.ResponseType.OK, appInfo && !rules.some(i => i.startsWith(appInfo.get_id()))); } -}); +} /** */ function init() { diff --git a/extensions/drive-menu/extension.js b/extensions/drive-menu/extension.js index 75e7763e..d054f879 100644 --- a/extensions/drive-menu/extension.js +++ b/extensions/drive-menu/extension.js @@ -12,10 +12,13 @@ const _ = ExtensionUtils.gettext; Gio._promisify(Gio.File.prototype, 'query_filesystem_info_async'); -var MountMenuItem = GObject.registerClass( class MountMenuItem extends PopupMenu.PopupBaseMenuItem { - _init(mount) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(mount) { + super({ style_class: 'drive-menu-item', }); @@ -131,12 +134,15 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem { super.activate(event); } -}); +} -let DriveMenu = GObject.registerClass( class DriveMenu extends PanelMenu.Button { - _init() { - super._init(0.0, _('Removable devices')); + static { + GObject.registerClass(this); + } + + constructor() { + super(0.0, _('Removable devices')); let icon = new St.Icon({ icon_name: 'media-eject-symbolic', @@ -204,7 +210,7 @@ class DriveMenu extends PanelMenu.Button { super._onDestroy(); } -}); +} /** */ function init() { diff --git a/extensions/places-menu/extension.js b/extensions/places-menu/extension.js index 3fe9d9fe..7c51220c 100644 --- a/extensions/places-menu/extension.js +++ b/extensions/places-menu/extension.js @@ -16,10 +16,13 @@ const N_ = x => x; const PLACE_ICON_SIZE = 16; -var PlaceMenuItem = GObject.registerClass( class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { - _init(info) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(info) { + super({ style_class: 'place-menu-item', }); this._info = info; @@ -73,7 +76,7 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { this._icon.gicon = info.icon; this._label.text = info.name; } -}); +} const SECTIONS = [ 'special', @@ -82,10 +85,13 @@ const SECTIONS = [ 'network', ]; -let PlacesMenu = GObject.registerClass( class PlacesMenu extends PanelMenu.Button { - _init() { - super._init(0.0, _('Places')); + static { + GObject.registerClass(this); + } + + constructor() { + super(0.0, _('Places')); let label = new St.Label({ text: _('Places'), @@ -130,7 +136,7 @@ class PlacesMenu extends PanelMenu.Button { this._sections[id].actor.visible = places.length > 0; } -}); +} /** */ function init() { diff --git a/extensions/user-theme/prefs.js b/extensions/user-theme/prefs.js index 41776834..3876c5a3 100644 --- a/extensions/user-theme/prefs.js +++ b/extensions/user-theme/prefs.js @@ -15,10 +15,13 @@ Gio._promisify(Gio.File.prototype, 'enumerate_children_async'); Gio._promisify(Gio.File.prototype, 'query_info_async'); Gio._promisify(Gio.FileEnumerator.prototype, 'next_files_async'); -const UserThemePrefsWidget = GObject.registerClass( class UserThemePrefsWidget extends Adw.PreferencesGroup { - _init() { - super._init({ title: 'Themes' }); + static { + GObject.registerClass(this); + } + + constructor() { + super({ title: 'Themes' }); this._actionGroup = new Gio.SimpleActionGroup(); this.insert_action_group('theme', this._actionGroup); @@ -101,23 +104,26 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup { return fileInfos.map(info => info.get_name()); } -}); +} -const ThemeRow = GObject.registerClass( class ThemeRow extends Adw.ActionRow { - _init(name) { + static { + GObject.registerClass(this); + } + + constructor(name) { const check = new Gtk.CheckButton({ action_name: 'theme.name', action_target: new GLib.Variant('s', name), }); - super._init({ + super({ title: name || 'Default', activatable_widget: check, }); this.add_prefix(check); } -}); +} /** */ function init() { diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index f872ef7e..f7e0a418 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -106,17 +106,20 @@ class WindowContextMenu extends PopupMenu.PopupMenu { } } -const WindowTitle = GObject.registerClass( class WindowTitle extends St.BoxLayout { - _init(metaWindow) { - this._metaWindow = metaWindow; + static { + GObject.registerClass(this); + } - super._init({ + constructor(metaWindow) { + super({ style_class: 'window-button-box', x_expand: true, y_expand: true, }); + this._metaWindow = metaWindow; + this._icon = new St.Bin({ style_class: 'window-button-icon' }); this.add(this._icon); this.label_actor = new St.Label({ y_align: Clutter.ActorAlign.CENTER }); @@ -175,30 +178,33 @@ class WindowTitle extends St.BoxLayout { this._metaWindow.disconnect(this._notifyWmClass); this._metaWindow.disconnect(this._notifyAppId); } -}); +} +class BaseButton extends St.Button { + static { + GObject.registerClass({ + GTypeFlags: GObject.TypeFlags.ABSTRACT, + Properties: { + 'ignore-workspace': GObject.ParamSpec.boolean( + 'ignore-workspace', 'ignore-workspace', 'ignore-workspace', + GObject.ParamFlags.READWRITE, + false), + }, + }, this); + } -const BaseButton = GObject.registerClass({ - GTypeFlags: GObject.TypeFlags.ABSTRACT, - Properties: { - 'ignore-workspace': GObject.ParamSpec.boolean( - 'ignore-workspace', 'ignore-workspace', 'ignore-workspace', - GObject.ParamFlags.READWRITE, - false), - }, -}, class BaseButton extends St.Button { - _init(perMonitor, monitorIndex) { - this._perMonitor = perMonitor; - this._monitorIndex = monitorIndex; - this._ignoreWorkspace = false; - - super._init({ + constructor(perMonitor, monitorIndex) { + super({ style_class: 'window-button', can_focus: true, x_expand: true, button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, }); + this._perMonitor = perMonitor; + this._monitorIndex = monitorIndex; + this._ignoreWorkspace = false; + this.connect('notify::allocation', this._updateIconGeometry.bind(this)); this.connect('clicked', this._onClicked.bind(this)); @@ -344,13 +350,15 @@ const BaseButton = GObject.registerClass({ global.display.disconnect(this._windowLeftMonitorId); this._windowLeftMonitorId = 0; } -}); +} - -const WindowButton = GObject.registerClass( class WindowButton extends BaseButton { - _init(metaWindow, perMonitor, monitorIndex) { - super._init(perMonitor, monitorIndex); + static { + GObject.registerClass(this); + } + + constructor(metaWindow, perMonitor, monitorIndex) { + super(perMonitor, monitorIndex); this.metaWindow = metaWindow; this._skipTaskbarId = metaWindow.connect('notify::skip-taskbar', () => { @@ -422,8 +430,7 @@ class WindowButton extends BaseButton { global.display.disconnect(this._notifyFocusId); this._contextMenu.destroy(); } -}); - +} class AppContextMenu extends PopupMenu.PopupMenu { constructor(source) { @@ -483,10 +490,13 @@ class AppContextMenu extends PopupMenu.PopupMenu { } } -const AppButton = GObject.registerClass( class AppButton extends BaseButton { - _init(app, perMonitor, monitorIndex) { - super._init(perMonitor, monitorIndex); + static { + GObject.registerClass(this); + } + + constructor(app, perMonitor, monitorIndex) { + super(perMonitor, monitorIndex); this.app = app; this._updateVisibility(); @@ -670,16 +680,15 @@ class AppButton extends BaseButton { this.app.disconnect(this._windowsChangedId); this._menu.destroy(); } -}); +} - -const WindowList = GObject.registerClass( class WindowList extends St.Widget { - _init(perMonitor, monitor) { - this._perMonitor = perMonitor; - this._monitor = monitor; + static { + GObject.registerClass(this); + } - super._init({ + constructor(perMonitor, monitor) { + super({ name: 'panel', style_class: 'bottom-panel solid', reactive: true, @@ -688,6 +697,9 @@ class WindowList extends St.Widget { }); this.connect('destroy', this._onDestroy.bind(this)); + this._perMonitor = perMonitor; + this._monitor = monitor; + let box = new St.BoxLayout({ x_expand: true, y_expand: true }); this.add_actor(box); @@ -1082,7 +1094,7 @@ class WindowList extends St.Widget { for (let i = 0; i < windows.length; i++) windows[i].metaWindow.set_icon_geometry(null); } -}); +} class Extension { constructor() { diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index ab581520..02b52341 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -12,10 +12,13 @@ function init() { ExtensionUtils.initTranslations(); } -const WindowListPrefsWidget = GObject.registerClass( class WindowListPrefsWidget extends Adw.PreferencesPage { - _init() { - super._init(); + static { + GObject.registerClass(this); + } + + constructor() { + super(); this._actionGroup = new Gio.SimpleActionGroup(); this.insert_action_group('window-list', this._actionGroup); @@ -79,7 +82,7 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { row.add_suffix(toggle); miscGroup.add(row); } -}); +} /** * @returns {Gtk.Widget} - the prefs widget diff --git a/extensions/window-list/windowPicker.js b/extensions/window-list/windowPicker.js index 658a5db5..db331565 100644 --- a/extensions/window-list/windowPicker.js +++ b/extensions/window-list/windowPicker.js @@ -13,13 +13,15 @@ const { ControlsState, } = imports.ui.overviewControls; -let MyWorkspacesDisplay = GObject.registerClass( class MyWorkspacesDisplay extends WorkspacesDisplay { - _init(controls, overviewAdjustment) { + static { + GObject.registerClass(this); + } + + constructor(controls, overviewAdjustment) { let workspaceManager = global.workspace_manager; - this._overviewAdjustment = overviewAdjustment; - this._workspaceAdjustment = new St.Adjustment({ + const workspaceAdjustment = new St.Adjustment({ value: workspaceManager.get_active_workspace_index(), lower: 0, page_increment: 1, @@ -28,14 +30,15 @@ class MyWorkspacesDisplay extends WorkspacesDisplay { upper: workspaceManager.n_workspaces, }); + super(controls, workspaceAdjustment, overviewAdjustment); + + this._workspaceAdjustment = workspaceAdjustment; + this._workspaceAdjustment.actor = this; + this._nWorkspacesChangedId = workspaceManager.connect('notify::n-workspaces', this._updateAdjustment.bind(this)); - super._init(controls, this._workspaceAdjustment, this._overviewAdjustment); - - this._workspaceAdjustment.actor = this; - this.add_constraint( new Layout.MonitorConstraint({ primary: true, @@ -75,12 +78,15 @@ class MyWorkspacesDisplay extends WorkspacesDisplay { super._onDestroy(); } -}); +} -const MyWorkspace = GObject.registerClass( class MyWorkspace extends Workspace.Workspace { - _init(...args) { - super._init(...args); + static { + GObject.registerClass(this); + } + + constructor(...args) { + super(...args); this._adjChangedId = this._overviewAdjustment.connect('notify::value', () => { @@ -102,10 +108,13 @@ class MyWorkspace extends Workspace.Workspace { this._overviewAdjustment.disconnect(this._adjChangedId); this._adjChangedId = 0; } -}); +} -const MyWorkspaceBackground = GObject.registerClass( class MyWorkspaceBackground extends Workspace.WorkspaceBackground { + static { + GObject.registerClass(this); + } + _updateBorderRadius() { } @@ -138,22 +147,26 @@ class MyWorkspaceBackground extends Workspace.WorkspaceBackground { offsets.top + contentHeight + offsets.bottom); this._backgroundGroup.allocate(contentBox); } -}); +} -var WindowPicker = GObject.registerClass({ - Signals: { +var WindowPicker = class WindowPicker extends Clutter.Actor { + static [GObject.signals] = { 'open-state-changed': { param_types: [GObject.TYPE_BOOLEAN] }, - }, -}, class extends Clutter.Actor { - _init() { + }; + + static { + GObject.registerClass(this); + } + + constructor() { + super({ reactive: true }); + this._visible = false; this._modal = false; this._overlayKeyId = 0; this._stageKeyPressId = 0; - super._init({ reactive: true }); - this._adjustment = new OverviewAdjustment(this); this.connect('destroy', this._onDestroy.bind(this)); @@ -311,11 +324,14 @@ var WindowPicker = GObject.registerClass({ global.stage.disconnect(this._stageKeyPressId); this._stageKeyPressId = 0; } -}); +}; -var WindowPickerToggle = GObject.registerClass( -class WindowPickerToggle extends St.Button { - _init() { +var WindowPickerToggle = class WindowPickerToggle extends St.Button { + static { + GObject.registerClass(this); + } + + constructor() { let iconBin = new St.Widget({ layout_manager: new Clutter.BinLayout(), }); @@ -327,7 +343,7 @@ class WindowPickerToggle extends St.Button { x_align: Clutter.ActorAlign.CENTER, y_align: Clutter.ActorAlign.CENTER, })); - super._init({ + super({ style_class: 'window-picker-toggle', child: iconBin, visible: !Main.sessionMode.hasOverview, @@ -345,4 +361,4 @@ class WindowPickerToggle extends St.Button { this.checked = Main.windowPicker.visible; }); } -}); +}; diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js index 06646cc9..36d66bb6 100644 --- a/extensions/window-list/workspaceIndicator.js +++ b/extensions/window-list/workspaceIndicator.js @@ -14,10 +14,13 @@ const TOOLTIP_ANIMATION_TIME = 150; const MAX_THUMBNAILS = 6; -let WindowPreview = GObject.registerClass( class WindowPreview extends St.Button { - _init(window) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(window) { + super({ style_class: 'window-list-window-preview', }); @@ -69,10 +72,13 @@ class WindowPreview extends St.Button { this._window.window_type !== Meta.WindowType.DESKTOP && this._window.showing_on_its_workspace(); } -}); +} -let WorkspaceLayout = GObject.registerClass( class WorkspaceLayout extends Clutter.LayoutManager { + static { + GObject.registerClass(this); + } + vfunc_get_preferred_width() { return [0, 0]; } @@ -99,12 +105,15 @@ class WorkspaceLayout extends Clutter.LayoutManager { child.allocate(childBox); } } -}); +} -let WorkspaceThumbnail = GObject.registerClass( class WorkspaceThumbnail extends St.Button { - _init(index) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(index) { + super({ style_class: 'workspace', child: new Clutter.Actor({ layout_manager: new WorkspaceLayout(), @@ -241,12 +250,15 @@ class WorkspaceThumbnail extends St.Button { this._workspace.disconnect(this._windowRemovedId); global.display.disconnect(this._restackedId); } -}); +} -var WorkspaceIndicator = GObject.registerClass( -class WorkspaceIndicator extends PanelMenu.Button { - _init() { - super._init(0.0, _('Workspace Indicator'), true); +var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button { + static { + GObject.registerClass(this); + } + + constructor() { + super(0.0, _('Workspace Indicator'), true); this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM)); this.add_style_class_name('window-list-workspace-indicator'); this.remove_style_class_name('panel-button'); @@ -435,5 +447,4 @@ class WorkspaceIndicator extends PanelMenu.Button { let newIndex = this._currentWorkspace + diff; this._activate(newIndex); } -}); - +}; diff --git a/extensions/windowsNavigator/extension.js b/extensions/windowsNavigator/extension.js index a2cab423..f2794305 100644 --- a/extensions/windowsNavigator/extension.js +++ b/extensions/windowsNavigator/extension.js @@ -9,10 +9,13 @@ const WorkspacesView = imports.ui.workspacesView; const WINDOW_SLOT = 4; -var MyWorkspace = GObject.registerClass( class MyWorkspace extends Workspace.Workspace { - _init(...args) { - super._init(...args); + static { + GObject.registerClass(this); + } + + constructor(...args) { + super(...args); if (this.metaWorkspace && this.metaWorkspace.index() < 9) { this._tip = new St.Label({ @@ -115,12 +118,15 @@ class MyWorkspace extends Workspace.Workspace { return clone; } -}); +} -var MyWorkspacesView = GObject.registerClass( class MyWorkspacesView extends WorkspacesView.WorkspacesView { - _init(...args) { - super._init(...args); + static { + GObject.registerClass(this); + } + + constructor(...args) { + super(...args); this._pickWorkspace = false; this._pickWindow = false; @@ -243,7 +249,7 @@ class MyWorkspacesView extends WorkspacesView.WorkspacesView { } return false; } -}); +} class Extension { constructor() { diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js index a2c95b6a..e424a69a 100644 --- a/extensions/workspace-indicator/extension.js +++ b/extensions/workspace-indicator/extension.js @@ -19,10 +19,13 @@ const TOOLTIP_ANIMATION_TIME = 150; const MAX_THUMBNAILS = 6; -let WindowPreview = GObject.registerClass( class WindowPreview extends St.Button { - _init(window) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(window) { + super({ style_class: 'workspace-indicator-window-preview', }); @@ -74,10 +77,13 @@ class WindowPreview extends St.Button { this._window.window_type !== Meta.WindowType.DESKTOP && this._window.showing_on_its_workspace(); } -}); +} -let WorkspaceLayout = GObject.registerClass( class WorkspaceLayout extends Clutter.LayoutManager { + static { + GObject.registerClass(this); + } + vfunc_get_preferred_width() { return [0, 0]; } @@ -104,12 +110,15 @@ class WorkspaceLayout extends Clutter.LayoutManager { child.allocate(childBox); } } -}); +} -let WorkspaceThumbnail = GObject.registerClass( class WorkspaceThumbnail extends St.Button { - _init(index) { - super._init({ + static { + GObject.registerClass(this); + } + + constructor(index) { + super({ style_class: 'workspace', child: new Clutter.Actor({ layout_manager: new WorkspaceLayout(), @@ -246,12 +255,15 @@ class WorkspaceThumbnail extends St.Button { this._workspace.disconnect(this._windowRemovedId); global.display.disconnect(this._restackedId); } -}); +} -let WorkspaceIndicator = GObject.registerClass( class WorkspaceIndicator extends PanelMenu.Button { - _init() { - super._init(0.0, _('Workspace Indicator')); + static { + GObject.registerClass(this); + } + + constructor() { + super(0.0, _('Workspace Indicator')); let container = new St.Widget({ layout_manager: new Clutter.BinLayout(), @@ -440,7 +452,7 @@ class WorkspaceIndicator extends PanelMenu.Button { let newIndex = global.workspace_manager.get_active_workspace_index() + diff; this._activate(newIndex); } -}); +} /** */ function init() { diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index 8734e1a2..5a1da46a 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -11,13 +11,131 @@ const N_ = e => e; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_KEY = 'workspace-names'; -const WorkspaceSettingsWidget = GObject.registerClass( +class NewItem extends GObject.Object {} +GObject.registerClass(NewItem); + +class NewItemModel extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #item = new NewItem(); + + vfunc_get_item_type() { + return NewItem; + } + + vfunc_get_n_items() { + return 1; + } + + vfunc_get_item(_pos) { + return this.#item; + } +} + +class WorkspacesList extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #settings = new Gio.Settings({ schema_id: WORKSPACE_SCHEMA }); + #names = this.#settings.get_strv(WORKSPACE_KEY); + #items = Gtk.StringList.new(this.#names); + #changedId; + + constructor() { + super(); + + this.#changedId = + this.#settings.connect(`changed::${WORKSPACE_KEY}`, () => { + const removed = this.#names.length; + this.#names = this.#settings.get_strv(WORKSPACE_KEY); + this.#items.splice(0, removed, this.#names); + this.items_changed(0, removed, this.#names.length); + }); + } + + append() { + const name = _('Workspace %d').format(this.#names.length + 1); + + this.#names.push(name); + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + + const pos = this.#items.get_n_items(); + this.#items.append(name); + this.items_changed(pos, 0, 1); + } + + remove(name) { + const pos = this.#names.indexOf(name); + if (pos < 0) + return; + + this.#names.splice(pos, 1); + + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + + this.#items.remove(pos); + this.items_changed(pos, 1, 0); + } + + rename(oldName, newName) { + const pos = this.#names.indexOf(oldName); + if (pos < 0) + return; + + this.#names.splice(pos, 1, newName); + this.#items.splice(pos, 1, [newName]); + + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + } + + vfunc_get_item_type() { + return Gtk.StringObject; + } + + vfunc_get_n_items() { + return this.#items.get_n_items(); + } + + vfunc_get_item(pos) { + return this.#items.get_item(pos); + } +} + class WorkspaceSettingsWidget extends Adw.PreferencesGroup { - _init() { - super._init({ + static { + GObject.registerClass(this); + + this.install_action('workspaces.add', null, + self => self._workspaces.append()); + this.install_action('workspaces.remove', 's', + (self, name, param) => self._workspaces.remove(param.unpack())); + this.install_action('workspaces.rename', '(ss)', + (self, name, param) => self._workspaces.rename(...param.deepUnpack())); + } + + constructor() { + super({ title: _('Workspace Names'), }); + this._workspaces = new WorkspacesList(); + + const store = new Gio.ListStore({ item_type: Gio.ListModel }); + const listModel = new Gtk.FlattenListModel({ model: store }); + store.append(this._workspaces); + store.append(new NewItemModel()); + this._list = new Gtk.ListBox({ selection_mode: Gtk.SelectionMode.NONE, css_classes: ['boxed-list'], @@ -25,73 +143,21 @@ class WorkspaceSettingsWidget extends Adw.PreferencesGroup { this._list.connect('row-activated', (l, row) => row.edit()); this.add(this._list); - this._list.append(new NewWorkspaceRow()); - - this._actionGroup = new Gio.SimpleActionGroup(); - this._list.insert_action_group('workspaces', this._actionGroup); - - let action; - action = new Gio.SimpleAction({ name: 'add' }); - action.connect('activate', () => { - const names = this._settings.get_strv(WORKSPACE_KEY); - this._settings.set_strv(WORKSPACE_KEY, [ - ...names, - _('Workspace %d').format(names.length + 1), - ]); - }); - this._actionGroup.add_action(action); - - action = new Gio.SimpleAction({ - name: 'remove', - parameter_type: new GLib.VariantType('s'), - }); - action.connect('activate', (a, param) => { - const removed = param.deepUnpack(); - this._settings.set_strv(WORKSPACE_KEY, - this._settings.get_strv(WORKSPACE_KEY) - .filter(name => name !== removed)); - }); - this._actionGroup.add_action(action); - - action = new Gio.SimpleAction({ name: 'update' }); - action.connect('activate', () => { - const names = this._getWorkspaceRows().map(row => row.name); - this._settings.set_strv(WORKSPACE_KEY, names); - }); - this._actionGroup.add_action(action); - - this._settings = new Gio.Settings({ - schema_id: WORKSPACE_SCHEMA, - }); - this._settings.connect(`changed::${WORKSPACE_KEY}`, - this._sync.bind(this)); - this._sync(); - } - - _getWorkspaceRows() { - return [...this._list].filter(row => row.name); - } - - _sync() { - const rows = this._getWorkspaceRows(); - - const oldNames = rows.map(row => row.name); - const newNames = this._settings.get_strv(WORKSPACE_KEY); - - const removed = oldNames.filter(n => !newNames.includes(n)); - const added = newNames.filter(n => !oldNames.includes(n)); - - removed.forEach(n => this._list.remove(rows.find(r => r.name === n))); - added.forEach(n => { - this._list.insert(new WorkspaceRow(n), newNames.indexOf(n)); + this._list.bind_model(listModel, item => { + return item instanceof NewItem + ? new NewWorkspaceRow() + : new WorkspaceRow(item.string); }); } -}); +} -const WorkspaceRow = GObject.registerClass( class WorkspaceRow extends Adw.PreferencesRow { - _init(name) { - super._init({ name }); + static { + GObject.registerClass(this); + } + + constructor(name) { + super({ name }); const box = new Gtk.Box({ spacing: 12, @@ -113,12 +179,17 @@ class WorkspaceRow extends Adw.PreferencesRow { const button = new Gtk.Button({ action_name: 'workspaces.remove', - action_target: new GLib.Variant('s', name), icon_name: 'edit-delete-symbolic', has_frame: false, }); box.append(button); + this.bind_property_full('name', + button, 'action-target', + GObject.BindingFlags.SYNC_CREATE, + (bind, target) => [true, new GLib.Variant('s', target)], + null); + this._entry = new Gtk.Entry({ max_width_chars: 25, }); @@ -139,6 +210,8 @@ class WorkspaceRow extends Adw.PreferencesRow { this.child = this._stack; this._entry.connect('activate', () => { + this.activate_action('workspaces.rename', + new GLib.Variant('(ss)', [this.name, this._entry.text])); this.name = this._entry.text; this._stopEdit(); }); @@ -147,11 +220,6 @@ class WorkspaceRow extends Adw.PreferencesRow { return; this._stopEdit(); }); - - this.connect('notify::name', () => { - button.action_target = new GLib.Variant('s', this.name); - this.activate_action('workspaces.update', null); - }); } edit() { @@ -164,12 +232,15 @@ class WorkspaceRow extends Adw.PreferencesRow { this.grab_focus(); this._stack.visible_child_name = 'display'; } -}); +} -const NewWorkspaceRow = GObject.registerClass( class NewWorkspaceRow extends Adw.PreferencesRow { - _init() { - super._init({ + static { + GObject.registerClass(this); + } + + constructor() { + super({ action_name: 'workspaces.add', child: new Gtk.Image({ icon_name: 'list-add-symbolic', @@ -183,7 +254,7 @@ class NewWorkspaceRow extends Adw.PreferencesRow { this.update_property( [Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]); } -}); +} /** */ function init() { diff --git a/lint/eslintrc-gjs.yml b/lint/eslintrc-gjs.yml index dadf40bd..97e728f9 100644 --- a/lint/eslintrc-gjs.yml +++ b/lint/eslintrc-gjs.yml @@ -2,8 +2,7 @@ # SPDX-License-Identifier: MIT OR LGPL-2.0-or-later # SPDX-FileCopyrightText: 2018 Claudio André env: - es6: true - es2020: true + es2021: true extends: 'eslint:recommended' plugins: - jsdoc @@ -86,7 +85,10 @@ rules: linebreak-style: - error - unix - lines-between-class-members: error + lines-between-class-members: + - error + - always + - exceptAfterSingleLine: true max-nested-callbacks: error max-statements-per-line: error new-parens: error @@ -259,5 +261,10 @@ globals: window: readonly TextEncoder: readonly TextDecoder: readonly + console: readonly + setTimeout: readonly + setInterval: readonly + clearTimeout: readonly + clearInterval: readonly parserOptions: - ecmaVersion: 2020 + ecmaVersion: 2022 diff --git a/meson.build b/meson.build index d8531b9d..8cfa4692 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gnome-shell-extensions', - version: '42.beta', + version: '42.rc', meson_version: '>= 0.53.0', license: 'GPL2+' ) diff --git a/po/cs.po b/po/cs.po index 7d3258dc..ddc64000 100644 --- a/po/cs.po +++ b/po/cs.po @@ -2,15 +2,15 @@ # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER # This file is distributed under the same license as the gnome-shell-extensions package. # Petr Kovar , 2013. -# Marek Černocký , 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020. +# Marek Černocký , 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2022. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-08-28 22:18+0200\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-02-16 09:58+0100\n" "Last-Translator: Marek Černocký \n" "Language-Team: Czech \n" "Language: cs\n" @@ -20,19 +20,28 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Gtranslator 2.91.6\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "GNOME klasik" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Toto sezení vás přihlásí do GNOME klasik" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "GNOME klasik na Waylandu" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "GNOME klasik na Xorg" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Oblíbené" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Aplikace" @@ -48,26 +57,26 @@ msgstr "" "Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní " "plochy), následovaný dvojtečkou a číslem pracovní plochy" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Pravidla pracovních ploch" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Přidat pravidlo" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Vysunutí disku „%s“ selhalo:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Výměnná zařízení" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Otevřít soubory" @@ -99,8 +108,8 @@ msgstr "" "přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto " "nastavení vyžaduje restart shellu, aby se projevila." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Místa" @@ -143,47 +152,47 @@ msgstr "Název motivu" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Zavřít" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Zrušit minimalizaci" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Minimalizovat" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Zrušit maximalizaci" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Maximalizovat" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Minimalizovat všechna" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Zrušit minimalizaci všech" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Maximalizovat všechna" -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Zrušit maximalizaci všech" -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Zavřít všechna" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Seznam oken" @@ -200,7 +209,7 @@ msgstr "" "hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Zobrazovat okna ze všech pracovních ploch" @@ -220,40 +229,40 @@ msgstr "" "Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na " "hlavním." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Seskupování oken" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Nikdy neseskupovat okna" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Seskupovat okna při nedostatku místa" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Vždy seskupovat okna" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Zobrazovat na všech monitorech" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Ukazatel pracovní plochy" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Názvy pracovních ploch" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Pracovní plocha %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Přidat pracovní plochu" diff --git a/po/da.po b/po/da.po index bc592f02..fdd65451 100644 --- a/po/da.po +++ b/po/da.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-09-07 18:36+0200\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-02-27 13:21+0100\n" "Last-Translator: Alan Mortensen \n" "Language-Team: Danish \n" "Language: da\n" @@ -22,19 +22,28 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "GNOME Classic" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Denne session logger dig ind i GNOME Classic" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "GNOME Classic på Wayland" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "GNOME Classic på Xorg" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Favoritter" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Programmer" @@ -50,26 +59,26 @@ msgstr "" "En liste over strenge, som hver indeholder et program-id " "(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Regler for arbejdsområde" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Tilføj regel" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Udskubning af drevet “%s” mislykkedes:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Flytbare enheder" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Åbn filer" @@ -103,8 +112,8 @@ msgstr "" "Ændring af denne indstilling kræver at shell'en genstartes for at træde i " "kraft." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Steder" @@ -147,47 +156,47 @@ msgstr "Temanavn" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Luk" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Afminimér" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Minimér" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Afmaksimér" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Maksimér" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Minimér" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Afminimér alle" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Maksimér alle" -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Afmaksimér alle" -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Luk alle" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Vinduesliste" @@ -204,7 +213,7 @@ msgstr "" "Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Vis vinduer fra alle arbejdsområder" @@ -225,41 +234,41 @@ msgstr "" "Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den " "primære." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Vinduesgruppering" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Gruppér aldrig vinduer" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Gruppér vinduer når pladsen er begrænset" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Gruppér altid vinduer" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Vis på alle skærme" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Arbejdsområdeindikator" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Navne på arbejdsområder" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Arbejdsområde %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Tilføj arbejdsområde" diff --git a/po/fi.po b/po/fi.po index e5ab20ef..b3b51685 100644 --- a/po/fi.po +++ b/po/fi.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-10-17 20:14+0000\n" -"PO-Revision-Date: 2021-03-15 21:32+0200\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-02-27 18:54+0200\n" "Last-Translator: JR-Fi \n" "Language-Team: suomi \n" "Language: fi\n" @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 3.0.1\n" "X-Project-Style: gnome\n" "X-POT-Import-Date: 2012-03-05 15:06:12+0000\n" @@ -29,15 +29,24 @@ msgstr "" msgid "GNOME Classic" msgstr "Perinteinen Gnome" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Tämä istunto kirjaa sinut perinteiseen Gnomeen" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "Perinteinen Gnome Waylandia käyttäen" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "Perinteinen Gnome Xorgia käyttäen" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Suosikit" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Sovellukset" @@ -53,26 +62,26 @@ msgstr "" "Lista merkkijonoja, jossa jokainen on ohjelman tunnus (työpöydän " "tiedostonimi), jota seuraa kaksoispiste ja työtilan numero" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Työtilojen säännöt" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Lisää sääntö" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Aseman “%s” irrottaminen epäonnistui:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Erilliset tallennusvälineet" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Avaa tiedostonhallinta" @@ -104,8 +113,8 @@ msgstr "" "Tämä syrjäyttää oletusasetuksen, eli otsikkotekstin asettamisen pienoiskuvan " "alle. Tämän asetuksen muutos vaatii Gnomen uudelleenkäynnistyksen." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Sijainnit" @@ -149,47 +158,47 @@ msgstr "Teeman nimi" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Teeman nimi, ladataan sijainnista ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Sulje" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Palauta pienennys" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Pienennä" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Palauta suurennus" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Suurenna" -#: extensions/window-list/extension.js:432 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Pienennä kaikki" -#: extensions/window-list/extension.js:438 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Palauta kaikkien koko" -#: extensions/window-list/extension.js:444 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Suurenna kaikki" -#: extensions/window-list/extension.js:452 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Palauta kaikkien koko" -#: extensions/window-list/extension.js:460 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Sulje kaikki" -#: extensions/window-list/extension.js:738 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Ikkunaluettelo" @@ -206,7 +215,7 @@ msgstr "" "Mahdolliset arvot ovat “never”, “auto” ja “always”." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Näytä ikkunat kaikista työtiloista" @@ -228,41 +237,41 @@ msgstr "" "Näytetäänkö ikkunaluettelo kaikilla liitetyillä näytöillä vai ainoastaan " "ensisijaisella näytöllä." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Ikkunoiden ryhmitys" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Älä ryhmitä ikkunoita koskaan" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Ryhmitä ikkunat tilan ollessa rajallinen" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Ryhmitä ikkunat aina" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Näytä kaikilla näytöillä" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Työtilan ilmaisin" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Työtilojen nimet" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Työtila %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Lisää työtila" diff --git a/po/fr.po b/po/fr.po index ffa70d96..226cbf1e 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3,36 +3,48 @@ # This file is distributed under the same license as the gnome-shell-extensions package. # Claude Paroz , 2011. # Alain Lojewski , 2012-2013. -# Charles Monzat , 2018. +# Charles Monzat , 2018-2022. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-08-10 12:50+0200\n" -"Last-Translator: Claude Paroz \n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-03-01 21:04+0100\n" +"Last-Translator: Charles Monzat \n" "Language-Team: GNOME French Team \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Gtranslator 40.0\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "GNOME Classique" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Cette session vous connecte à GNOME Classique" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +#| msgid "GNOME Classic" +msgid "GNOME Classic on Wayland" +msgstr "GNOME Classique sur Wayland" + +#: data/gnome-classic-xorg.desktop.in:3 +#| msgid "GNOME Classic" +msgid "GNOME Classic on Xorg" +msgstr "GNOME Classique sur Xorg" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Favoris" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Applications" @@ -49,26 +61,26 @@ msgstr "" "d’application (nom de fichier desktop), suivi par un deux-points et le " "numéro de l’espace de travail" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Règles des espaces de travail" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Ajouter une règle" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "L’éjection du disque « %s » a échoué :" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Périphériques amovibles" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Ouvrir Fichiers" @@ -102,8 +114,8 @@ msgstr "" "dessous. Pour que ce paramètre soit pris en compte, il faut redémarrer le " "Shell." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Emplacements" @@ -146,47 +158,47 @@ msgstr "Nom du thème" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Fermer" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Restaurer" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Réduire" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Restaurer" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Maximiser" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Tout réduire" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Tout restaurer" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Tout maximiser" -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Tout restaurer" -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Tout fermer" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Liste de fenêtres" @@ -204,7 +216,7 @@ msgstr "" "« always » (toujours)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Afficher les fenêtres de tous les espaces de travail" @@ -226,41 +238,41 @@ msgstr "" "Indique s’il faut afficher la liste des fenêtres sur tous les écrans " "connectés ou seulement l’écran principal." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Regroupement de fenêtres" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Ne jamais regrouper les fenêtres" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Regrouper les fenêtres quand l’espace est limité" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Toujours regrouper les fenêtres" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Afficher sur tous les écrans" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Indicateur d’espace de travail" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Noms des espaces de travail" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Espace de travail %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Ajouter un espace de travail" diff --git a/po/ko.po b/po/ko.po index aeb5010c..05248ce6 100644 --- a/po/ko.po +++ b/po/ko.po @@ -1,17 +1,17 @@ # Korean translation for gnome-shell-extensions. -# Copyright (C) 2012 gnome-shell-extensions's COPYRIGHT HOLDER +# Copyright (C) 2012-2022 gnome-shell-extensions's COPYRIGHT HOLDER # This file is distributed under the same license as the gnome-shell-extensions package. # # Seong-ho Cho , 2012. -# Changwoo Ryu , 2013-2015, 2017, 2019-2020. +# Changwoo Ryu , 2013-2015, 2017, 2019-2020, 2022. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-08-28 22:25+0900\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-03-03 00:15+0900\n" "Last-Translator: Changwoo Ryu \n" "Language-Team: Korean \n" "Language: ko\n" @@ -20,19 +20,28 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "그놈 클래식" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "이 세션을 사용하면 그놈 클래식에 로그인합니다" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "그놈 클래식 (웨일랜드)" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "그놈 클래식 (Xorg)" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "즐겨찾기" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "프로그램" @@ -48,26 +57,26 @@ msgstr "" "문자열 목록, 각각은 프로그램 ID(데스크톱 파일 이름) 다음에 콜론 뒤에 작업 공" "간 번호." -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "작업 공간 규칙" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "규칙 추가" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "“%s” 드라이브를 빼는데 실패했습니다:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "이동식 장치" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "파일 열기" @@ -99,8 +108,8 @@ msgstr "" "참이면, 창의 이름을 각 섬네일 위에 표시합니다. 셸의 기본값은 아래에 창 이름" "을 표시합니다. 이 설정을 바꾸면 셸을 다시 시작해야 적용됩니다." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "위치" @@ -143,47 +152,47 @@ msgstr "테마 이름" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "테마 이름, ~/.themes/name/gnome-shell 아래에서 읽어들입니다." -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "닫기" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "최소화 취소" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "최소화" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "최대화 취소" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "최대화" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "모두 최소화" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "모두 최소화 취소" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "모두 최대화" -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "모두 최대화 취소" -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "모두 닫기" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "창 목록" @@ -200,7 +209,7 @@ msgstr "" "“never”, “auto”, “always”입니다." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "모든 작업 공간의 창을 표시합니다" @@ -220,41 +229,41 @@ msgstr "" "연결된 모든 모니터에 있는 창 목록을 표시할지, 아니면 주 모니터에 있는 창 목록" "만 표시할지." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "창 모으기" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "창을 모으지 않기" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "공간이 부족할 때 창 모으기" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "항상 창 모으기" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "모든 모니터 보이기" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "작업 공간 표시" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "작업 공간 이름" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "작업 공간 %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "작업 공간 추가" diff --git a/po/pl.po b/po/pl.po index bcfe2d6a..ddcb4710 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,16 +1,16 @@ # Polish translation for gnome-shell-extensions. -# Copyright © 2011-2020 the gnome-shell-extensions authors. +# Copyright © 2011-2022 the gnome-shell-extensions authors. # This file is distributed under the same license as the gnome-shell-extensions package. -# Piotr Drąg , 2011-2020. -# Aviary.pl , 2011-2020. +# Piotr Drąg , 2011-2022. +# Aviary.pl , 2011-2022. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-08-15 11:39+0200\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-02-26 15:15+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -20,19 +20,28 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "Klasyczne GNOME" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Ta sesja loguje do klasycznego środowiska GNOME" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "Klasyczne GNOME (Wayland)" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "Klasyczne GNOME (Xorg)" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Ulubione" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Programy" @@ -48,26 +57,26 @@ msgstr "" "Lista ciągów, każdy zawierający identyfikator programu (nazwę pliku ." "desktop) z przecinkiem i numerem obszaru roboczego" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Reguły obszarów roboczych" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Dodaj regułę" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Wysunięcie napędu „%s” się nie powiodło:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Urządzenia wymienne" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Otwórz menedżer plików" @@ -100,8 +109,8 @@ msgstr "" "powłokę. Zmiana tego ustawienia wymaga ponownego uruchomienia powłoki, aby " "uwzględnić zmiany." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Miejsca" @@ -144,47 +153,47 @@ msgstr "Nazwa motywu" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Nazwa motywu do wczytania z katalogu ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Zamknij" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Cofnij minimalizację" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Zminimalizuj" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Cofnij maksymalizację" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Zmaksymalizuj" -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Zminimalizuj wszystkie" -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Cofnij minimalizację wszystkich" -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Zmaksymalizuj wszystkie" -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Cofnij maksymalizację wszystkich" -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Zamknij wszystkie" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Lista okien" @@ -201,7 +210,7 @@ msgstr "" "wartości to „never” (nigdy), „auto” (automatycznie) i „always” (zawsze)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Wyświetlanie okien ze wszystkich obszarów roboczych" @@ -222,40 +231,40 @@ msgstr "" "Czy wyświetlać listę okien na wszystkich podłączonych monitorach, czy tylko " "na głównym." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Grupowanie okien" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Bez grupowania okien" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Grupowanie okien, kiedy miejsce jest ograniczone" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Stałe grupowanie okien" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Wyświetlanie na wszystkich monitorach" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Wskaźnik obszaru roboczego" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Nazwy obszarów roboczych" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "%d. obszar roboczy" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Dodaj obszar roboczy" diff --git a/po/sk.po b/po/sk.po index d352e15a..9e8d20eb 100644 --- a/po/sk.po +++ b/po/sk.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-05-28 00:55+0000\n" -"PO-Revision-Date: 2020-09-02 14:02+0200\n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2022-02-25 08:14+0100\n" "Last-Translator: Dušan Kazik \n" "Language-Team: Slovak \n" "Language: sk\n" @@ -18,22 +18,31 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 3.0\n" -#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 +#: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "Klasické prostredie GNOME" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Táto relácia vás prihlási do klasického prostredia GNOME" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "Klasické prostredie GNOME so systémom Wayland" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "Klasické prostredie GNOME so systémom Xorg" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Obľúbené" # TreeViewColumn -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Aplikácie" @@ -52,30 +61,30 @@ msgstr "" "súboru .desktop), nasledovaný čiarkou a číslom pracovného priestoru" # Label -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Pravidlá pracovného priestoru" # ToolButton label -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Pridať pravidlo" # https://bugzilla.gnome.org/show_bug.cgi?id=687590 #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Zlyhalo vysúvanie jednotky „%s“:" #  Menu -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Vymeniteľné zariadenia" # Menu Action -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Otvoriť aplikáciu Súbory" @@ -112,8 +121,8 @@ msgstr "" "nadol. Aby sa prejavila zmena, je potrebné reštartovať shell." #  menu item -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Miesta" @@ -160,56 +169,56 @@ msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Názov témy, ktorá sa načíta z ~/.themes/nazov/gnome-shell" # PopupMenuItem -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Zavrieť" # label -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Odminimalizovať" # label -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Minimalizovať" # label -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Odmaximalizovať" # label -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Maximalizovať" # PopupMenuItem -#: extensions/window-list/extension.js:428 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Minimalizovať všetko" # PopupMenuItem -#: extensions/window-list/extension.js:434 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Odminimalizovať všetko" # PopupMenuItem -#: extensions/window-list/extension.js:440 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Maximalizovať všetko" # PopupMenuItem -#: extensions/window-list/extension.js:448 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Odmaximalizovať všetko" # PopupMenuItem -#: extensions/window-list/extension.js:456 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Zavrieť všetko" -#: extensions/window-list/extension.js:734 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Zoznam okien" @@ -227,7 +236,7 @@ msgstr "" # CheckButton #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Zobraziť okná zo všetkých pracovných priestorov" @@ -249,45 +258,45 @@ msgstr "" "Určuje, či sa má zobraziť zoznam okien na všetkých pripojených monitoroch, " "alebo iba na hlavnom." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Zoskupenie okien" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Nikdy nezoskupovať okná" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Zoskupovať okna ak je obmedzený priestor" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Vždy zoskupovať okná" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Zobraziť na všetkých monitoroch" # Label -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Indikátor pracovného priestoru" # Label -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Názvy pracovných priestorov" # store label -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Pracovný priestor č. %d" # TreeViewColumn; Label -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Pridať pracovný priestor" diff --git a/po/sv.po b/po/sv.po index 989074aa..22a5eef9 100644 --- a/po/sv.po +++ b/po/sv.po @@ -4,35 +4,45 @@ # Daniel Nylander , 2011, 2012. # Mattias Eriksson , 2014. # Anders Jonsson , 2015, 2017, 2019, 2020, 2021. +# Luna Jernberg , 2021. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2020-10-17 20:14+0000\n" -"PO-Revision-Date: 2021-03-27 21:12+0100\n" -"Last-Translator: Anders Jonsson \n" +"POT-Creation-Date: 2021-11-06 14:08+0000\n" +"PO-Revision-Date: 2021-11-07 10:48+0100\n" +"Last-Translator: Luna Jernberg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" msgstr "GNOME Klassisk" -#: data/gnome-classic.desktop.in:4 +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 msgid "This session logs you into GNOME Classic" msgstr "Denna session loggar in dig till GNOME Klassisk" -#: extensions/apps-menu/extension.js:113 +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "GNOME Klassisk på Wayland" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "GNOME Klassisk på Xorg" + +#: extensions/apps-menu/extension.js:112 msgid "Favorites" msgstr "Favoriter" -#: extensions/apps-menu/extension.js:369 +#: extensions/apps-menu/extension.js:366 msgid "Applications" msgstr "Program" @@ -48,26 +58,26 @@ msgstr "" "En lista över strängar, var och en innehållande ett program-id " "(skrivbordsfilnamn), följt av ett kolontecken och arbetsytans nummer" -#: extensions/auto-move-windows/prefs.js:35 +#: extensions/auto-move-windows/prefs.js:34 msgid "Workspace Rules" msgstr "Regler för arbetsyta" -#: extensions/auto-move-windows/prefs.js:243 +#: extensions/auto-move-windows/prefs.js:236 msgid "Add Rule" msgstr "Lägg till regel" #. TRANSLATORS: %s is the filesystem name -#: extensions/drive-menu/extension.js:112 +#: extensions/drive-menu/extension.js:133 #: extensions/places-menu/placeDisplay.js:233 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Utmatning av disk ”%s” misslyckades:" -#: extensions/drive-menu/extension.js:128 +#: extensions/drive-menu/extension.js:149 msgid "Removable devices" msgstr "Flyttbara enheter" -#: extensions/drive-menu/extension.js:155 +#: extensions/drive-menu/extension.js:171 msgid "Open Files" msgstr "Öppna filer" @@ -100,8 +110,8 @@ msgstr "" "skalets standardplacering under miniatyrbilden. För att ändra denna " "inställning krävs att skalet startas om för att den ska få effekt." -#: extensions/places-menu/extension.js:89 -#: extensions/places-menu/extension.js:93 +#: extensions/places-menu/extension.js:88 +#: extensions/places-menu/extension.js:91 msgid "Places" msgstr "Platser" @@ -144,47 +154,47 @@ msgstr "Temanamn" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Namnet på temat, kommer att läsas in från ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Stäng" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Unminimize" msgstr "Avminimera" -#: extensions/window-list/extension.js:118 +#: extensions/window-list/extension.js:92 msgid "Minimize" msgstr "Minimera" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Unmaximize" msgstr "Avmaximera" -#: extensions/window-list/extension.js:125 +#: extensions/window-list/extension.js:99 msgid "Maximize" msgstr "Maximera" -#: extensions/window-list/extension.js:432 +#: extensions/window-list/extension.js:434 msgid "Minimize all" msgstr "Minimera alla" -#: extensions/window-list/extension.js:438 +#: extensions/window-list/extension.js:440 msgid "Unminimize all" msgstr "Avminimera alla" -#: extensions/window-list/extension.js:444 +#: extensions/window-list/extension.js:446 msgid "Maximize all" msgstr "Maximera alla" -#: extensions/window-list/extension.js:452 +#: extensions/window-list/extension.js:454 msgid "Unmaximize all" msgstr "Avmaximera alla" -#: extensions/window-list/extension.js:460 +#: extensions/window-list/extension.js:462 msgid "Close all" msgstr "Stäng alla" -#: extensions/window-list/extension.js:738 +#: extensions/window-list/extension.js:741 msgid "Window List" msgstr "Fönsterlista" @@ -201,7 +211,7 @@ msgstr "" "värden är ”never” (aldrig), ”auto” och ”always” (alltid)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 -#: extensions/window-list/prefs.js:100 +#: extensions/window-list/prefs.js:86 msgid "Show windows from all workspaces" msgstr "Visa fönster från alla arbetsytor" @@ -222,40 +232,40 @@ msgstr "" "Huruvida fönsterlistan ska visas på alla anslutna skärmar eller bara på den " "primära." -#: extensions/window-list/prefs.js:29 +#: extensions/window-list/prefs.js:39 msgid "Window Grouping" msgstr "Fönstergruppering" -#: extensions/window-list/prefs.js:58 +#: extensions/window-list/prefs.js:63 msgid "Never group windows" msgstr "Gruppera aldrig fönster" -#: extensions/window-list/prefs.js:59 +#: extensions/window-list/prefs.js:64 msgid "Group windows when space is limited" msgstr "Gruppera fönster när utrymmet är begränsat" -#: extensions/window-list/prefs.js:60 +#: extensions/window-list/prefs.js:65 msgid "Always group windows" msgstr "Gruppera alltid fönster" -#: extensions/window-list/prefs.js:94 +#: extensions/window-list/prefs.js:81 msgid "Show on all monitors" msgstr "Visa på alla skärmar" -#: extensions/window-list/workspaceIndicator.js:207 -#: extensions/workspace-indicator/extension.js:213 +#: extensions/window-list/workspaceIndicator.js:249 +#: extensions/workspace-indicator/extension.js:254 msgid "Workspace Indicator" msgstr "Arbetsyteindikator" -#: extensions/workspace-indicator/prefs.js:34 +#: extensions/workspace-indicator/prefs.js:33 msgid "Workspace Names" msgstr "Namn på arbetsytor" -#: extensions/workspace-indicator/prefs.js:67 +#: extensions/workspace-indicator/prefs.js:66 #, javascript-format msgid "Workspace %d" msgstr "Arbetsyta %d" -#: extensions/workspace-indicator/prefs.js:218 +#: extensions/workspace-indicator/prefs.js:207 msgid "Add Workspace" msgstr "Lägg till arbetsyta"