Hello community,

here is the log from the commit of package gnome-shell-extensions for 
openSUSE:Factory checked in at 2018-10-17 08:22:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-shell-extensions (Old)
 and      /work/SRC/openSUSE:Factory/.gnome-shell-extensions.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-shell-extensions"

Wed Oct 17 08:22:23 2018 rev:85 rq:641193 version:3.30.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gnome-shell-extensions/gnome-shell-extensions.changes
    2018-08-07 09:42:13.837221494 +0200
+++ 
/work/SRC/openSUSE:Factory/.gnome-shell-extensions.new/gnome-shell-extensions.changes
       2018-10-17 08:23:06.450775964 +0200
@@ -1,0 +2,33 @@
+Tue Oct  9 10:12:44 UTC 2018 - [email protected]
+
+- Update to version 3.30.1:
+  + apps-menu: Fix height on HiDPI systems
+    (glgo#GNOME/gnome-shell-extensions#102).
+  + window-list: Only switch between windows on active workspace
+    when scrolling (glgo#GNOME/gnome-shell-extensions#78).
+
+-------------------------------------------------------------------
+Thu Sep  6 08:23:44 UTC 2018 - [email protected]
+
+- Update sle-classic to adapte version 3.30.0
+  + Add 00_org.gnome.shell.extensions.sle-classic.gschema.override
+  + Update gse-sle-classic-ext.patch
+  + Update sle-classic-xorg.desktop
+  + Update sle-classic.desktop
+  + Update [email protected]
+
+-------------------------------------------------------------------
+Thu Sep  6 03:38:52 UTC 2018 - [email protected]
+
+- Update to version 3.30.0:
+  + No visible changes.
+- Changes frome version 3.29.91:
+  + Misc. bug fixes: glgo#GNOME/gnome-shell-extensions#90.
+
+-------------------------------------------------------------------
+Fri Aug  3 20:49:10 UTC 2018 - [email protected]
+
+- Update to version 3.29.90:
+  + Misc. bug fixes: bgo#786496.
+
+-------------------------------------------------------------------
@@ -21,0 +55,7 @@
+
+-------------------------------------------------------------------
+Fri Jun 22 02:24:25 UTC 2018 - [email protected]
+
+- Update to version 3.29.2:
+  + Misc. bug fix: glgo#GNOME/gnome-shell-extensions#69.
+- Drop source-service use: the situation has been normalized.

Old:
----
  _service
  _servicedata
  gnome-shell-extensions-3.28.1+20180413.6746061.tar.xz

New:
----
  00_org.gnome.shell.extensions.sle-classic.gschema.override
  gnome-shell-extensions-3.30.1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-shell-extensions.spec ++++++
--- /var/tmp/diff_new_pack.dBQvo5/_old  2018-10-17 08:23:07.334775253 +0200
+++ /var/tmp/diff_new_pack.dBQvo5/_new  2018-10-17 08:23:07.338775249 +0200
@@ -13,35 +13,39 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 %global __requires_exclude typelib\\(Meta\\)
+
 Name:           gnome-shell-extensions
-Version:        3.28.1+20180413.6746061
+Version:        3.30.1
 Release:        0
 Summary:        A collection of extensions for GNOME Shell
 License:        GPL-2.0-or-later
 Group:          System/GUI/GNOME
-Url:            https://wiki.gnome.org/Projects/GnomeShell/Extensions
-#Source0:       
https://download.gnome.org/sources/gnome-shell-extensions/3.28/%%{name}-%%{version}.tar.xz
-Source:         %{name}-%{version}.tar.xz
+URL:            https://wiki.gnome.org/Projects/GnomeShell/Extensions
+Source0:        
http://download.gnome.org/sources/gnome-shell-extensions/3.30/%{name}-%{version}.tar.xz
 Source1:        README.SUSE
 Source2:        sle-classic.desktop
 Source3:        SLE-theme.tar.gz
 Source4:        sle-classic-xorg.desktop
 Source5:        sle-classic.json
 Source6:        [email protected]
+Source7:        00_org.gnome.shell.extensions.sle-classic.gschema.override
+
 # PATCH-FEATURE-OPENSUSE gnome-shell-add-app-to-desktop.patch bnc#870580 
[email protected] --  allow adding app shortcut to desktop easily.
 Patch1:         gnome-shell-add-app-to-desktop.patch
 # PATCH-FEATURE-OPENSUSE sle-classic-favorites-menu-at-end.patch bnc#890989 
[email protected] -- put the favorites at the end of the app catogories for 
accessibility reason -- [email protected] bnc#890989
 Patch2:         gnome-shell-favorites-menu-at-end.patch
-# PATCH-FEATURE-SLE sle-classic-lock-screen-background.patch bsc#1007468 
[email protected] -- add SUSE logo on lock screen when auth is requested
-Patch3:         sle-classic-lock-screen-background.patch
+
 ## NOTE keep SLE Classic patch at the bottom
 # PATCH-FIX-SLE gse-sle-classic-ext.patch Fate#318572 [email protected] -- add 
sle classic support
 Patch1000:      gse-sle-classic-ext.patch
+# PATCH-FEATURE-SLE sle-classic-lock-screen-background.patch bsc#1007468 
[email protected] -- add SUSE logo on lock screen when auth is requested
+Patch1001:      sle-classic-lock-screen-background.patch
+
 BuildRequires:  fdupes
 BuildRequires:  gnome-patch-translation
 # Needed for directory ownership
@@ -101,10 +105,10 @@
 %patch2 -p1
 translation-update-upstream po %{name}
 gnome-patch-translation-prepare po %{name}
+%patch1000 -p1
 %if !0%{?is_opensuse}
-%patch3 -p1
+%patch1001 -p1
 %endif
-%patch1000 -p1
 # In openSUSE GNOME, we don't launch gnome-session directly, but wrap this 
through a shell script, /usr/bin/gnome
 sed -i "s:Exec=gnome-session:Exec=gnome:g" data/gnome-classic.desktop.in
 cp %{SOURCE1} .
@@ -122,17 +126,16 @@
 %install
 %meson_install
 %find_lang %{name} %{?no_lang_C}
+#Install SLE theme
+#Install [email protected] extension
 install -m0644 %{SOURCE2} 
%{buildroot}/%{_datadir}/xsessions/sle-classic.desktop
 cp 
%{buildroot}/%{_datadir}/gnome-shell/extensions/[email protected]/classic.css
 \
 
%{buildroot}/%{_datadir}/gnome-shell/extensions/[email protected]/sle-classic.css
 install -m0644 %{SOURCE5} 
%{buildroot}/%{_datadir}/gnome-shell/modes/sle-classic.json
-install -d -m755 %{buildroot}%{_datadir}/wayland-sessions
-install -m0644 %{SOURCE2} 
%{buildroot}/%{_datadir}/wayland-sessions/sle-classic.desktop
-# Install SLE theme
-#Install [email protected] extension
 tar -xzvf %{SOURCE6}
-install -d %{buildroot}%{_datadir}/gnome-shell/extensions/[email protected]
-cp [email protected]/*  
%{buildroot}%{_datadir}/gnome-shell/extensions/[email protected]
+install -d %{buildroot}/%{_datadir}/gnome-shell/extensions/[email protected]
+cp [email protected]/*  
%{buildroot}/%{_datadir}/gnome-shell/extensions/[email protected]
+install -m0644 %{SOURCE7} 
%{buildroot}/%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.sle-classic.gschema.override
 %if !0%{?is_opensuse}
 install -m0644 %{SOURCE4} 
%{buildroot}/%{_datadir}/xsessions/sle-classic-xorg.desktop
 tar -xzvf %{SOURCE3}
@@ -147,6 +150,7 @@
 touch %{buildroot}%{_sysconfdir}/alternatives/default-xsession.desktop
 ln -s %{_sysconfdir}/alternatives/default-xsession.desktop 
%{buildroot}%{_datadir}/xsessions/default.desktop
 touch %{buildroot}%{_sysconfdir}/alternatives/default-waylandsession.desktop
+install -d -m755 %{buildroot}%{_datadir}/wayland-sessions
 ln -s %{_sysconfdir}/alternatives/default-waylandsession.desktop 
%{buildroot}%{_datadir}/wayland-sessions/default.desktop
 %endif
 
@@ -154,14 +158,10 @@
 %post -n gnome-shell-classic
 %{_sbindir}/update-alternatives --install 
%{_datadir}/xsessions/default.desktop \
   default-xsession.desktop %{_datadir}/xsessions/sle-classic.desktop 20
-%{_sbindir}/update-alternatives --install 
%{_datadir}/wayland-sessions/default.desktop \
-  default-waylandsession.desktop 
%{_datadir}/wayland-sessions/sle-classic.desktop 20
 
 %postun -n gnome-shell-classic
 [ -f %{_datadir}/xsessions/sle-classic.desktop ] || 
%{_sbindir}/update-alternatives \
   --remove default-xsession.desktop %{_datadir}/xsessions/sle-classic.desktop
-[ -f %{_datadir}/wayland-sessions/sle-classic.desktop ] || 
%{_sbindir}/update-alternatives \
-  --remove default-waylandsession.desktop 
%{_datadir}/wayland-sessions/sle-classic.desktop
 %endif
 
 %files common
@@ -170,12 +170,13 @@
 
 %files -n gnome-shell-classic
 
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.auto-move-windows.gschema.xml
-%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.classic-overrides.gschema.xml
+%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.classic.gschema.override
 %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.example.gschema.xml
 
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml
 
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
 %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.user-theme.gschema.xml
 %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml
+%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.sle-classic.gschema.override
 %{_datadir}/gnome-session/sessions/gnome-classic.session
 %dir %{_datadir}/gnome-shell/extensions
 
%{_datadir}/gnome-shell/extensions/[email protected]/
@@ -200,9 +201,8 @@
 
%{_datadir}/gnome-shell/extensions/[email protected]/sle-classic.css
 %{_datadir}/gnome-shell/modes/sle-classic.json
 %{_datadir}/gnome-shell/extensions/[email protected]/
-%dir %{_datadir}/wayland-sessions
-%{_datadir}/wayland-sessions/sle-classic.desktop
 %if !0%{?is_opensuse}
+%dir %{_datadir}/wayland-sessions
 %{_datadir}/gnome-shell/theme/sle-background.png
 %{_datadir}/xsessions/default.desktop
 %{_datadir}/xsessions/sle-classic-xorg.desktop

++++++ 00_org.gnome.shell.extensions.sle-classic.gschema.override ++++++
[org.gnome.mutter:sle-Classic]
dynamic-workspaces=false

[org.gnome.desktop.wm.preferences:sle-Classic]
button-layout='appmenu:minimize,maximize,close'

[org.gnome.desktop.wm.keybindings:sle-Classic]
switch-applications=[]
switch-windows=['<Super>Tab','<Alt>Tab']

[org.gnome.settings-daemon.plugins.xsettings:sle-Classic]
overrides={'Gtk/ShellShowsAppMenu': <0>}
++++++ gnome-shell-extensions-3.28.1+20180413.6746061.tar.xz -> 
gnome-shell-extensions-3.30.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/.gitlab-ci.yml 
new/gnome-shell-extensions-3.30.1/.gitlab-ci.yml
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/.gitlab-ci.yml   
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/.gitlab-ci.yml    1970-01-01 
01:00:00.000000000 +0100
@@ -1,13 +0,0 @@
-image: fedora:latest
-
-stages:
- - build
-
-before_script:
-  - dnf install -y meson gettext mozjs52-devel
-
-build-shell-extensions:
-  stage: build
-  script:
-    - meson _build .
-    - ninja -C _build test install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/.gitmodules 
new/gnome-shell-extensions-3.30.1/.gitmodules
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/.gitmodules      
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/.gitmodules       1970-01-01 
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-[submodule "data/gnome-shell-sass"]
-       path = data/gnome-shell-sass
-       url = https://git.gnome.org/browse/gnome-shell-sass/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-shell-extensions-3.28.1+20180413.6746061/NEWS 
new/gnome-shell-extensions-3.30.1/NEWS
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/NEWS     2018-04-13 
20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/NEWS      2018-10-08 22:55:19.000000000 
+0200
@@ -1,3 +1,44 @@
+3.30.1
+======
+* apps-menu: Fix height on HiDPI systems [Florian; #102]
+* window-list: Only switch between windows on active workspace when scrolling
+  [Florian; #78]
+
+Contributors:
+  Florian Müllner
+
+3.30.0
+======
+* Bump version
+
+3.29.91
+=======
+* Misc. bug fixes [Florian; #90]
+
+Contributors:
+  Florian Müllner
+
+3.29.90
+=======
+* Misc. bug fixes [Florian; #786496]
+
+Contributors:
+  Florian Müllner
+
+3.29.3
+======
+* Adjust to global.screen removal [Jonas; #759538]
+
+Contributors:
+  Jonas Ådahl, Florian Müllner
+
+3.29.2
+======
+* Misc. bug fixes [Florian; #69]
+
+Contributors:
+  Florian Müllner
+
 3.28.1
 ======
 * Misc. bug fixes [Xiaoguang, Florian; #59, #62]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/00_org.gnome.shell.extensions.classic.gschema.override
 
new/gnome-shell-extensions-3.30.1/data/00_org.gnome.shell.extensions.classic.gschema.override
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/00_org.gnome.shell.extensions.classic.gschema.override
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/gnome-shell-extensions-3.30.1/data/00_org.gnome.shell.extensions.classic.gschema.override
       2018-10-08 22:55:19.000000000 +0200
@@ -0,0 +1,9 @@
+[org.gnome.mutter:GNOME-Classic]
+dynamic-workspaces=false
+
+[org.gnome.desktop.wm.preferences:GNOME-Classic]
+button-layout='appmenu:minimize,maximize,close'
+
+[org.gnome.desktop.wm.keybindings:GNOME-Classic]
+switch-applications=[]
+switch-windows=['<Super>Tab','<Alt>Tab']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/HACKING
 new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/HACKING
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/HACKING
    2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/HACKING     
1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
---- Generating the css file ---
-
-You need sass to generate the css file.
-
-To generate them run from a command line in the project directory:
-sass --sourcemap=none --update ./
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/README 
new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/README
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/README 
    2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/README      
1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-GNOME Shell Sass is a project intended to allow the sharing of the theme 
sources in sass between gnome-shell and other projects like 
gnome-shell-extensions.
-
-License
-=======
-GNOME Shell Sass is distributed under the terms of the GNU General Public 
License,
-version 2 or later. See the COPYING file for details.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/README.md
 new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/README.md
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/README.md
  1970-01-01 01:00:00.000000000 +0100
+++ new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/README.md   
2018-10-08 22:55:23.000000000 +0200
@@ -0,0 +1,16 @@
+# GNOME Shell Sass
+GNOME Shell Sass is a project intended to allow the sharing of the
+theme sources in sass between gnome-shell and other projects like
+gnome-shell-extensions.
+
+Any changes should be done in the [GNOME Shell subtree][shell-subtree]
+and not the stand-alone [gnome-shell-sass repository][sass-repo]. They
+will then be synchronized periodically before releases.
+
+## License
+GNOME Shell Sass is distributed under the terms of the GNU General Public
+License, version 2 or later. See the [COPYING][license] file for details.
+
+[shell-subtree]: 
https://gitlab.gnome.org/GNOME/gnome-shell/tree/master/data/theme/gnome-shell-sass
+[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
+[license]: COPYING
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/_common.scss
 new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/_common.scss
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/_common.scss
       2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/_common.scss        
2018-10-08 22:55:23.000000000 +0200
@@ -48,17 +48,18 @@
   padding: 4px 32px;
   @include button(normal);
   &:focus { @include button(focus); }
+  &:hover { @include button(hover); }
   &:insensitive { @include button(insensitive); }
   &:active { @include button(active); }
-
 }
 
 .modal-dialog-linked-button {
   border-right-width: 1px;
   @include button(normal);
   &:insensitive { @include button(insensitive); }
-  &:active { @include button(active); }
   &:focus { @include button(focus); }
+  &:hover { @include button(hover); }
+  &:active { @include button(active); }
   padding: 12px;
 
   &:first-child {
@@ -128,12 +129,15 @@
 
 .slider {
   height: 1em;
-  -slider-height: 0.3em;
-  -slider-background-color: $insensitive_bg_color; //background of the trough
-  -slider-border-color: $borders_color; //trough border color
-  -slider-active-background-color: $selected_bg_color; //active trough fill
-  -slider-active-border-color: darken($selected_bg_color,10%); //active trough 
border
-  -slider-border-width: 1px;
+  -barlevel-height: 0.3em;
+  -barlevel-background-color: $insensitive_bg_color; //background of the trough
+  -barlevel-border-color: $borders_color; //trough border color
+  -barlevel-active-background-color: $selected_bg_color; //active trough fill
+  -barlevel-active-border-color: darken($selected_bg_color,10%); //active 
trough border
+  -barlevel-overdrive-color: $destructive_color;
+  -barlevel-overdrive-border-color: darken($destructive_color,10%);
+  -barlevel-overdrive-separator-width: 0.2em;
+  -barlevel-border-width: 1px;
   -slider-handle-radius: 6px;
 }
 
@@ -585,13 +589,11 @@
   .osd-monitor-label { font-size: 3em; }
   .level {
     height: 0.6em;
-    border-radius: 0.3em;
-    background-color: transparentize(darken($osd_bg_color,15%),0.5);
-    color: $osd_fg_color;
-  }
-  .level-bar {
-    background-color: $osd_fg_color;
-    border-radius: 0.3em;
+    -barlevel-height: 0.6em;
+    -barlevel-background-color: transparentize(darken($osd_bg_color,15%),0.5);
+    -barlevel-active-background-color: $osd_fg_color;
+    -barlevel-overdrive-color: $destructive_color;
+    -barlevel-overdrive-separator-width: 0.2em;
   }
 }
 
@@ -687,7 +689,6 @@
     height: 50px;
     background-color: $selected_bg_color;
     color: $selected_fg_color;
-    //background-image: 
url("resource:///org/gnome/shell/theme/ws-switch-arrow-up.png");
     background-size: 32px;
     border-radius: 8px;
   }
@@ -733,6 +734,7 @@
   transition-duration: 500ms;
   font-weight: bold;
   height: 1.86em;
+  font-feature-settings: "tnum";
 
   &.unlock-screen,
   &.login-screen,
@@ -824,6 +826,8 @@
 
   .screencast-indicator { color: $warning_color; }
 
+  .remote-access-indicator { color: $warning_color; }
+
   &.solid {
     background-color: black;
     /* transition from transparent to solid */
@@ -958,6 +962,7 @@
       padding: 0.1em;
       margin: 2px;
       border-radius: 1.4em;
+      font-feature-settings: "tnum";
       &:hover,&:focus { background-color: lighten($bg_color,5%); }
       &:active,&:selected {
         color: lighten($selected_fg_color,5%);
@@ -1111,7 +1116,7 @@
   .aggregate-menu {
     min-width: 21em;
     .popup-menu-icon { padding: 0 4px; }
-    .popup-sub-menu .popup-menu-item :first-child {
+    .popup-sub-menu .popup-menu-item > :first-child {
       &:ltr { /* 12px spacing + 2*4px padding */
               padding-left: 20px; margin-left: 1.09em; }
       &:rtl { /* 12px spacing + 2*4px padding */
@@ -1120,6 +1125,7 @@
   }
 
   .system-menu-action {
+    -st-icon-style: symbolic;
     color: $fg_color;
     border-radius: 32px; /* wish we could do 50% */
     padding: 13px;
@@ -1788,20 +1794,19 @@
   .login-dialog-user-list-view { -st-vfade-offset: 1em; }
   .login-dialog-user-list {
     spacing: 12px;
-    padding: .2em;
     width: 23em;
     &:expanded .login-dialog-user-list-item:selected { background-color: 
$selected_bg_color; color: $selected_fg_color; }
     &:expanded .login-dialog-user-list-item:logged-in { border-right: 2px 
solid $selected_bg_color; }
   }
   .login-dialog-user-list-item {
     border-radius: 5px;
-    padding: .2em;
+    padding: 6px;
     color: darken($osd_fg_color,30%);
-    &:ltr { padding-right: 1em; }
-    &:rtl { padding-left: 1em; }
+    &:ltr .user-widget { padding-right: 1em; }
+    &:rtl .user-widget { padding-left: 1em; }
     .login-dialog-timed-login-indicator {
       height: 2px;
-      margin: 2px 0 0 0;
+      margin-top: 6px;
       background-color: $osd_fg_color;
     }
     &:focus .login-dialog-timed-login-indicator { background-color: 
$selected_fg_color; }
@@ -1816,8 +1821,8 @@
     padding-left: 15px;
   }
     .user-widget-label {
-      &:ltr { padding-left: 18px; }
-      &:rtl { padding-right: 18px; }
+      &:ltr { padding-left: 14px; }
+      &:rtl { padding-right: 14px; }
     }
 
   .login-dialog-prompt-layout {
@@ -1868,6 +1873,7 @@
 .screen-shield-clock-time {
   font-size: 72pt;
   text-shadow: 0px 2px 2px rgba(0,0,0,0.4);
+  font-feature-settings: "tnum";
 }
 
 .screen-shield-clock-date { 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/_drawing.scss
 new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/_drawing.scss
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-shell-sass/_drawing.scss
      2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/data/gnome-shell-sass/_drawing.scss       
2018-10-08 22:55:23.000000000 +0200
@@ -150,8 +150,8 @@
   //
   // focused button
   //
-    $_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
-                          $osd_bg_color);
+    $_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
+                          lighten($osd_bg_color,3%));
 
     color: $osd_fg_color;
     text-shadow: 0 1px black;
@@ -164,7 +164,7 @@
   // active osd button
   //
     $_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
-                            lighten($osd_bg_color,10%));
+                            lighten($osd_bg_color,3%));
 
     color: white;
     border-color: $osd_borders_color;
@@ -182,7 +182,7 @@
 
     color: white;
     border-color: $osd_borders_color;
-    background-color: darken($_bg,5%);
+    background-color: $selected_bg_color;
     // This should be none, but it's creating some issues with borders, so to
     // workaround it for now, use inset wich goes through a different code 
path.
     // see https://bugzilla.gnome.org/show_bug.cgi?id=752934
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/meson.build 
new/gnome-shell-extensions-3.30.1/data/meson.build
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/data/meson.build 
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/data/meson.build  2018-10-08 
22:55:19.000000000 +0200
@@ -59,5 +59,5 @@
 
 install_data(theme_data, install_dir: themedir)
 
-classic_schema = 'org.gnome.shell.extensions.classic-overrides.gschema.xml'
-install_data(classic_schema, install_dir: schemadir)
+classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
+install_data(classic_override, install_dir: schemadir)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/org.gnome.shell.extensions.classic-overrides.gschema.xml
 
new/gnome-shell-extensions-3.30.1/data/org.gnome.shell.extensions.classic-overrides.gschema.xml
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/data/org.gnome.shell.extensions.classic-overrides.gschema.xml
    2018-04-13 20:30:56.000000000 +0200
+++ 
new/gnome-shell-extensions-3.30.1/data/org.gnome.shell.extensions.classic-overrides.gschema.xml
     1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-<schemalist>
-  <schema id="org.gnome.shell.extensions.classic-overrides"
-          path="/org/gnome/shell/extensions/classic-overrides/"
-         gettext-domain="gnome-shell-extensions">
-    <key name="attach-modal-dialogs" type="b">
-      <default>true</default>
-      <summary>Attach modal dialog to the parent window</summary>
-      <description>
-        This key overrides the key in org.gnome.mutter when running
-        GNOME Shell.
-      </description>
-    </key>
-
-    <key name="button-layout" type="s">
-      <default>"appmenu:minimize,maximize,close"</default>
-      <summary>Arrangement of buttons on the titlebar</summary>
-      <description>
-        This key overrides the key in org.gnome.desktop.wm.preferences when 
running GNOME Shell.
-      </description>
-    </key>
-
-    <key name="edge-tiling" type="b">
-      <default>true</default>
-      <summary>Enable edge tiling when dropping windows on screen 
edges</summary>
-      <description>
-        This key overrides the key in org.gnome.mutter when running GNOME 
Shell.
-      </description>
-    </key>
-
-    <key name="workspaces-only-on-primary" type="b">
-      <default>true</default>
-      <summary>Workspaces only on primary monitor</summary>
-      <description>
-        This key overrides the key in org.gnome.mutter when running GNOME 
Shell.
-      </description>
-    </key>
-
-    <key name="focus-change-on-pointer-rest" type="b">
-      <default>true</default>
-      <summary>Delay focus changes in mouse mode until the pointer stops 
moving</summary>
-      <description>
-        This key overrides the key in org.gnome.mutter when running GNOME 
Shell.
-      </description>
-    </key>
-  </schema>
-</schemalist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/export-zips.sh 
new/gnome-shell-extensions-3.30.1/export-zips.sh
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/export-zips.sh   
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/export-zips.sh    2018-10-08 
22:55:19.000000000 +0200
@@ -22,6 +22,7 @@
   schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
 
   cp $srcdir/NEWS $srcdir/COPYING $f
+  cp -r $localedir $f
 
   if [ -f $schema ]; then
     mkdir $f/schemas
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/alternate-tab/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/alternate-tab/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/alternate-tab/extension.js
    2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/alternate-tab/extension.js     
2018-10-08 22:55:19.000000000 +0200
@@ -31,7 +31,7 @@
         return injections['_keyPressHandler'].call(this, keysym, action);
     };
 
-    Main.wm._forcedWindowSwitcher = function(display, screen, window, binding) 
{
+    Main.wm._forcedWindowSwitcher = function(display, window, binding) {
         /* prevent a corner case where both popups show up at once */
         if (this._workspaceSwitcherPopup != null)
             this._workspaceSwitcherPopup.destroy();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/apps-menu/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/apps-menu/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/apps-menu/extension.js
        2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/apps-menu/extension.js 
2018-10-08 22:55:19.000000000 +0200
@@ -685,7 +685,10 @@
         //Load applications
         this._displayButtons(this._listApplications(null));
 
-        let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px';
+        let themeContext = St.ThemeContext.get_for_stage(global.stage);
+        let scaleFactor = themeContext.scale_factor;
+        let categoriesHeight = this.categoriesBox.height / scaleFactor;
+        let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET + 'px';
         this.mainBox.style+=('height: ' + height);
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/auto-move-windows/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/auto-move-windows/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/auto-move-windows/extension.js
        2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/auto-move-windows/extension.js 
2018-10-08 22:55:19.000000000 +0200
@@ -79,9 +79,10 @@
             return;
 
         // ensure we have the required number of workspaces
-        for (let i = global.screen.n_workspaces; i <= workspaceNum; i++) {
+        let workspaceManager = global.workspace_manager;
+        for (let i = workspaceManager.n_workspaces; i <= workspaceNum; i++) {
             window.change_workspace_by_index(i - 1, false);
-            global.screen.append_new_workspace(false, 0);
+            workspaceManager.append_new_workspace(false, 0);
         }
 
         window.change_workspace_by_index(workspaceNum, false);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/drive-menu/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/drive-menu/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/drive-menu/extension.js
       2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/drive-menu/extension.js        
2018-10-08 22:55:19.000000000 +0200
@@ -175,11 +175,11 @@
     }
 
     destroy() {
-        if (this._connectedId) {
-            this._monitor.disconnect(this._connectedId);
-            this._monitor.disconnect(this._disconnectedId);
-            this._connectedId = 0;
-            this._disconnectedId = 0;
+        if (this._addedId) {
+            this._monitor.disconnect(this._addedId);
+            this._monitor.disconnect(this._removedId);
+            this._addedId = 0;
+            this._removedId = 0;
         }
 
         super.destroy();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/places-menu/placeDisplay.js
 new/gnome-shell-extensions-3.30.1/extensions/places-menu/placeDisplay.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/places-menu/placeDisplay.js
   2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/places-menu/placeDisplay.js    
2018-10-08 22:55:19.000000000 +0200
@@ -50,33 +50,35 @@
         return (_ignored, result) => {
             try {
                 Gio.AppInfo.launch_default_for_uri_finish(result);
-            } catch(e if e.matches(Gio.IOErrorEnum, 
Gio.IOErrorEnum.NOT_MOUNTED)) {
-                let source = {
-                    get_icon: () => { return this.icon; }
-                };
-                let op = new ShellMountOperation.ShellMountOperation(source);
-                this.file.mount_enclosing_volume(0, op.mountOp, null, (file, 
result) => {
-                    try {
-                        op.close();
-                        file.mount_enclosing_volume_finish(result);
-                    } catch(e if e.matches(Gio.IOErrorEnum, 
Gio.IOErrorEnum.FAILED_HANDLED)) {
-                        // e.g. user canceled the password dialog
-                        return;
-                    } catch(e) {
-                        Main.notifyError(_("Failed to mount volume for 
“%s”").format(this.name), e.message);
-                        return;
-                    }
-
-                    if (tryMount) {
-                        let callback = 
this._createLaunchCallback(launchContext, false);
-                        
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
-                                                                 launchContext,
-                                                                 null,
-                                                                 callback);
-                    }
-                });
             } catch(e) {
-                Main.notifyError(_("Failed to launch “%s”").format(this.name), 
e.message);
+                if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
+                    let source = {
+                        get_icon: () => { return this.icon; }
+                    };
+                    let op = new 
ShellMountOperation.ShellMountOperation(source);
+                    this.file.mount_enclosing_volume(0, op.mountOp, null, 
(file, result) => {
+                        try {
+                            op.close();
+                            file.mount_enclosing_volume_finish(result);
+                        } catch(e) {
+                            if (e.matches(Gio.IOErrorEnum, 
Gio.IOErrorEnum.FAILED_HANDLED))
+                                // e.g. user canceled the password dialog
+                                return;
+                            Main.notifyError(_("Failed to mount volume for 
“%s”").format(this.name), e.message);
+                            return;
+                        }
+
+                        if (tryMount) {
+                            let callback = 
this._createLaunchCallback(launchContext, false);
+                            
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
+                                                                     
launchContext,
+                                                                     null,
+                                                                     callback);
+                        }
+                    });
+                } else {
+                    Main.notifyError(_("Failed to launch 
“%s”").format(this.name), e.message);
+                }
             }
         }
     }
@@ -97,8 +99,10 @@
                                            let info = 
file.query_info_finish(result);
                                            this.icon = 
info.get_symbolic_icon();
                                            this.emit('changed');
-                                       } catch(e if e instanceof 
Gio.IOErrorEnum) {
-                                           return;
+                                       } catch(e) {
+                                           if (e instanceof Gio.IOErrorEnum)
+                                               return;
+                                           throw e;
                                        }
                                    });
 
@@ -123,8 +127,10 @@
         try {
             let info = this.file.query_info('standard::display-name', 0, null);
             return info.get_display_name();
-        } catch(e if e instanceof Gio.IOErrorEnum) {
-            return this.file.get_basename();
+        } catch(e) {
+            if (e instanceof Gio.IOErrorEnum)
+                return this.file.get_basename();
+            throw e;
         }
     }
 };
@@ -349,8 +355,10 @@
             let file = Gio.File.new_for_path(specialPath), info;
             try {
                 info = new PlaceInfo('special', file);
-            } catch(e if e.matches(Gio.IOErrorEnum, 
Gio.IOErrorEnum.NOT_FOUND)) {
-                continue;
+            } catch(e) {
+                if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
+                    continue;
+                throw e;
             }
 
             specials.push(info);
@@ -514,8 +522,10 @@
 
         try {
             devItem = new PlaceDeviceInfo(kind, mount);
-        } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
-            return;
+        } catch(e) {
+            if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
+                return;
+            throw e;
         }
 
         this._places[kind].push(devItem);
@@ -526,8 +536,10 @@
 
         try {
             volItem = new PlaceVolumeInfo(kind, volume);
-        } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
-            return;
+        } catch(e) {
+            if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
+                return;
+            throw e;
         }
 
         this._places[kind].push(volItem);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/screenshot-window-sizer/extension.js
 
new/gnome-shell-extensions-3.30.1/extensions/screenshot-window-sizer/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/screenshot-window-sizer/extension.js
  2018-04-13 20:30:56.000000000 +0200
+++ 
new/gnome-shell-extensions-3.30.1/extensions/screenshot-window-sizer/extension.js
   2018-10-08 22:55:19.000000000 +0200
@@ -69,7 +69,7 @@
     [1600, 900]
 ];
 
-function cycleScreenshotSizes(display, screen, window, binding) {
+function cycleScreenshotSizes(display, window, binding) {
     // Probably this isn't useful with 5 sizes, but you can decrease instead
     // of increase by holding down shift.
     let modifiers = binding.get_modifiers();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/window-list/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/extension.js
      2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/window-list/extension.js       
2018-10-08 22:55:19.000000000 +0200
@@ -238,10 +238,10 @@
 
         if (this._perMonitor) {
             this._windowEnteredMonitorId =
-                global.screen.connect('window-entered-monitor',
+                global.display.connect('window-entered-monitor',
                     this._windowEnteredOrLeftMonitor.bind(this));
             this._windowLeftMonitorId =
-                global.screen.connect('window-left-monitor',
+                global.display.connect('window-left-monitor',
                     this._windowEnteredOrLeftMonitor.bind(this));
         }
     }
@@ -282,12 +282,12 @@
             this.actor.remove_style_class_name('focused');
     }
 
-    _windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) {
+    _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
         throw new Error('Not implemented');
     }
 
     _isWindowVisible(window) {
-        let workspace = global.screen.get_active_workspace();
+        let workspace = global.workspace_manager.get_active_workspace();
 
         return !window.skip_taskbar &&
                window.located_on_workspace(workspace) &&
@@ -315,11 +315,11 @@
         global.window_manager.disconnect(this._switchWorkspaceId);
 
         if (this._windowEnteredMonitorId)
-            global.screen.disconnect(this._windowEnteredMonitorId);
+            global.display.disconnect(this._windowEnteredMonitorId);
         this._windowEnteredMonitorId = 0;
 
         if (this._windowLeftMonitorId)
-            global.screen.disconnect(this._windowLeftMonitorId);
+            global.display.disconnect(this._windowLeftMonitorId);
         this._windowLeftMonitorId = 0;
     }
 };
@@ -377,7 +377,7 @@
             this.actor.remove_style_class_name('minimized');
     }
 
-    _windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) {
+    _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
         if (monitorIndex == this._monitorIndex && metaWindow == 
this.metaWindow)
             this._updateVisibility();
     }
