Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_BASE_GLIB_GLIB_SIGNAL_H_ | 5 #ifndef UI_BASE_GLIB_GLIB_SIGNAL_H_ |
| 6 #define UI_BASE_GLIB_GLIB_SIGNAL_H_ | 6 #define UI_BASE_GLIB_GLIB_SIGNAL_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 typedef void* gpointer; | 9 typedef void* gpointer; |
| 10 | 10 |
| 11 // At the time of writing this, there were two common ways of binding our C++ | 11 // At the time of writing this, there were two common ways of binding our C++ |
| 12 // code to the gobject C system. We either defined a whole bunch of "static | 12 // code to the gobject C system. We either defined a whole bunch of "static |
| 13 // MethodThunk()" which just called nonstatic Method()s on a class (which hurt | 13 // MethodThunk()" which just called nonstatic Method()s on a class (which hurt |
| 14 // readability of the headers and signal connection code) OR we declared | 14 // readability of the headers and signal connection code) OR we declared |
| 15 // "static Method()" and passed in the current object as the gpointer (and hurt | 15 // "static Method()" and passed in the current object as the gpointer (and hurt |
| 16 // readability in the implementation by having "context->" before every | 16 // readability in the implementation by having "context->" before every |
| 17 // variable). | 17 // variable). |
| 18 | 18 |
| 19 // The hopeful result of using these macros is that the code will be more | 19 // The hopeful result of using these macros is that the code will be more |
| 20 // readable and regular. There shouldn't be a bunch of static Thunks visible in | 20 // readable and regular. There shouldn't be a bunch of static Thunks visible in |
| 21 // the headers and the implementations shouldn't be filled with "context->" | 21 // the headers and the implementations shouldn't be filled with "context->" |
| 22 // de-references. | 22 // de-references. |
| 23 | 23 |
| 24 #define CHROMEG_CALLBACK_0(CLASS, RETURN, METHOD, SENDER) \ | 24 #define CHROMEG_CALLBACK_0(CLASS, RETURN, METHOD, SENDER) \ |
|
tfarina
2011/11/11 19:28:16
since this in ui/base/ directory, would we rename
| |
| 25 static RETURN METHOD ## Thunk(SENDER sender, gpointer userdata) { \ | 25 static RETURN METHOD ## Thunk(SENDER sender, gpointer userdata) { \ |
| 26 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender); \ | 26 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender); \ |
| 27 } \ | 27 } \ |
| 28 \ | 28 \ |
| 29 virtual RETURN METHOD(SENDER); | 29 RETURN METHOD(SENDER); |
| 30 | 30 |
| 31 #define CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ | 31 #define CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ |
| 32 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ | 32 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ |
| 33 gpointer userdata) { \ | 33 gpointer userdata) { \ |
| 34 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \ | 34 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \ |
| 35 } \ | 35 } \ |
| 36 \ | 36 \ |
| 37 virtual RETURN METHOD(SENDER, ARG1); | 37 RETURN METHOD(SENDER, ARG1); |
| 38 | 38 |
| 39 #define CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ | 39 #define CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ |
| 40 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | 40 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ |
| 41 gpointer userdata) { \ | 41 gpointer userdata) { \ |
| 42 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one, two); \ | 42 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one, two); \ |
| 43 } \ | 43 } \ |
| 44 \ | 44 \ |
| 45 virtual RETURN METHOD(SENDER, ARG1, ARG2); | 45 RETURN METHOD(SENDER, ARG1, ARG2); |
| 46 | 46 |
| 47 #define CHROMEG_CALLBACK_3(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3) \ | 47 #define CHROMEG_CALLBACK_3(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3) \ |
| 48 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | 48 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ |
| 49 ARG3 three, gpointer userdata) { \ | 49 ARG3 three, gpointer userdata) { \ |
| 50 return reinterpret_cast<CLASS*>(userdata)-> \ | 50 return reinterpret_cast<CLASS*>(userdata)-> \ |
| 51 METHOD(sender, one, two, three); \ | 51 METHOD(sender, one, two, three); \ |
| 52 } \ | 52 } \ |
| 53 \ | 53 \ |
| 54 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3); | 54 RETURN METHOD(SENDER, ARG1, ARG2, ARG3); |
| 55 | 55 |
| 56 #define CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ | 56 #define CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ |
| 57 ARG4) \ | 57 ARG4) \ |
| 58 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | 58 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ |
| 59 ARG3 three, ARG4 four, \ | 59 ARG3 three, ARG4 four, \ |
| 60 gpointer userdata) { \ | 60 gpointer userdata) { \ |
| 61 return reinterpret_cast<CLASS*>(userdata)-> \ | 61 return reinterpret_cast<CLASS*>(userdata)-> \ |
| 62 METHOD(sender, one, two, three, four); \ | 62 METHOD(sender, one, two, three, four); \ |
| 63 } \ | 63 } \ |
| 64 \ | 64 \ |
| 65 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); | 65 RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); |
| 66 | 66 |
| 67 #define CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ | 67 #define CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ |
| 68 ARG4, ARG5) \ | 68 ARG4, ARG5) \ |
| 69 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | 69 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ |
| 70 ARG3 three, ARG4 four, ARG5 five, \ | 70 ARG3 three, ARG4 four, ARG5 five, \ |
| 71 gpointer userdata) { \ | 71 gpointer userdata) { \ |
| 72 return reinterpret_cast<CLASS*>(userdata)-> \ | 72 return reinterpret_cast<CLASS*>(userdata)-> \ |
| 73 METHOD(sender, one, two, three, four, five); \ | 73 METHOD(sender, one, two, three, four, five); \ |
| 74 } \ | 74 } \ |
| 75 \ | 75 \ |
| 76 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); | 76 RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); |
| 77 | 77 |
| 78 #define CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ | 78 #define CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, ARG3, \ |
| 79 ARG4, ARG5, ARG6) \ | 79 ARG4, ARG5, ARG6) \ |
| 80 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | 80 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ |
| 81 ARG3 three, ARG4 four, ARG5 five, \ | 81 ARG3 three, ARG4 four, ARG5 five, \ |
| 82 ARG6 six, gpointer userdata) { \ | 82 ARG6 six, gpointer userdata) { \ |
| 83 return reinterpret_cast<CLASS*>(userdata)-> \ | 83 return reinterpret_cast<CLASS*>(userdata)-> \ |
| 84 METHOD(sender, one, two, three, four, five, six); \ | 84 METHOD(sender, one, two, three, four, five, six); \ |
| 85 } \ | 85 } \ |
| 86 \ | 86 \ |
| 87 RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); | |
| 88 | |
| 89 #define CHROMEG_VIRTUAL_CALLBACK_0(CLASS, RETURN, METHOD, SENDER) \ | |
| 90 static RETURN METHOD ## Thunk(SENDER sender, gpointer userdata) { \ | |
| 91 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender); \ | |
| 92 } \ | |
| 93 \ | |
| 94 virtual RETURN METHOD(SENDER); | |
| 95 | |
| 96 #define CHROMEG_VIRTUAL_CALLBACK_1(CLASS, RETURN, METHOD, SENDER, ARG1) \ | |
| 97 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, \ | |
| 98 gpointer userdata) { \ | |
| 99 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one); \ | |
| 100 } \ | |
| 101 \ | |
| 102 virtual RETURN METHOD(SENDER, ARG1); | |
| 103 | |
| 104 #define CHROMEG_VIRTUAL_CALLBACK_2(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2) \ | |
| 105 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | |
| 106 gpointer userdata) { \ | |
| 107 return reinterpret_cast<CLASS*>(userdata)->METHOD(sender, one, two); \ | |
| 108 } \ | |
| 109 \ | |
| 110 virtual RETURN METHOD(SENDER, ARG1, ARG2); | |
| 111 | |
| 112 #define CHROMEG_VIRTUAL_CALLBACK_3(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, \ | |
| 113 ARG3) \ | |
| 114 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | |
| 115 ARG3 three, gpointer userdata) { \ | |
| 116 return reinterpret_cast<CLASS*>(userdata)-> \ | |
| 117 METHOD(sender, one, two, three); \ | |
| 118 } \ | |
| 119 \ | |
| 120 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3); | |
| 121 | |
| 122 #define CHROMEG_VIRTUAL_CALLBACK_4(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, \ | |
| 123 ARG3, ARG4) \ | |
| 124 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | |
| 125 ARG3 three, ARG4 four, \ | |
| 126 gpointer userdata) { \ | |
| 127 return reinterpret_cast<CLASS*>(userdata)-> \ | |
| 128 METHOD(sender, one, two, three, four); \ | |
| 129 } \ | |
| 130 \ | |
| 131 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4); | |
| 132 | |
| 133 #define CHROMEG_VIRTUAL_CALLBACK_5(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, \ | |
| 134 ARG3, ARG4, ARG5) \ | |
| 135 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | |
| 136 ARG3 three, ARG4 four, ARG5 five, \ | |
| 137 gpointer userdata) { \ | |
| 138 return reinterpret_cast<CLASS*>(userdata)-> \ | |
| 139 METHOD(sender, one, two, three, four, five); \ | |
| 140 } \ | |
| 141 \ | |
| 142 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5); | |
| 143 | |
| 144 #define CHROMEG_VIRTUAL_CALLBACK_6(CLASS, RETURN, METHOD, SENDER, ARG1, ARG2, \ | |
| 145 ARG3, ARG4, ARG5, ARG6) \ | |
| 146 static RETURN METHOD ## Thunk(SENDER sender, ARG1 one, ARG2 two, \ | |
| 147 ARG3 three, ARG4 four, ARG5 five, \ | |
| 148 ARG6 six, gpointer userdata) { \ | |
| 149 return reinterpret_cast<CLASS*>(userdata)-> \ | |
| 150 METHOD(sender, one, two, three, four, five, six); \ | |
| 151 } \ | |
| 152 \ | |
| 87 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); | 153 virtual RETURN METHOD(SENDER, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); |
| 88 | 154 |
| 89 #endif | 155 #endif |
| OLD | NEW |