This is an automated email from the git hooks/post-receive script.

gottcode pushed a 
commit to branch 
master
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

Reply via email to