diff options
author | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-11 21:46:45 +0000 |
---|---|---|
committer | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-11 21:46:45 +0000 |
commit | 6fd34434d5265f8c726ef351f494a623483e66a9 (patch) | |
tree | 55e4a0aa3487c16d468f4185ff2377078190929f /ui/base | |
parent | c5122563986223558f2584b964ca413ec39bce71 (diff) | |
download | chromium_src-6fd34434d5265f8c726ef351f494a623483e66a9.zip chromium_src-6fd34434d5265f8c726ef351f494a623483e66a9.tar.gz chromium_src-6fd34434d5265f8c726ef351f494a623483e66a9.tar.bz2 |
Devirtualize CHROMEG_CALLBACK
This allows 4 classes to be completely devirtualized. For the moment, CHROMEGTK_CALLBACK is left as default virtual, since it's used throughout a lot of Widget code.
BUG=103827
TEST=passes all tests
Review URL: http://codereview.chromium.org/8523019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109709 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r-- | ui/base/clipboard/clipboard_gtk.cc | 2 | ||||
-rw-r--r-- | ui/base/glib/glib_signal.h | 78 | ||||
-rw-r--r-- | ui/base/gtk/gtk_signal.h | 20 | ||||
-rw-r--r-- | ui/base/x/active_window_watcher_x.h | 2 |
4 files changed, 85 insertions, 17 deletions
diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc index 19a12bc..e9af2f3 100644 --- a/ui/base/clipboard/clipboard_gtk.cc +++ b/ui/base/clipboard/clipboard_gtk.cc @@ -40,7 +40,7 @@ class SelectionChangeObserver { friend struct DefaultSingletonTraits<SelectionChangeObserver>; SelectionChangeObserver(); - virtual ~SelectionChangeObserver(); + ~SelectionChangeObserver(); CHROMEG_CALLBACK_1(SelectionChangeObserver, GdkFilterReturn, OnXEvent, GdkXEvent*, GdkEvent*); diff --git a/ui/base/glib/glib_signal.h b/ui/base/glib/glib_signal.h index 63b9306..b99a69e 100644 --- a/ui/base/glib/glib_signal.h +++ b/ui/base/glib/glib_signal.h @@ -26,7 +26,7 @@ typedef void* gpointer; return reinterpret_cast<CLASS*>(userdata)->METHOD(sender); \ } \ \ - virtual RETURN METHOD(SENDER); + RETURN METHOD(SENDER); #define CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ @@ -34,7 +34,7 @@ typedef void* gpointer; return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \ } \ \ - virtual RETURN METHOD(SENDER, ARG1); + RETURN METHOD(SENDER, ARG1); #define CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ @@ -42,7 +42,7 @@ typedef void* gpointer; return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one, two); \ } \ \ - virtual RETURN METHOD(SENDER, ARG1, ARG2); + 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, \ @@ -51,7 +51,7 @@ typedef void* gpointer; METHOD(sender, one, two, three); \ } \ \ - virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3); + RETURN METHOD(SENDER, ARG1, ARG2, ARG3); #define CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ ARG4) \ @@ -62,7 +62,7 @@ typedef void* gpointer; METHOD(sender, one, two, three, four); \ } \ \ - virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); + RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); #define CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ ARG4, ARG5) \ @@ -73,7 +73,7 @@ typedef void* gpointer; METHOD(sender, one, two, three, four, five); \ } \ \ - virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); + RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); #define CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ ARG4, ARG5, ARG6) \ @@ -84,6 +84,72 @@ typedef void* gpointer; METHOD(sender, one, two, three, four, five, six); \ } \ \ + RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); + +#define CHROMEG_VIRTUAL_CALLBACK_0(CLASS, RETURN, METHOD, SENDER) \ + static RETURN METHOD ## Thunk(SENDER sender, gpointer userdata) { \ + return reinterpret_cast<CLASS*>(userdata)->METHOD(sender); \ + } \ + \ + virtual RETURN METHOD(SENDER); + +#define CHROMEG_VIRTUAL_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ + gpointer userdata) { \ + return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1); + +#define CHROMEG_VIRTUAL_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ + static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ + gpointer userdata) { \ + return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one, two); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2); + +#define CHROMEG_VIRTUAL_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<CLASS*>(userdata)-> \ + METHOD(sender, one, two, three); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3); + +#define CHROMEG_VIRTUAL_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<CLASS*>(userdata)-> \ + METHOD(sender, one, two, three, four); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); + +#define CHROMEG_VIRTUAL_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<CLASS*>(userdata)-> \ + METHOD(sender, one, two, three, four, five); \ + } \ + \ + virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); + +#define CHROMEG_VIRTUAL_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<CLASS*>(userdata)-> \ + METHOD(sender, one, two, three, four, five, six); \ + } \ + \ virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); #endif diff --git a/ui/base/gtk/gtk_signal.h b/ui/base/gtk/gtk_signal.h index a6b34cd..5a9a914 100644 --- a/ui/base/gtk/gtk_signal.h +++ b/ui/base/gtk/gtk_signal.h @@ -13,28 +13,30 @@ typedef struct _GtkWidget GtkWidget; // 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*); + CHROMEG_VIRTUAL_CALLBACK_0(CLASS, RETURN, METHOD, GtkWidget*); #define CHROMEGTK_CALLBACK_1(CLASS, RETURN, METHOD, ARG1) \ - CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, GtkWidget*, ARG1); + CHROMEG_VIRTUAL_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); + CHROMEG_VIRTUAL_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); + CHROMEG_VIRTUAL_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); + CHROMEG_VIRTUAL_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); + CHROMEG_VIRTUAL_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); + CHROMEG_VIRTUAL_CALLBACK_6(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, \ + ARG3, ARG4, ARG5, ARG6); #endif // UI_BASE_GTK_GTK_SIGNAL_H_ diff --git a/ui/base/x/active_window_watcher_x.h b/ui/base/x/active_window_watcher_x.h index 16c87a3..4fa6b65 100644 --- a/ui/base/x/active_window_watcher_x.h +++ b/ui/base/x/active_window_watcher_x.h @@ -43,7 +43,7 @@ class UI_EXPORT ActiveWindowWatcherX { friend struct DefaultSingletonTraits<ActiveWindowWatcherX>; ActiveWindowWatcherX(); - virtual ~ActiveWindowWatcherX(); + ~ActiveWindowWatcherX(); void Init(); |