@@ -518,7 +518,7 @@
         this._updateStyle();
     }
 
-    _windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) {
+    _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
         if (this._windowTracker.get_window_app(metaWindow) == this.app &&
             monitorIndex == this._monitorIndex) {
             this._updateVisibility();
@@ -529,7 +529,7 @@
     _updateVisibility() {
         if (!this._perMonitor) {
             // fast path: use ShellApp API to avoid iterating over all windows.
-            let workspace = global.screen.get_active_workspace();
+            let workspace = global.workspace_manager.get_active_workspace();
             this.actor.visible = this.app.is_on_workspace(workspace);
         } else {
             this.actor.visible = this.getWindowList().length >= 1;
@@ -652,7 +652,9 @@
                                         x_expand: true, y_expand: true });
         this.actor.add_actor(container);
 
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        let workspaceManager = global.workspace_manager;
+
+        this._currentWorkspace = 
workspaceManager.get_active_workspace().index();
         this.statusLabel = new St.Label({ text: this._getStatusText(),
                                           x_align: Clutter.ActorAlign.CENTER,
                                           y_align: Clutter.ActorAlign.CENTER 
});
@@ -660,11 +662,11 @@
 
         this.workspacesItems = [];
 
-        this._screenSignals = [];
-        this._screenSignals.push(global.screen.connect('notify::n-workspaces',
-                                                       
this._updateMenu.bind(this)));
-        
this._screenSignals.push(global.screen.connect_after('workspace-switched',
-                                                             
this._updateIndicator.bind(this)));
+        this._workspaceManagerSignals = [];
+        
this._workspaceManagerSignals.push(workspaceManager.connect('notify::n-workspaces',
+                                                                    
this._updateMenu.bind(this)));
+        
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-switched',
+                                                                          
this._updateIndicator.bind(this)));
 
         this.actor.connect('scroll-event', this._onScrollEvent.bind(this));
         this._updateMenu();
