MCPcopy Create free account
hub / github.com/GNOME/gjs / signal_find_impl

Method signal_find_impl

gi/object.cpp:3229–3268  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3227}
3228
3229bool ObjectInstance::signal_find_impl(JSContext* cx, const JS::CallArgs& args) {
3230 gjs_debug_gsignal("[Gi.signal_find_symbol]() obj %p priv %p argc %d",
3231 m_wrapper.get(), this, args.length());
3232
3233 if (!check_gobject_finalized("find any signal on")) {
3234 args.rval().setInt32(0);
3235 return true;
3236 }
3237
3238 JS::RootedObject match(cx);
3239 if (!gjs_parse_call_args(cx, "[Gi.signal_find_symbol]", args, "o", "match",
3240 &match))
3241 return false;
3242
3243 GSignalMatchType mask;
3244 unsigned signal_id;
3245 GQuark detail;
3246 JS::RootedObject callable(cx);
3247 if (!signal_match_arguments_from_object(cx, match, &mask, &signal_id,
3248 &detail, &callable))
3249 return false;
3250
3251 uint64_t handler = 0;
3252 if (!callable) {
3253 handler = g_signal_handler_find(m_ptr, mask, signal_id, detail, nullptr,
3254 nullptr, nullptr);
3255 } else {
3256 for (GClosure* candidate : m_closures) {
3257 if (Gjs::Closure::for_gclosure(candidate)->callable() == callable) {
3258 handler = g_signal_handler_find(m_ptr, mask, signal_id, detail,
3259 candidate, nullptr, nullptr);
3260 if (handler != 0)
3261 break;
3262 }
3263 }
3264 }
3265
3266 args.rval().setNumber(static_cast<double>(handler));
3267 return true;
3268}
3269
3270template <ObjectBase::SignalMatchFunc(*MatchFunc)>
3271static inline const char* signal_match_to_action_name();

Callers 1

signal_findMethod · 0.80

Calls 4

gjs_parse_call_argsFunction · 0.85
lengthMethod · 0.80
callableMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected