[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