1. 03 Oct, 2019 9 commits
  2. 02 Oct, 2019 4 commits
    • Marco Trevisan's avatar
      clutter/actor: Don't emit property changes after ::destroy · 105a3f75
      Marco Trevisan authored
      Clutter actors might emit property changes in dispose, while unparenting.
      However we assume that the ::destroy signal is the last one we emit for an
      actor, and that starting from this moment the object is not valid anymore,
      and so we don't expect any signal emission from it.
      
      To avoid this, freeze the object notifications on an actor during its
      disposition, just before the ::destroy signal emission.
      
      Update the actor-destroy test to verify this behavior.
      
      !769
      105a3f75
    • Marco Trevisan's avatar
      clutter/actor: Don't emit the parent-set signal on destruction · f376a318
      Marco Trevisan authored
      Clutter actors unset their parent on dispose, after emitting the ::destroy
      signal, however this could cause ::parent-set signal emission. Since we
      assume that after the destruction has been completed the actor isn't valid
      anymore, and that during the destroy phase we do all the signal / source
      disconnections, this might create unwanted behaviors, as in the signal
      callbacks we always assume that the actor isn't in disposed yet.
      
      To avoid this, don't emit ::parent-set signal if the actor is being
      destroyed.
      
      Update the actor-destroy test to verify this behavior.
      
      !769
      f376a318
    • Olivier Fourdan's avatar
      events: Sync pending pointer events without a window · 4b88c183
      Olivier Fourdan authored
      Mutter issues a synchronous grab on the pointer for unfocused client
      windows to be able to catch the button events first and raise/focus
      client windows accordingly.
      
      When there is a synchronous grab in effect, all events are queued until
      the grabbing client releases the event queue as it processes the events.
      
      Mutter does release the events in its event handler function but does so
      only if it is able to find the window matching the event. If the window
      is a shell widget, that matching may fail and therefore Mutter will not
      release the events, hence causing a freeze in pointer events delivery.
      
      To avoid the issue, make sure we sync the pointer events in case we
      can't find a matching window.
      
      !821
      4b88c183
    • Ask Hjorth Larsen's avatar
      Updated Danish translation · fc8aa1cd
      Ask Hjorth Larsen authored
      fc8aa1cd
  3. 30 Sep, 2019 1 commit
    • Jonas Ådahl's avatar
      Revert "renderer-native: Actually use shadow fb when using software rendering" · 7049b2f2
      Jonas Ådahl authored
      It was not the lack of forcing the shadow fb that caused slowness, but
      rather due to the method the shadow fb content was copied onto the
      scanout fb. With 'clutter: Use cogl_blit_framebuffer() for shadow FB'
      we'll use a path that shouldn't be slow when copying onto the scanout
      fb.
      
      Also 437f6b3d accidentally enabled
      shadow fb when using hw accelerated contexts, due to the cap being set
      to 1 in majority of drivers. While the kernel documentation for the
      related field says "hint to userspace to prefer shadow-fb rendering",
      the name of the hint when exposed to userspace is
      DRM_CAP_DUMB_PREFER_SHADOW, thus should only be taken into consideration
      for dumb buffers, not rendering in general.
      
      This reverts commit 437f6b3d.
      
      !818
      7049b2f2
  4. 28 Sep, 2019 1 commit
  5. 27 Sep, 2019 6 commits
    • Jonas Ådahl's avatar
      renderer-native: Actually use shadow fb when using software rendering · 437f6b3d
      Jonas Ådahl authored
      The commit 'renderer/native: Use shadow fb on software GL if preferred'
      attempted to force using a shadow fb when using llvmpipe in order to
      speed up blending, but instead only did so when llvmpipe AND the drm
      device explicityl asked for it.
      
      Now instead always force it for llvmpipe and other software rendering
      backends, and otherwise just query the drm device (i.e.
      DRM_CAP_DUMB_PREFER_SHADOW).
      
      !807
      437f6b3d
    • Olivier Fourdan's avatar
      clutter/stage-view: Use cogl_blit_framebuffer() for shadow FB · 05e1a6c2
      Olivier Fourdan authored
      If there is no transformation, use `cogl_blit_framebuffer()` as a
      shortcut in `clutter_stage_view_blit_offscreen()`, that dramatically
      improves performance when using a shadow framebuffer.
      
      !809
      05e1a6c2
    • Robert Mader's avatar
      wayland/dnd-surface: Scale DnD-surface-actor content if necessary · 25c1a853
      Robert Mader authored
      Since the recent clutter-content work, legacy scaling (in contrast
      to the new stage-view-scaling) only applies to surfaces that belong
      to a window. This broke scaling of DnD surfaces.
      
      As a workaround, apply the same scaling on DnD-surface-actors until
      we use stage-view-scaling by default and can remove this again.
      
      Also: small corrections of geometry calculation
      
      !780
      25c1a853
    • Robert Mader's avatar
      wayland/actor-surface: Turn get_geometry_scale() into a vfunc · bba8f6c5
      Robert Mader authored
      This allows us to implement more sophisticated logic for the different
      cases. For DnD surfaces, use the geometry scale of the monitor where
      the pointer is, instead of incorrectly assuming '1' as it was before.
      
      !780
      bba8f6c5
    • Jonas Ådahl's avatar
      main: Make process PR_SET_DUMPABLE · dbe9daeb
      Jonas Ådahl authored
      Otherwise we won't get core dumps if the launching binary has
      capabilities set.
      
      !811
      dbe9daeb
    • Carlos Garnacho's avatar
      x11: Update focus on the X11 display before the MetaDisplay · 8fd55fef
      Carlos Garnacho authored
      The meta_display_update_focus_window() call has indirect dependencies
      on the X11 focus window, in order to determine the correct focus window
      on the Wayland side (i.e. may turn out NULL with certain X windows).
      
      In order to have the right x11_display->focus_xwindow there, we should
      perform first the focus update on the X11 display.
      
      Fixes focusing of Java applications, as those don't seem to go through
      _NET_ACTIVE_WINDOW.
      
      Closes: #819
      8fd55fef
  6. 26 Sep, 2019 2 commits
  7. 25 Sep, 2019 1 commit
  8. 24 Sep, 2019 2 commits
    • Olivier Fourdan's avatar
      keybinding: Check for handler functions as well · 76f2579e
      Olivier Fourdan authored
      With the addition of the locate-pointer special keybinding (defaults to
      the [Control] key), we have now two separate special modifier keys which
      can be triggered separately, one for the locate-pointer action and
      another one for overlay.
      
      When processing those special modifier keys, mutter must ensure that the
      key was pressed alone, being a modifier, the key could otherwise be part
      of another key combo.
      
      As result, if both special modifiers keys are pressed simultaneously,
      mutter will try to trigger the function for the second key being
      pressed, and since those special modifier keys have no default handler
      function set, that will crash mutter.
      
      Check if the handler has a function associated and treat the keybinding
      as not found if no handler function is set, as with the special modifier
      keys.
      
      #823
      76f2579e
    • Olivier Fourdan's avatar
      keybindings: Check for a handler before using it · 0706e021
      Olivier Fourdan authored
      The `process_event()` would check for a existing keybinding handler and
      abort if there is none, however the test is done after the handler had
      been accessed, hence defeating the purpose of the check.
      
      Move the check to verify there is an existing keybinding handler before
      actually using it.
      
      #823
      0706e021
  9. 20 Sep, 2019 14 commits
    • Robert Mader's avatar
      window-actor: Use surface coordinates for the fast path in get_image() · b5775e3d
      Robert Mader authored
      shaped_texture requires the clip to be in surface coordinates. Scale
      it accordingly.
      
      !758
      b5775e3d
    • Robert Mader's avatar
      shaped-texture: Use surface coordinates in get_image() · cd70595b
      Robert Mader authored
      There were multiple bugs present after the ClutterContent transition.
      Refactor `get_image` to:
      
      - always assume surface coordinates for the clip
      - return a cairo_surface in buffer size
      - make the offscreen path take size arguments, so we can
      easily change the assumption in get_image
      - fix some clipping bugs on the way
      
      !758
      cd70595b
    • Marco Trevisan's avatar
      shaped-texture: Declare that we inherit from GObject · 1d2913d9
      Marco Trevisan authored
      As per commit 75cffd0e MetaShapedTexture is a GObject implementing the Clutter
      Content interface.
      
      Reflect this on the type declaration.
      
      !796
      1d2913d9
    • Marco Trevisan's avatar
      window/surface-actor: Add docstrings · b8a49a68
      Marco Trevisan authored
      Redefine the docstring for functions using shaped texture, setting the clip
      as nullable.
      
      !79
      b8a49a68
    • Marco Trevisan's avatar
      shaped-texture: Mark set the clip and return value nullable · 82901f89
      Marco Trevisan authored
      As per the code definition the clip can be a null rectangle, and we can also
      return a null surface, so mark them as nullable in the introspection.
      
      !796
      82901f89
    • Marco Trevisan's avatar
      clutter/actor: Cancel delayed timelines on removal · c9c53cb5
      Marco Trevisan authored
      Delayed clutter timelines might be removed while they are still in the
      process of being executed, but if they are not playing yet their delay
      timeout won't be stopped, causing them to be executed anyway, leading to a
      potential crash.
      
      In fact if something else keeps a reference on the timelines (i.e. gjs), the
      dispose vfunc delay cancellation won't take effect, causing the timelines to
      be started and added to the master clock.
      
      To avoid this, expose clutter_timeline_cancel_delay() function and call it
      if a timeline is not playing but has a delay set.
      
      Fixes #815
      !805
      c9c53cb5
    • Marco Trevisan's avatar
      clutter/timeline: Don't emit ::paused signal on delayed timelines · 1e637bd7
      Marco Trevisan authored
      If a timeline is delayed and we request to stop or pause it, we are emitting
      the "::paused" signal on it, however this has never been started, and so
      nothing has really be paused.
      
      So, just try to cancel the delay on pause and return if not playing.
      
      No code in mutter or gnome-shell is affected by this, so it is safe to
      change.
      
      !805
      1e637bd7
    • Marco Trevisan's avatar
      clutter/timeline: Use a function to cancel the delay timeout · 63a0b702
      Marco Trevisan authored
      Avoid repeating the same code for canceling the delay timeout, using a
      function for later uses.
      
      !805
      63a0b702
    • Adam Jackson's avatar
      wayland/dma-buf: Handle zero modifiers from eglQueryDmaBufModifiersEXT · 031003a5
      Adam Jackson authored
      Some drivers expose EGL_EXT_image_dma_buf_import_modifiers so you can
      query supported formats, but don't support any modifiers. Handle this by
      treating it like DRM_FORMAT_MOD_INVALID.
      
      !782
      031003a5
    • Marco Trevisan's avatar
      stage: Compute view perspective when parameters changed · b69d2aa6
      Marco Trevisan authored
      Clutter stage used to compute the initial projection using a fixed z
      translation which wasn't matching the one we computed in
      calculate_z_translation().
      This caused to have a wrong initial projection on startup which was then
      correctly recomputed only at the first paint.
      
      However, since this calculation doesn't depend on view, but only on viewport
      size, perspective's fovy and z_near we can safely do this at startup and
      only when any of those parameters change.
      
      Then we can move the computation out _clutter_stage_maybe_setup_viewport()
      since the cogl framebuffer viewport sizes aren't affecting this.
      
      Fixes gnome-shell#1639
      !803
      b69d2aa6
    • Iain Lane's avatar
      build: Compile with `-ffloat-store` on x86 (32 bit) · d7d26122
      Iain Lane authored
      GCC's manpage says that this flag does the following:
      
        Do not store floating-point variables in registers, and inhibit other
        options that might change whether a floating-point value is taken from
        a register or memory.
      
        This option prevents undesirable excess precision on machines such as
        the 68000 where the floating registers (of the 68881) keep more
        precision than a "double" is supposed to have.  Similarly for the x86
        architecture.  For most programs, the excess precision does only good,
        but a few programs rely on the precise definition of IEEE floating
        point.
      
      We rely on this behaviour in our fork of clutter. When performing
      floating point computations on x86, we are getting the wrong results
      because of this architecture's use of the CPU's extended (x87, non-IEEE
      confirming) precision by default. If we enable `-ffloat-store` here,
      then we'll get the same results everywhere by storing into variables
      instead of registers. This does not remove the need to be correct when
      handling floats, but it does mean we don't need to be more correct than
      the IEEE spec requires.
      
      !785
      d7d26122
    • Daniel van Vugt's avatar
      kms-impl-device: Use portable formatting for 64-bit integers · 7a0340c5
      Daniel van Vugt authored
      On 64-bit systems uint64_t is %lu but on 32-bit systems it is %llu.
      
      !778
      7a0340c5
    • Daniel van Vugt's avatar
      output-kms: Use portable formatting for 64-bit integers · 0863bd24
      Daniel van Vugt authored
      On 64-bit systems uint64_t is %lu but on 32-bit systems it is %llu.
      
      !778
      0863bd24
    • Daniel van Vugt's avatar
      input-settings: Use portable formatting for 64-bit integers · 594cc7c7
      Daniel van Vugt authored
      On 64-bit systems int64_t is %lx but on 32-bit systems it is %llx.
      
      !778
      594cc7c7