1. 10 Nov, 2018 1 commit
  2. 07 Nov, 2018 2 commits
    • Ell's avatar
      app: a few improvements to the GimpBacktrace Linux backend · a29d040d
      Ell authored
      Blacklist the "threaded-ml" thread, which seems to mask the
      backtrace signal.
      
      Improve signal-handler synchronozation, to avoid segfaulting when
      giving up on waiting for all threads to handle the signal.
      Furthermore, when one or more threads fail to handle the signal in
      time, return a GimpBacktrace instance with backtraces for all the
      other threads, and with empty backtraces for all the non-responding
      threads, instead of returning NULL and leaking the allocated
      instance.  Don't blacklist threads that failed to handle the signal
      in time, and instead shorten the wait period for handling the
      signal, and yield execution during waiting to lower the CPU usage.
      a29d040d
    • Ell's avatar
      app: a few fixes to performance-log backtrace output · eec1e1f1
      Ell authored
      Fix delta-encoding of performance-log backtraces in certain cases,
      and distinguish between empty call-stacks and removed threads.
      eec1e1f1
  3. 04 Nov, 2018 1 commit
    • Ell's avatar
      app: don't let image component mask affect channel colors · 56920dcd
      Ell authored
      Connect GimpImage's gimp:mask-components node to the layers node
      *before* connecting the channels node, so that the image's
      component mask doesn't affect the channel colors, as is the case in
      2.8.
      56920dcd
  4. 03 Nov, 2018 4 commits
    • Ell's avatar
      app: avoid allocating empty tempbuf for drawable previews · 963322fd
      Ell authored
      In gimp_view_renderer_drawable_render(), make sure the preview size
      is always at least 1x1.
      
      Fixes commit 8009ea34.
      963322fd
    • Ell's avatar
      app: include variable descriptions in performance logs · 646208ef
      Ell authored
      Include instrumentation-variable descriptions in the var-defs
      section of performance logs, so that they can be displayed
      alongside their names when viewing the log.
      646208ef
    • Ell's avatar
      app: simplify drawable preview rendering · 8009ea34
      Ell authored
      Simplify gimp_view_renderer_drawable_render(), by consolidating
      common code paths.  In particular, when rendering the preview as
      part of an image, always crop the preview to the bounds of the
      image, even when downscaling, to avoid unnecessarily downscaling/
      convering cropped-out regions.  We previously only did this when
      upscaling the preview by a factor of 2 or more; whatever the reason
      for this used to be, it's no longer there.
      8009ea34
    • Ell's avatar
      Issue #2436 - Crash after downsizing canvas · 0cdbe91e
      Ell authored
      In gimp_view_renderer_drawable_render(), avoid overflow in preview-
      area calculation.  This prevents erroneously setting 'scaling_up'
      to FALSE while upscaling the drawable by a very large amount, which
      can lead to the creation of a very large GimpTempBuf for the
      preview, causing memory allocation to fail.
      0cdbe91e
  5. 01 Nov, 2018 1 commit
  6. 31 Oct, 2018 1 commit
    • Michael Natterer's avatar
      Issue #2379 - Crash on saving · c55f2308
      Michael Natterer authored
      file_save(): make sure we always set an error on failure
      
      file_save_dialog_save_image(): additionally, check that "error" exists
      before dereferencing it.
      c55f2308
  7. 27 Oct, 2018 2 commits
    • Ell's avatar
      app: fix tests for new show-tabs option · 4113aaad
      Ell authored
      In app/tests, add the show-tabs pref, added in commit
      1ca2d744, to the expected sessionrc
      files.
      4113aaad
    • Ell's avatar
      Issue #2405 - Rotation center shifts by half a pixel ... · c271992a
      Ell authored
      ... the second time you do a 180 degrees rotation
      
      In gimp_transform_resize_adjust(), nudge the transformed layer
      boundary by EPSILON toward the center, to avoid enlarging the layer
      unnecessarily, as a result of numeric error amplified by rounding,
      when the tranformed boundary should land on integer coordinates.
      In particular, this avoids enlarging the layer when rotating by 180
      degrees.
      c271992a
  8. 25 Oct, 2018 1 commit
    • Michael Natterer's avatar
      Issue #2235 - Color reset/swap keyboard shortcuts not discoverable... · ae9d84dd
      Michael Natterer authored
      ...via hover tooltips
      
      Use the GtkWidget::query_tooltip() signal on GimpFgBgEditor to emit an
      own signal "tooltip" that has the hovered widget area as parameter.
      
      Connect to GimpFgBgEditor::tooltip() in gimptoolbox-color-area.c and
      set separate tooltips on the widget's areas, including the shortcuts
      for "Swap colors" and "Default colors".
      ae9d84dd
  9. 24 Oct, 2018 1 commit
  10. 23 Oct, 2018 3 commits
  11. 22 Oct, 2018 2 commits
  12. 21 Oct, 2018 1 commit
    • Michael Natterer's avatar
      Issue #2332 - Marching ants from one image displayed on every tab · 1d43e2ff
      Michael Natterer authored
      Seems we were drawing marching ants for hidden tabs ever since the
      introduction of SWM, which is both a horrible waste of CPU time, and
      also makes all selections visible on all displays on GTK+ 3.x.
      
      Implement GtkWidget::unmap() in GimpDisplayShell and stop the ants
      when the shell is unmapped.
      1d43e2ff
  13. 20 Oct, 2018 2 commits
  14. 19 Oct, 2018 1 commit
  15. 16 Oct, 2018 2 commits
  16. 12 Oct, 2018 1 commit
  17. 11 Oct, 2018 2 commits
    • Ell's avatar
      app: always use libunwind for symbol names in GimpBacktrace Linux backend · 72fc0174
      Ell authored
      In the GimpBacktrace Linux backend, always use libunwind, when
      available, to find symbol names, even if dladdr() or libbacktrace
      had already found one.  libunwind provides more descriptive names
      in certain cases, and, in particular, full symbol names for C++
      lambdas.
      
      Note that, in some cases, this can result in a discrepancy between
      the reported symbol name, and the corresponding source location.
      72fc0174
    • Ell's avatar
      app: fix gimp_wait() deadlock · 85b16b9e
      Ell authored
      In the GUI implementation of gimp_wait(), explicitly finish the
      input-pipe async operation after the busy-dialog plug-in
      terminates, to avoid the async callback function from being
      repeatedly called, stalling the main thread.  Previously, this code
      relied on gimp-parallel implicitly aborting the async operation,
      but this is no longer the case since commit
      4969d757.
      85b16b9e
  18. 10 Oct, 2018 3 commits
    • Ell's avatar
      app: in GimpBacktrace Windows backend, avoid bogus symbol addresses · 52772cf3
      Ell authored
      In the GimpBacktrace Windows backend, avoid reporting meaningless
      symbol addresses when failing to retrieve meaningful ones.
      Unfortunately, it seems that we never get symbol addresses for
      symbols that have debug information, which negatively affects the
      log viewer's call graph.  We're going to have to work around this.
      52772cf3
    • Ell's avatar
      app: in GimpBacktrace Windows backend, set main-thread name · 52908f39
      Ell authored
      When initializing the GimpBacktrace Windows backend, set the name
      of the current thread (which is assumed to be the main thread) to
      the program's name, to match its name on Linux.  We normally rely
      on the SET_THREAD_NAME exception to set thread names on Windows,
      which isn't raised for the main thread.
      52908f39
    • Ell's avatar
      app: improve description comment of GimpAsync · ca6e4eb4
      Ell authored
      ca6e4eb4
  19. 09 Oct, 2018 1 commit
    • Ell's avatar
      app: allow progressive execution of parallel async operations · 4969d757
      Ell authored
      In the gimp_parallel_run_async() family of functions, allow the
      async callback to return without completing the async operation, in
      which case the callback will be called again, until the operation
      is either completed, or canceled, in which case it is aborted
      (previously, returning from the callback without completing the
      operation would cause it to be aborted.)  It is guaranteed that all
      operations of the same priority will get a chance to run, even if
      some of them contuinuosly return without completing.
      
      This allows potentially time-consuming operations to yield
      execution in favor of other same-priority operations, and, in
      particular, of higher-priority operations, to avoid priority
      inversion.  Essentially, this allows a simple form of cooperative
      multitasking among async operations.
      4969d757
  20. 08 Oct, 2018 1 commit
  21. 07 Oct, 2018 1 commit
    • Michael Natterer's avatar
      app: remove the image's "Enable Color Management" toggle · c399b894
      Michael Natterer authored
      It was not doing anything right since space invasion. We now treat the
      built-in sRGB profile like any other profile and never bypass
      conversions based on some weird toggle.
      
      Instead, introduce a "Use sRGB Profile" toggle which, when enabled,
      hides whatever profile away so the image actually uses the built-in
      sRGB profile.
      
      This is different from discarding and then re-assigning the same
      profile only by being faster and more convenient.
      c399b894
  22. 05 Oct, 2018 2 commits
    • Øyvind "pippin" Kolås's avatar
      ca6e22f0
    • Ell's avatar
      Issue #2308 - Strange behavior when switching active layer during transform · 3eaae585
      Ell authored
      Replace GimpTransformTool's 'drawable' field with an 'item' field,
      and have GimpTransformGridTool set it to the active item, to which
      the transformation is applied, during its initialization.  In
      gimp_transform_tool_get_active_item(), return the value of the
      transform tool's 'item' field, if not NULL, instead of the image's
      active item.  This makes sure we apply that transform-grid tools
      apply the transformation for the item for which they were
      activated, even if the image's active item has changed.
      3eaae585
  23. 03 Oct, 2018 2 commits
    • Ell's avatar
      app: use "step" blending function in "FG to BG (Hardedge)" gradient · 84066ca2
      Ell authored
      Use a single segment with a "step" blending function, added in the
      previous commit, instead of two separate segments, for the "FG to
      BG (Hardedge)" internal gradient.  This makes it simpler to change
      its endpoint colors by modifying the gradient, instead of changing
      the FG/BG colors.
      84066ca2
    • Ell's avatar
      Issue #2303 - Please add Constant type of gradient interpolation ... · 68bf99e8
      Ell authored
      ... to make multi-color hard-edge gradient fills possible
      
      Add a new "step" gradient-segment blending function, which is 0
      before the midpoint, and 1 at, and after, the midpoint.  This
      creates a hard-edge transition between the two adjacent color stops
      at the midpoint.  Creating such a transition was already possible,
      but required duplicating the same color at the opposing ends of two
      adjacent stops, which is cumbersome.
      68bf99e8
  24. 01 Oct, 2018 2 commits
    • Ell's avatar
      app: in gimp-parallel, cancel ongoing async operations upon exit · e46fdc71
      Ell authored
      When shutting-down gimp-parallel, cancel and/or abort any ongoing
      and queued async operations, instead of finishing them (async
      operations that already started executing will be canceled, but
      execution will be blocked until they're finished.)  This is
      especially important since we're shutting down gimp-parallel before
      the destruction of data factories.  This commit causes any ongoing
      async operations of the factories to be canceled on shutdown,
      rather than waiting for them to finish normally.
      e46fdc71
    • Ell's avatar
      app: add gimp_data_factory_data_cancel() · 6bc0b3b8
      Ell authored
      Add a new GimpData::data_cancel() virtual function, and a
      corresponding gimp_data_factory_data_cancel() function.  This
      function should cancel any ongoing async operations related to the
      factory (i.e., included in its async set), and wait for the
      operations to finish.  Provide a default implementation that simply
      cancels and waits on the factory's async set.
      
      Use this function to cancel any ongoing operations during factory
      destruction, and in gimp_data_factory_data_free().
      
      Override this function in GimpFontFactory, for which we can't
      really cancel font loading, and simply cancel and clear the
      factory's async set without waiting for loading to finish, making
      sure that nothing happens (and, in particular, that the factory
      isn't being accessed, since it might be already dead) when loading
      does finish.
      6bc0b3b8