This is an automated email from the git hooks/post-receive script. g o t t c o d e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository panel-plugins/xfce4-whiskermenu-plugin.
commit 17e782307f8e0fa4f4ed7c97ef869d76324a2c34 Author: Graeme Gott <gra...@gottcode.org> Date: Sat Feb 1 15:25:25 2020 -0500 Use variadic templates for slots. --- panel-plugin/slot.h | 324 ++++------------------------------------------------ 1 file changed, 22 insertions(+), 302 deletions(-) diff --git a/panel-plugin/slot.h b/panel-plugin/slot.h index ad51eeb..795b6c9 100644 --- a/panel-plugin/slot.h +++ b/panel-plugin/slot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013, 2016, 2020 Graeme Gott <gra...@gottcode.org> + * Copyright (C) 2013-2020 Graeme Gott <gra...@gottcode.org> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,290 +22,8 @@ namespace WhiskerMenu { -// Member function with 1 parameter -template<typename T, typename R, typename A1> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(A1); - - public: - Slot(T* instance, R (T::*member)(A1)) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1 a1, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 1 ignored parameter -template<typename A1, typename T, typename R> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(); - - public: - Slot(T* instance, R (T::*member)()) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 1 parameter and 1 bound parameter -template<typename T, typename R, typename A1, typename A2> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1,A2), T* obj, A2 bound1, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(A1,A2); - A2 m_bound1; - - public: - Slot(T* instance, R (T::*member)(A1,A2), A2 bound1) : - m_instance(instance), - m_member(member), - m_bound1(bound1) - { - } - - static R invoke(A1 a1, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1, slot->m_bound1); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member, bound1), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 2 parameters -template<typename T, typename R, typename A1, typename A2> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1,A2), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(A1,A2); - - public: - Slot(T* instance, R (T::*member)(A1,A2)) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1 a1, A2 a2, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1, a2); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 2 ignored parameters -template<typename A1, typename A2, typename T, typename R> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(); - - public: - Slot(T* instance, R (T::*member)()) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1, A2, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 3 parameters -template<typename T, typename R, typename A1, typename A2, typename A3> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1,A2,A3), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(A1,A2,A3); - - public: - Slot(T* instance, R (T::*member)(A1,A2,A3)) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1 a1, A2 a2, A3 a3, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1, a2, a3); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 3 ignored parameters -template<typename A1, typename A2, typename A3, typename T, typename R> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(); - - public: - Slot(T* instance, R (T::*member)()) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1, A2, A3, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 4 parameters -template<typename T, typename R, typename A1, typename A2, typename A3, typename A4> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1,A2,A3,A4), T* obj, bool after = false) -{ - class Slot - { - T* m_instance; - R (T::*m_member)(A1,A2,A3,A4); - - public: - Slot(T* instance, R (T::*member)(A1,A2,A3,A4)) : - m_instance(instance), - m_member(member) - { - } - - static R invoke(A1 a1, A2 a2, A3 a3, A4 a4, gpointer user_data) - { - Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1, a2, a3, a4); - } - - static void destroy(gpointer data, GClosure*) - { - delete static_cast<Slot*>(data); - } - }; - - return g_signal_connect_data(instance, detailed_signal, - G_CALLBACK(&Slot::invoke), - new Slot(obj, member), - &Slot::destroy, - after ? G_CONNECT_AFTER : GConnectFlags(0)); -} - -// Member function with 4 ignored parameters -template<typename A1, typename A2, typename A3, typename A4, typename T, typename R> +// Member function with ignored parameters +template<typename... Args, typename T, typename R> gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(), T* obj, bool after = false) { class Slot @@ -320,7 +38,7 @@ gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R( { } - static R invoke(A1, A2, A3, A4, gpointer user_data) + static R invoke(Args..., gpointer user_data) { Slot* slot = static_cast<Slot*>(user_data); return (slot->m_instance->*slot->m_member)(); @@ -339,26 +57,26 @@ gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R( after ? G_CONNECT_AFTER : GConnectFlags(0)); } -// Member function with 5 parameters -template<typename T, typename R, typename A1, typename A2, typename A3, typename A4, typename A5> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(A1,A2,A3,A4,A5), T* obj, bool after = false) +// Member function with parameters +template<typename T, typename R, typename... Args> +gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(Args...), T* obj, bool after = false) { class Slot { T* m_instance; - R (T::*m_member)(A1,A2,A3,A4,A5); + R (T::*m_member)(Args...); public: - Slot(T* instance, R (T::*member)(A1,A2,A3,A4,A5)) : + Slot(T* instance, R (T::*member)(Args...)) : m_instance(instance), m_member(member) { } - static R invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, gpointer user_data) + static R invoke(Args... args, gpointer user_data) { Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(a1, a2, a3, a4, a5); + return (slot->m_instance->*slot->m_member)(args...); } static void destroy(gpointer data, GClosure*) @@ -374,26 +92,28 @@ gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R( after ? G_CONNECT_AFTER : GConnectFlags(0)); } -// Member function with 5 ignored parameters -template<typename A1, typename A2, typename A3, typename A4, typename A5, typename T, typename R> -gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(), T* obj, bool after = false) +// Member function with parameters and 1 bound parameter +template<typename T, typename R, typename... Args, typename A2> +gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R(T::*member)(Args...,A2), T* obj, A2 bound1, bool after = false) { class Slot { T* m_instance; - R (T::*m_member)(); + R (T::*m_member)(Args...,A2); + A2 m_bound1; public: - Slot(T* instance, R (T::*member)()) : + Slot(T* instance, R (T::*member)(Args...,A2), A2 bound1) : m_instance(instance), - m_member(member) + m_member(member), + m_bound1(bound1) { } - static R invoke(A1, A2, A3, A4, A5, gpointer user_data) + static R invoke(Args... args, gpointer user_data) { Slot* slot = static_cast<Slot*>(user_data); - return (slot->m_instance->*slot->m_member)(); + return (slot->m_instance->*slot->m_member)(args..., slot->m_bound1); } static void destroy(gpointer data, GClosure*) @@ -404,7 +124,7 @@ gulong g_signal_connect_slot(gpointer instance, const gchar* detailed_signal, R( return g_signal_connect_data(instance, detailed_signal, G_CALLBACK(&Slot::invoke), - new Slot(obj, member), + new Slot(obj, member, bound1), &Slot::destroy, after ? G_CONNECT_AFTER : GConnectFlags(0)); } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits