[Xfce4-commits] [panel-plugins/xfce4-whiskermenu-plugin] 03/20: Use variadic templates for slots.

noreply at xfce.org noreply at xfce.org
Thu Feb 6 12:03:20 CET 2020


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 <graeme at 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 <graeme at gottcode.org>
+ * Copyright (C) 2013-2020 Graeme Gott <graeme at 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.


More information about the Xfce4-commits mailing list