From f0dfb8223d5a73cacd2dbaafdd890adec101d5c7 Mon Sep 17 00:00:00 2001 From: "estade@chromium.org" Date: Wed, 7 Apr 2010 21:38:44 +0000 Subject: GTK: add more general gtk_signal macros. Convert ACEViewGtk to use the macros. BUG=none TEST=compile + click around Review URL: http://codereview.chromium.org/1591021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43883 0039d316-1c4b-4281-b951-d872f2087c98 --- app/gtk_signal.h | 151 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 88 insertions(+), 63 deletions(-) (limited to 'app/gtk_signal.h') diff --git a/app/gtk_signal.h b/app/gtk_signal.h index c21ef81..a3d5f7a 100644 --- a/app/gtk_signal.h +++ b/app/gtk_signal.h @@ -21,71 +21,96 @@ typedef struct _GtkWidget GtkWidget; // the headers and the implementations shouldn't be filled with "context->" // de-references. -#define CHROMEGTK_CALLBACK_0(TYPE, RETURN, METHOD) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, gpointer userdata) { \ - return reinterpret_cast(userdata)->METHOD(widget); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget); - -#define CHROMEGTK_CALLBACK_1(TYPE, RETURN, METHOD, ARG1) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, \ +#define CHROMEG_CALLBACK_0(CLASS, RETURN, METHOD, SENDER) \ + static RETURN METHOD ## Thunk(SENDER sender, gpointer userdata) { \ + return reinterpret_cast(userdata)->METHOD(sender); \ + } \ + \ + virtual RETURN METHOD(SENDER); + +#define CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ gpointer userdata) { \ - return reinterpret_cast(userdata)->METHOD(widget, one); \ + return reinterpret_cast(userdata)->METHOD(sender, one); \ } \ \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one); - -#define CHROMEGTK_CALLBACK_2(TYPE, RETURN, METHOD, ARG1, ARG2) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, ARG2 two, \ - gpointer userdata) { \ - return reinterpret_cast(userdata)->METHOD(widget, one, two); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one, ARG2 two); - -#define CHROMEGTK_CALLBACK_3(TYPE, RETURN, METHOD, ARG1, ARG2, ARG3) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, gpointer userdata) { \ - return reinterpret_cast(userdata)-> \ - METHOD(widget, one, two, three); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one, ARG2 two, ARG3 three); - -#define CHROMEGTK_CALLBACK_4(TYPE, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four, \ - gpointer userdata) { \ - return reinterpret_cast(userdata)-> \ - METHOD(widget, one, two, three, four); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four); - -#define CHROMEGTK_CALLBACK_5(TYPE, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \ - ARG5) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four, ARG5 five, \ - gpointer userdata) { \ - return reinterpret_cast(userdata)-> \ - METHOD(widget, one, two, three, four, five); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four, ARG5 five); - -#define CHROMEGTK_CALLBACK_6(TYPE, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \ - ARG5, ARG6) \ - static RETURN METHOD ## Thunk(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four, ARG5 five, \ - ARG6 six, gpointer userdata) { \ - return reinterpret_cast(userdata)-> \ - METHOD(widget, one, two, three, four, five, six); \ - } \ - \ - virtual RETURN METHOD(GtkWidget* widget, ARG1 one, ARG2 two, \ - ARG3 three, ARG4 four, ARG5 five, ARG6 six); + virtual RETURN METHOD(SENDER, ARG1); + +#define CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + gpointer userdata) { \ + return reinterpret_cast(userdata)->METHOD(sender, one, two); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2); + +#define CHROMEG_CALLBACK_3(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + ARG3 three, gpointer userdata) { \ + return reinterpret_cast(userdata)-> \ + METHOD(sender, one, two, three); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3); + +#define CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ + ARG4) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + ARG3 three, ARG4 four, \ + gpointer userdata) { \ + return reinterpret_cast(userdata)-> \ + METHOD(sender, one, two, three, four); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); + +#define CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ + ARG4, ARG5) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + ARG3 three, ARG4 four, ARG5 five, \ + gpointer userdata) { \ + return reinterpret_cast(userdata)-> \ + METHOD(sender, one, two, three, four, five); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); + +#define CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ + ARG4, ARG5, ARG6) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + ARG3 three, ARG4 four, ARG5 five, \ + ARG6 six, gpointer userdata) { \ + return reinterpret_cast(userdata)-> \ + METHOD(sender, one, two, three, four, five, six); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); + +// These macros handle the common case where the sender object will be a +// GtkWidget*. +#define CHROMEGTK_CALLBACK_0(CLASS, RETURN, METHOD) \ + CHROMEG_CALLBACK_0(CLASS, RETURN, METHOD, GtkWidget*); + +#define CHROMEGTK_CALLBACK_1(CLASS, RETURN, METHOD, ARG1) \ + CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, GtkWidget*, ARG1); + +#define CHROMEGTK_CALLBACK_2(CLASS, RETURN, METHOD, ARG1, ARG2) \ + CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2); + +#define CHROMEGTK_CALLBACK_3(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3) \ + CHROMEG_CALLBACK_3(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3); + +#define CHROMEGTK_CALLBACK_4(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4) \ + CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3, ARG4); + +#define CHROMEGTK_CALLBACK_5(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \ + ARG5) \ + CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3, \ + ARG4, ARG5); + +#define CHROMEGTK_CALLBACK_6(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \ + ARG5, ARG6) \ + CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3, \ + ARG4, ARG5, ARG6); #endif // APP_GTK_SIGNAL_H_ -- cgit v1.1