@@ -676,8 +678,8 @@
     }
 
     destroy() {
-        for (let i = 0; i < this._screenSignals.length; i++)
-            global.screen.disconnect(this._screenSignals[i]);
+        for (let i = 0; i < this._workspaceManagerSignals.length; i++)
+            
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
 
         if (this._settingsChangedId) {
             this._settings.disconnect(this._settingsChangedId);
@@ -689,25 +691,28 @@
 
     _updateIndicator() {
         
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        this._currentWorkspace = 
global.workspace_manager.get_active_workspace().index();
         
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
 
         this.statusLabel.set_text(this._getStatusText());
     }
 
     _getStatusText() {
-        let current = global.screen.get_active_workspace().index();
-        let total = global.screen.n_workspaces;
+        let workspaceManager = global.workspace_manager;
+        let current = workspaceManager.get_active_workspace().index();
+        let total = workspaceManager.n_workspaces;
 
         return '%d / %d'.format(current + 1, total);
     }
 
     _updateMenu() {
+        let workspaceManager = global.workspace_manager;
+
         this.menu.removeAll();
         this.workspacesItems = [];
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        this._currentWorkspace = 
workspaceManager.get_active_workspace().index();
 
-        for(let i = 0; i < global.screen.n_workspaces; i++) {
+        for(let i = 0; i < workspaceManager.n_workspaces; i++) {
             let name = Meta.prefs_get_workspace_name(i);
             let item = new PopupMenu.PopupMenuItem(name);
             item.workspaceId = i;
@@ -727,8 +732,10 @@
     }
 
     _activate(index) {
-        if(index >= 0 && index < global.screen.n_workspaces) {
-            let metaWorkspace = global.screen.get_workspace_by_index(index);
+        let workspaceManager = global.workspace_manager;
+
+        if(index >= 0 && index < workspaceManager.n_workspaces) {
+            let metaWorkspace = workspaceManager.get_workspace_by_index(index);
             metaWorkspace.activate(global.get_current_time());
         }
     }
@@ -792,14 +799,12 @@
         indicatorsBox.add(this._workspaceIndicator.container, { expand: false, 
y_fill: true });
 
         this._mutterSettings = new Gio.Settings({ schema_id: 
'org.gnome.mutter' });
-        this._workspaceSettings = this._getWorkspaceSettings();
         this._workspacesOnlyOnPrimaryChangedId =
-            
this._workspaceSettings.connect('changed::workspaces-only-on-primary',
-                                            
this._updateWorkspaceIndicatorVisibility.bind(this));
-        this._dynamicWorkspacesSettings = this._getDynamicWorkspacesSettings();
+            this._mutterSettings.connect('changed::workspaces-only-on-primary',
+                                         
this._updateWorkspaceIndicatorVisibility.bind(this));
         this._dynamicWorkspacesChangedId =
-            
this._dynamicWorkspacesSettings.connect('changed::dynamic-workspaces',
-                                                    
this._updateWorkspaceIndicatorVisibility.bind(this));
+            this._mutterSettings.connect('changed::dynamic-workspaces',
+                                         
this._updateWorkspaceIndicatorVisibility.bind(this));
         this._updateWorkspaceIndicatorVisibility();
 
         this._menuManager = new PopupMenu.PopupMenuManager(this);
@@ -833,10 +838,12 @@
                     this._updateKeyboardAnchor();
                 });
 
+        let workspaceManager = global.workspace_manager;
+
         this._workspaceSignals = new Map();
         this._nWorkspacesChangedId =
-            global.screen.connect('notify::n-workspaces',
-                                  this._onWorkspacesChanged.bind(this));
+            workspaceManager.connect('notify::n-workspaces',
+                                     this._onWorkspacesChanged.bind(this));
         this._onWorkspacesChanged();
 
         this._switchWorkspaceId =
@@ -856,7 +863,7 @@
             });
 
         this._fullscreenChangedId =
-            global.screen.connect('in-fullscreen-changed', () => {
+            global.display.connect('in-fullscreen-changed', () => {
                 this._updateKeyboardAnchor();
             });
 
@@ -881,19 +888,6 @@
         this._groupingModeChanged();
     }
 
-    _getDynamicWorkspacesSettings() {
-        if (this._workspaceSettings.list_keys().includes('dynamic-workspaces'))
-            return this._workspaceSettings;
-        return this._mutterSettings;
-    }
-
-    _getWorkspaceSettings() {
-        let settings = global.get_overrides_settings() || this._mutterSettings;
-        if (settings.list_keys().includes('workspaces-only-on-primary'))
-            return settings;
-        return this._mutterSettings;
-    }
-
     _onScrollEvent(actor, event) {
         let direction = event.get_scroll_direction();
         let diff = 0;
@@ -904,17 +898,12 @@
         else
             return;
 
-        let children = this._windowList.get_children().map(a => a._delegate);
-        let active = 0;
-        for (let i = 0; i < children.length; i++) {
-            if (children[i].active) {
-                active = i;
-                break;
-            }
-        }
-
-        active = Math.max(0, Math.min(active + diff, children.length-1));
-        children[active].activate();
+        let children = this._windowList.get_children()
+            .filter(c => c.visible)
+            .map(a => a._delegate);
+        let active = children.findIndex(c => c.active);
+        let newActive = Math.max(0, Math.min(active + diff, 
children.length-1));
+        children[newActive].activate();
     }
 
     _updatePosition() {
@@ -923,10 +912,11 @@
     }
 
     _updateWorkspaceIndicatorVisibility() {
-        let hasWorkspaces = 
this._dynamicWorkspacesSettings.get_boolean('dynamic-workspaces') ||
-                            global.screen.n_workspaces > 1;
+        let workspaceManager = global.workspace_manager;
+        let hasWorkspaces = 
this._mutterSettings.get_boolean('dynamic-workspaces') ||
+                            workspaceManager.n_workspaces > 1;
         let workspacesOnMonitor = this._monitor == 
Main.layoutManager.primaryMonitor ||
-                                  
!this._workspaceSettings.get_boolean('workspaces-only-on-primary');
+                                  
!this._mutterSettings.get_boolean('workspaces-only-on-primary');
 
         this._workspaceIndicator.actor.visible = hasWorkspaces && 
workspacesOnMonitor;
     }
@@ -939,7 +929,7 @@
         let [, childWidth] = children[0].get_preferred_width(-1);
         let spacing = this._windowList.layout_manager.spacing;
 
-        let workspace = global.screen.get_active_workspace();
+        let workspace = global.workspace_manager.get_active_workspace();
         let windows = global.display.get_tab_list(Meta.TabList.NORMAL, 
workspace);
         if (this._perMonitor)
             windows = windows.filter(w => w.get_monitor() == 
this._monitor.index);
@@ -1028,12 +1018,9 @@
 
     _removeApp(app) {
         let children = this._windowList.get_children();
-        for (let i = 0; i < children.length; i++) {
-            if (children[i]._delegate.app == app) {
-                children[i].destroy();
-                return;
-            }
-        }
+        let child = children.find(c => c._delegate.app == app);
+        if (child)
+            child.destroy();
     }
 
     _onWindowAdded(ws, win) {
@@ -1047,10 +1034,8 @@
             return;
 
         let children = this._windowList.get_children();
-        for (let i = 0; i < children.length; i++) {
-            if (children[i]._delegate.metaWindow == win)
-                return;
-        }
+        if (children.find(c => c._delegate.metaWindow == win))
+            return;
 
         let button = new WindowButton(win, this._perMonitor, 
this._monitor.index);
         this._windowList.layout_manager.pack(button.actor,
@@ -1070,18 +1055,17 @@
             return; // not actually removed, just moved to another workspace
 
         let children = this._windowList.get_children();
-        for (let i = 0; i < children.length; i++) {
-            if (children[i]._delegate.metaWindow == win) {
-                children[i].destroy();
-                return;
-            }
-        }
+        let child = children.find(c => c._delegate.metaWindow == win);
+        if (child)
+            child.destroy();
     }
 
     _onWorkspacesChanged() {
-        let numWorkspaces = global.screen.n_workspaces;
+        let workspaceManager = global.workspace_manager;
+        let numWorkspaces = workspaceManager.n_workspaces;
+
         for (let i = 0; i < numWorkspaces; i++) {
-            let workspace = global.screen.get_workspace_by_index(i);
+            let workspace = workspaceManager.get_workspace_by_index(i);
             if (this._workspaceSignals.has(workspace))
                 continue;
 
@@ -1099,9 +1083,11 @@
     }
 
     _disconnectWorkspaceSignals() {
-        let numWorkspaces = global.screen.n_workspaces;
+        let workspaceManager = global.workspace_manager;
+        let numWorkspaces = workspaceManager.n_workspaces;
+
         for (let i = 0; i < numWorkspaces; i++) {
-            let workspace = global.screen.get_workspace_by_index(i);
+            let workspace = workspaceManager.get_workspace_by_index(i);
             let signals = this._workspaceSignals.get(workspace);
             this._workspaceSignals.delete(workspace);
             workspace.disconnect(signals._windowAddedId);
@@ -1163,8 +1149,8 @@
     }
 
     _onDestroy() {
-        
this._workspaceSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId);
-        
this._dynamicWorkspacesSettings.disconnect(this._dynamicWorkspacesChangedId);
+        
this._mutterSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId);
+        this._mutterSettings.disconnect(this._dynamicWorkspacesChangedId);
 
         this._workspaceIndicator.destroy();
 
@@ -1179,7 +1165,7 @@
         Main.layoutManager.hideKeyboard();
 
         this._disconnectWorkspaceSignals();
-        global.screen.disconnect(this._nWorkspacesChangedId);
+        global.workspace_manager.disconnect(this._nWorkspacesChangedId);
         this._nWorkspacesChangedId = 0;
 
         global.window_manager.disconnect(this._switchWorkspaceId);
@@ -1189,7 +1175,7 @@
         Main.overview.disconnect(this._overviewShowingId);
         Main.overview.disconnect(this._overviewHidingId);
 
-        global.screen.disconnect(this._fullscreenChangedId);
+        global.display.disconnect(this._fullscreenChangedId);
 
         Main.xdndHandler.disconnect(this._dragBeginId);
         Main.xdndHandler.disconnect(this._dragEndId);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/windowsNavigator/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/windowsNavigator/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/windowsNavigator/extension.js
 2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/extensions/windowsNavigator/extension.js  
2018-10-08 22:55:19.000000000 +0200
@@ -135,14 +135,16 @@
         if(Main.overview.viewSelector._activePage != 
Main.overview.viewSelector._workspacesPage)
             return false;
 
+        let workspaceManager = global.workspace_manager;
+
         if ((o.get_key_symbol() == Clutter.KEY_Alt_L ||
              o.get_key_symbol() == Clutter.KEY_Alt_R)
             && !this._pickWorkspace) {
             this._prevFocusActor = global.stage.get_key_focus();
             global.stage.set_key_focus(null);
-            this._active = global.screen.get_active_workspace_index();
+            this._active = workspaceManager.get_active_workspace_index();
             this._pickWindow = true;
-            
this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips();
+            
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
             return true;
         }
         if ((o.get_key_symbol() == Clutter.KEY_Control_L ||
@@ -166,7 +168,7 @@
             return true;
 
         if (this._pickWindow) {
-            if (this._active != global.screen.get_active_workspace_index()) {
+            if (this._active != workspaceManager.get_active_workspace_index()) 
{
                 this._hideTooltips();
                 return false;
             }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/workspace-indicator/extension.js
 new/gnome-shell-extensions-3.30.1/extensions/workspace-indicator/extension.js
--- 
old/gnome-shell-extensions-3.28.1+20180413.6746061/extensions/workspace-indicator/extension.js
      2018-04-13 20:30:56.000000000 +0200
+++ 
new/gnome-shell-extensions-3.30.1/extensions/workspace-indicator/extension.js   
    2018-10-08 22:55:19.000000000 +0200
@@ -25,7 +25,9 @@
     constructor() {
         super(0.0, _("Workspace Indicator"));
 
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        let workspaceManager = global.workspace_manager;
+
+        this._currentWorkspace = 
workspaceManager.get_active_workspace().index();
         this.statusLabel = new St.Label({ y_align: Clutter.ActorAlign.CENTER,
                                           text: this._labelText() });
 
@@ -35,12 +37,13 @@
         this._workspaceSection = new PopupMenu.PopupMenuSection();
         this.menu.addMenuItem(this._workspaceSection);
 
-        this._screenSignals = [];
-        
this._screenSignals.push(global.screen.connect_after('workspace-added',         
                                                     
this._createWorkspacesSection.bind(this)));
-        
this._screenSignals.push(global.screen.connect_after('workspace-removed',
-                                                             
this._createWorkspacesSection.bind(this)));
-        
this._screenSignals.push(global.screen.connect_after('workspace-switched',
-                                                             
this._updateIndicator.bind(this)));
+        this._workspaceManagerSignals = [];
+        
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-added',
+                                                                          
this._createWorkspacesSection.bind(this)));
+        
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-removed',
+                                                                          
this._createWorkspacesSection.bind(this)));
+        
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-switched',
+                                                                          
this._updateIndicator.bind(this)));
 
         this.actor.connect('scroll-event', this._onScrollEvent.bind(this));
         this._createWorkspacesSection();
@@ -55,8 +58,8 @@
     }
 
     destroy() {
-        for (let i = 0; i < this._screenSignals.length; i++)
-            global.screen.disconnect(this._screenSignals[i]);
+        for (let i = 0; i < this._workspaceManagerSignals.length; i++)
+            
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
 
         if (this._settingsChangedId) {
             this._settings.disconnect(this._settingsChangedId);
@@ -68,7 +71,7 @@
 
     _updateIndicator() {
         
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        this._currentWorkspace = 
global.workspace_manager.get_active_workspace().index();
         
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
 
         this.statusLabel.set_text(this._labelText());
@@ -83,12 +86,14 @@
     }
 
     _createWorkspacesSection() {
+        let workspaceManager = global.workspace_manager;
+
         this._workspaceSection.removeAll();
         this.workspacesItems = [];
-        this._currentWorkspace = global.screen.get_active_workspace().index();
+        this._currentWorkspace = 
workspaceManager.get_active_workspace().index();
 
         let i = 0;
-        for(; i < global.screen.n_workspaces; i++) {
+        for(; i < workspaceManager.n_workspaces; i++) {
             this.workspacesItems[i] = new 
PopupMenu.PopupMenuItem(this._labelText(i));
             this._workspaceSection.addMenuItem(this.workspacesItems[i]);
             this.workspacesItems[i].workspaceId = i;
@@ -106,8 +111,10 @@
     }
 
     _activate(index) {
-        if(index >= 0 && index <  global.screen.n_workspaces) {
-            let metaWorkspace = global.screen.get_workspace_by_index(index);
+        let workspaceManager = global.workspace_manager;
+
+        if(index >= 0 && index <  workspaceManager.n_workspaces) {
+            let metaWorkspace = workspaceManager.get_workspace_by_index(index);
             metaWorkspace.activate(global.get_current_time());
         }
     }
@@ -123,7 +130,7 @@
             return;
         }
 
-        let newIndex = global.screen.get_active_workspace().index() + diff;
+        let newIndex = global.workspace_manager.get_active_workspace().index() 
+ diff;
         this._activate(newIndex);
     }
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/meson.build 
new/gnome-shell-extensions-3.30.1/meson.build
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/meson.build      
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/meson.build       2018-10-08 
22:55:19.000000000 +0200
@@ -1,5 +1,5 @@
 project('gnome-shell-extensions',
-  version: '3.28.1',
+  version: '3.30.1',
   meson_version: '>= 0.44.0',
   license: 'GPL2+'
 )
@@ -34,7 +34,6 @@
 uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'
 
 classic_extensions = [
-  'alternate-tab',
   'apps-menu',
   'places-menu',
   'launch-new-instance',
@@ -43,6 +42,7 @@
 
 default_extensions = classic_extensions
 default_extensions += [
+  'alternate-tab',
   'drive-menu',
   'screenshot-window-sizer',
   'windowsNavigator',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-shell-extensions-3.28.1+20180413.6746061/po/POTFILES.in 
new/gnome-shell-extensions-3.30.1/po/POTFILES.in
--- old/gnome-shell-extensions-3.28.1+20180413.6746061/po/POTFILES.in   
2018-04-13 20:30:56.000000000 +0200
+++ new/gnome-shell-extensions-3.30.1/po/POTFILES.in    2018-10-08 
22:55:19.000000000 +0200
@@ -1,6 +1,5 @@
 data/gnome-classic.desktop.in
 data/gnome-classic.session.desktop.in
-data/org.gnome.shell.extensions.classic-overrides.gschema.xml
 extensions/alternate-tab/prefs.js
 extensions/apps-menu/extension.js
 extensions/auto-move-windows/extension.js

++++++ gse-sle-classic-ext.patch ++++++
--- /var/tmp/diff_new_pack.dBQvo5/_old  2018-10-17 08:23:07.514775108 +0200
+++ /var/tmp/diff_new_pack.dBQvo5/_new  2018-10-17 08:23:07.514775108 +0200
@@ -1,7 +1,7 @@
-Index: 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/classic.css
+Index: gnome-shell-extensions-3.29.90/extensions/window-list/classic.css
 ===================================================================
---- 
gnome-shell-extensions-3.28.1+20180413.6746061.orig/extensions/window-list/classic.css
-+++ 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/classic.css
+--- gnome-shell-extensions-3.29.90.orig/extensions/window-list/classic.css
++++ gnome-shell-extensions-3.29.90/extensions/window-list/classic.css
 @@ -6,7 +6,7 @@
      height: 2.25em ;
    }
@@ -43,11 +43,11 @@
      color: #888;
      box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5);
    }
-Index: 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/extension.js
+Index: gnome-shell-extensions-3.29.90/extensions/window-list/extension.js
 ===================================================================
---- 
gnome-shell-extensions-3.28.1+20180413.6746061.orig/extensions/window-list/extension.js
-+++ 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/extension.js
-@@ -27,6 +27,395 @@ const GroupingMode = {
+--- gnome-shell-extensions-3.29.90.orig/extensions/window-list/extension.js
++++ gnome-shell-extensions-3.29.90/extensions/window-list/extension.js
+@@ -27,6 +27,398 @@ const GroupingMode = {
      ALWAYS: 2
  };
  
@@ -98,11 +98,13 @@
 +        this._grouped = undefined;
 +        // NOTE: do NOT `_checkGrouping` here
 +
++        let workspaceManager = global.workspace_manager;
++
 +        // workspace related
 +        this._workspaceSignals = new Map();
 +        this._nWorkspacesChangedId =
-+            global.screen.connect('notify::n-workspaces',
-+                                  this._onWorkspacesChanged.bind(this));
++            workspaceManager.connect('notify::n-workspaces',
++                                     this._onWorkspacesChanged.bind(this));
 +        this._onWorkspacesChanged();
 +
 +        this._switchWorkspaceId =
@@ -335,9 +337,10 @@
 +    }
 +
 +    _onWorkspacesChanged() {
-+        let numWorkspaces = global.screen.n_workspaces;
++        let workspaceManager = global.workspace_manager;
++        let numWorkspaces = workspaceManager.n_workspaces;
 +        for (let i = 0; i < numWorkspaces; i++) {
-+            let workspace = global.screen.get_workspace_by_index(i);
++            let workspace = workspaceManager.get_workspace_by_index(i);
 +            if (this._workspaceSignals.has(workspace))
 +                continue;
 +
@@ -443,7 +446,7 @@
  
  function _minimizeOrActivateWindow(window) {
          let focusWindow = global.display.focus_window;
-@@ -1258,5 +1647,10 @@ class Extension {
+@@ -1257,5 +1649,10 @@ class Extension {
  };
  
  function init() {
@@ -455,10 +458,10 @@
 +        return new Extension();
 +    }
  }
-Index: 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/stylesheet.css
+Index: gnome-shell-extensions-3.29.90/extensions/window-list/stylesheet.css
 ===================================================================
---- 
gnome-shell-extensions-3.28.1+20180413.6746061.orig/extensions/window-list/stylesheet.css
-+++ 
gnome-shell-extensions-3.28.1+20180413.6746061/extensions/window-list/stylesheet.css
+--- gnome-shell-extensions-3.29.90.orig/extensions/window-list/stylesheet.css
++++ gnome-shell-extensions-3.29.90/extensions/window-list/stylesheet.css
 @@ -79,6 +79,10 @@
    border: 1px solid #cccccc;
  }
@@ -470,10 +473,10 @@
  .notification {
    font-weight: normal;
  }
-Index: gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-classic.scss
+Index: gnome-shell-extensions-3.29.90/data/gnome-classic.scss
 ===================================================================
---- gnome-shell-extensions-3.28.1+20180413.6746061.orig/data/gnome-classic.scss
-+++ gnome-shell-extensions-3.28.1+20180413.6746061/data/gnome-classic.scss
+--- gnome-shell-extensions-3.29.90.orig/data/gnome-classic.scss
++++ gnome-shell-extensions-3.29.90/data/gnome-classic.scss
 @@ -103,3 +103,15 @@ $variant: 'light';
      &:hover, &focus { background-color: darken($bg_color,2%); }
    }

++++++ sle-classic-xorg.desktop ++++++
--- /var/tmp/diff_new_pack.dBQvo5/_old  2018-10-17 08:23:07.542775085 +0200
+++ /var/tmp/diff_new_pack.dBQvo5/_new  2018-10-17 08:23:07.546775082 +0200
@@ -139,4 +139,4 @@
 TryExec=gnome-session
 Icon=
 Type=Application
-DesktopNames=sle-classic;GNOME
+DesktopNames=sle-Classic;GNOME

++++++ sle-classic.desktop ++++++
--- /var/tmp/diff_new_pack.dBQvo5/_old  2018-10-17 08:23:07.578775057 +0200
+++ /var/tmp/diff_new_pack.dBQvo5/_new  2018-10-17 08:23:07.582775053 +0200
@@ -139,4 +139,4 @@
 TryExec=gnome-session
 Icon=
 Type=Application
-DesktopNames=sle-classic;GNOME
+DesktopNames=sle-Classic;GNOME

++++++ [email protected] ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/[email protected]/extension.js 
new/[email protected]/extension.js
--- old/[email protected]/extension.js       2018-07-17 08:52:05.459169464 
+0200
+++ new/[email protected]/extension.js       2018-09-06 09:00:25.916630632 
+0200
@@ -26,18 +26,6 @@
     return Main.sessionMode.currentMode == "sle-classic" ? true : false;
 }
 
-// Simulate classic session
-// global-shell.c shell_global_get_overrides_settings
-// main.c shell_prefs_init
-function initClassicOverridesSchema() {
-    let settings = new Gio.Settings({ schema_id: CLASSIC_OVERRIDES_SCHEMA});
-    let keys = settings.settings_schema.list_keys();
-
-    for (let key in keys) {
-        Meta.prefs_override_preference_schema(keys[key], 
settings.settings_schema.get_id());
-    }
-}
-
 // panel.js: Replace the original "Panel._allocate".
 //
 // The differences are quite subtle but yet pervasive, so despite the
@@ -323,8 +311,6 @@
     if (!isSLEClassicMode())
         return;
 
-    initClassicOverridesSchema();
-
     mainPanelActorAllocateId = Main.panel.actor.connect('allocate', 
Lang.bind(Main.panel, sle_classic_allocate));
 
     Main.layoutManager._updateBoxes = _updateBoxesNew;


Reply via email to