1. 04 May, 2021 7 commits
    • verdre's avatar
      overview: Sync grabs after running startup animation · 954131c1
      verdre authored
      In the nested session the startup animation sometimes fails, weirdly
      that always happens to me when running a freshly built gnome-shell the
      first time. The reason it fails is that mutter fails to aquire a pointer
      grab from the xserver, XIGrabDevice() is unsuccessful.
      A simple workaround for this race condition in the xserver is to just
      grab the devices a bit later, that is after the startups animation
      instead of before it.
      This was also tested with disabled animations, and seems to work just as
      well in that case.
      Part-of: <!1812>
    • Sebastian Keller's avatar
      dnd: Don't use transformed size to calculate parent scale when restoring · e7780623
      Sebastian Keller authored
      Some drag actor parents might change their width to 0 after the drag
      actor has been removed. If the drag is now canceled and the drag actor
      is animated to return to the current parent position and scale, this
      scale can not be determined and falls back to 1.0. This might be wrong
      and can result in the drag actor being too large/small at the end of the
      return animation.
      To avoid this calculate the scale of the parent by recursively
      calculating the product of its parents individual scales.
      Fixes #4017
      Part-of: <!1790>
    • verdre's avatar
      overview: Increase margin-top of the dash slightly · bad94ab3
      verdre authored
      Now that we made window previews overlap the edges of the wallpaper
      underneath them, the app icons of those windows are getting quite close
      to the dash and there is almost no more spacing.
      Let's make it look a little bit better and slightly increase the
      margin-top of the dash so that the workspaces move a few more pixels
      away from the dash.
      Part-of: <!1813>
    • verdre's avatar
      workspace: Extend clip when animating from window picker to app grid · 4e83aaf8
      verdre authored
      We want to clip the Workspace actor in the appGrid state of the overview
      in order to make sure windows that overflow the monitor don't spill out.
      So far we had commit b1970b95 for that.
      Now since the last commit, window previews always slightly overflow the
      allocation with their icons. That means a part of the window icon gets
      clipped away as soon as the transition to the appGrid starts, which
      looks weird.
      Fix that bug in the transition by slightly extending the clip downwards
      when animating between the window picker and the app grid state. The
      extra height we extend the clip by is controlled by the overviewState,
      which means we extend the clip by the full icon overlap in the window
      picker state, but don't extend the clip at all when in the app grid
      Part-of: <!1813>
    • verdre's avatar
      workspace: Make window preview overlays overflow the allocation · fcc80407
      verdre authored
      We want to use as much space as possible for showing window previews in
      the overview, and the title and close buttons of those windows are only
      visible on hover, so we can show them above anything if we want.
      On both primary monitors and secondary monitors, there's a certain free
      space available towards the bottom edge of the monitor (on the primary
      monitor we show the dash there, and secondary monitors just scale down
      the Workspaces). We can make use of this by checking how much free space
      there is available from the bottom edge of our allocation to the bottom
      edge of the monitor, and then aligning the window previews to make full
      use of this space.
      So stop adding any padding to the edges of the Workspace, which will
      make the windows a lot larger and completely fill the Workspaces
      The left, top and right monitor edges should always be far enough away
      to accomodate the close button and hover scale-up of the window. Only
      with the bottom edge of the monitor we have to be a bit more careful
      (the overflowing height of the window title is quite big), so there we
      check if enough free space is available. If there isn't enough free
      space, we simply apply a bit of bottom padding again and shift the
      window up.
      Part-of: <!1813>
    • verdre's avatar
      workspacesView: Clip the SecondaryMonitorDisplay instead of the view · 7f90a46f
      verdre authored
      Make the SecondaryMonitorDisplay a bit more similar to the
      ControlsManager container on the primary monitor, and clip that widget
      instead of the WorkspacesViews on secondary monitors.
      This will allow us to overpaint the WorkspacesView allocation and paint
      the WindowPreview overlays like the title and close button outside the
      allocation with the next commit.
      Part-of: <!1813>
    • verdre's avatar
      screencastService: Improve the gstreamer pipeline for recording · 51bf7ec1
      verdre authored
      The current gstreamer pipeline performs quite bad on slower machines and
      is dropping lots of frames, improve the pipeline by changing a few
      - Use threads for videoconvert and improve speed of videoconvert by
      disabling some unneeded things
      - Add a queue before the encoding step, this allows the encoder to work
      at its own pace and will lead to a lot more stability
      - Remove the fixed quantizer and only set a max quantizer, this helps
      quite a bit with performance
      - Change the deadline parameter of vp8enc to 1: This makes the encoder
      go into real time mode, which will make it a lot faster
      - Set cpu-used to 16, the maximum possible value.
      - Set static-threshold to 1000, static-threshold is the motion detection
      threshold, and while a value of 100 is recommended for screencasting in
      the gstreamer documentation (see [1]), using 1000 appears to perform a
      lot better and still outputs fairly good quality
      - Set a larger buffer size than the default size, this seems to get a
      bit more stability during high load scenarios
      All in all, those changes make the pipeline drop no more frames when
      recording at 30 FPS and 2K screen resolution. That was tested on a
      fairly recent mobile core-i5 processor.
      Also, because we now have two %T replacement strings for the number of
      threads, we need to switch to replaceAll(). For that to work, we have to
      put the %T matching expression into quotes.
      [1] https://gstreamer.freedesktop.org/documentation/vpx/GstVPXEnc.html?gi-language=c#GstVPXEnc:static-threshold
      Part-of: <!1633>
  2. 01 May, 2021 3 commits
  3. 30 Apr, 2021 1 commit
  4. 29 Apr, 2021 6 commits
    • Sebastian Keller's avatar
      dnd: Don't try to restore to parent location if parent got destroyed · 79acae41
      Sebastian Keller authored
      The original parent of a dragged actor might have been destroyed after
      the drag has been started. When the drag is canceled and _dragOrigParent
      is set, the code is trying to get the current position and size of it
      when restoring. With a destroyed parent this however would result in a
      This could happen for example when starting a drag on a window preview
      while the overview is hiding and then releasing it once the transition
      is done.
      Fixes #4024
      Part-of: <!1817>
    • Sebastian Keller's avatar
      workspaceThumbnail: Only create thumbnails once · 0e917c3d
      Sebastian Keller authored
      `ThumbnailsBox` listens for the `showing` signal from the `Overview` to
      create its thumbnails and destroys them on the `hide` signal. Since the
      `showing` signal can be emitted multiple times when switching between
      the shown and hidden state without ever fully completing the transition,
      this will cause `_createThumbnails` to be called multiple times, each
      time adding another set of workspaces.
      Fixes: #3819
      Part-of: <!1828>
    • Sebastian Keller's avatar
      overviewControls: Stop transitions when starting a gesture · 77023135
      Sebastian Keller authored
      When starting a gesture to open the overview while a transition to hide
      the overview is running, Overview._shown will be first set to false when
      starting the transition and then to true by the gesture before the
      `onComplete` callback is called. The `onComplete` callback in this case
      is `Overview._hideDone()` which starts a transition to show the overview
      again which also emits the `showing` signal. Since the gesture emits a
      `showing` signal as well, this results in two consecutive `showing`
      signals without a `hiding` signal in between.
      This breaks the `searchControler` which adds a key press handler to
      start the search on `showing` and removes it on `hiding`. So every time
      this happens a new handler that will never be removed is added,
      resulting in the first key press being repeated.
      Fixes: #4004
      Related: #3819
      Part-of: <!1828>
    • Leleat's avatar
      appMenu: Only show Open Windows, if there are at least 2 windows · fd0da960
      Leleat authored
      It doesn't make sense to show the 'Open Windows' in the app menu,
      if the app only has 1 open window to switch between. Hide the
      window section in that case.
      Fixes GNOME/gnome-shell#4199.
      Part-of: <GNOME/gnome-shell!1827>
    • Jakub Steiner's avatar
      theme: App group styling · 4bf2adb4
      Jakub Steiner authored
       * Use the same style as the dash.
      Fixes #4002
      Part-of: <!1800>
    • Sebastian Keller's avatar
      appDisplay: Don't use symbolic icon at full size for system actions · 401b5843
      Sebastian Keller authored
      When attempting to account for scaling in e65e5ede the icon_size of the
      StIcon was set to the target size, overriding the icon-size set in the
      'system-action-icon' CSS, which was only half the size. The intent of
      that commit however was not to scale up the symbolic icon, but the
      circle around it. Do this by manually applying the scaling factor.
      Fixes #3940
      Part-of: <!1777>
  5. 28 Apr, 2021 9 commits
  6. 27 Apr, 2021 3 commits
    • Carlos Garnacho's avatar
      keyboard: Always emit ::pressed late on keys with variants · 82c2f293
      Carlos Garnacho authored
      When we press a key with variants, we used to prevent an
      early ::pressed, because a long press could show the options
      popover, and the press be undone.
      In addition, this long press could move to one of the suboptions,
      and be released there. For this case we also want this late
      emission of the ::pressed signal.
      This makes the "tap, drag, release" pattern work on the
      regular OSK keys, in addition to the emoji panel.
      Part-of: <!1789>
    • Carlos Garnacho's avatar
      keyboard: Allow calling _release() without press on OSK keys with touch · 40e53492
      Carlos Garnacho authored
      This is already allowed for pointer events, but touch events still expected
      that the touch begin and end happen on the same Key actor. Change this
      behavior for touch events, this is necessary for the tap-drag-release
      pattern to select key variants to work on all input devices.
      Part-of: <!1789>
    • X-m7's avatar
      status/power: Always show real percentage in battery label · 6ee2c4f7
      X-m7 authored
      We currently display the percentage as "100%" if the battery state is
      "fully charged", but the actual capacity may be lower than that.
      Just show the real percentage, which is consistent with Settings.
      Part-of: <!1787>
  7. 26 Apr, 2021 1 commit
    • verdre's avatar
      st: Only use clutter_actor_invalidate_paint_volume() if the API exists · 1cefd589
      verdre authored
      With commits fab39bbe and
      62e40a13 we started depending on a new
      ClutterActor API: clutter_actor_invalidate_paint_volume()
      Given that this commit was applied to the 40 stable release, it broke
      ABI compatibility with mutter, which is something we guarantee between
      stable releases. So use GModule to dynamically find the symbol in our
      loaded libraries. If it exists, use it and invalidate the paint volume.
      If it doesn't exist, libmutter is still at version 40.0 and we don't
      need to invalidate the paint volume.
      This also adds a dependency on gmodule. We need to link against gmodule
      to use g_module_open() and g_module_symbol() APIs.
      Part-of: <!1807>
  8. 25 Apr, 2021 1 commit
  9. 23 Apr, 2021 3 commits
  10. 19 Apr, 2021 4 commits
  11. 18 Apr, 2021 1 commit
  12. 16 Apr, 2021 1 commit