summaryrefslogtreecommitdiff
path: root/adw/src/helpers/async_callback.cpp
blob: 4f148f0c6aa8766abea5d375d16d1da02736c27f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "adwaitamm/helpers/async_callback.hpp"

#include <glibmm/exceptionhandler.h>
#include <glibmm/object.h>

#include <giomm/asyncresult.h>

#include <memory>

namespace Adwaita::helpers
{

  auto async_callback(GObject *, GAsyncResult * result, void * data) noexcept -> void
  {
    auto slot = std::unique_ptr<Gio::SlotAsyncReady>(static_cast<Gio::SlotAsyncReady *>(data));

    try
    {
      auto actual_result = Glib::wrap(result, true);
      (*slot)(actual_result);
    }
    catch (...)
    {
      Glib::exception_handlers_invoke();
    }
  }

}  // namespace Adwaita::helpers