1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:expandtab:shiftwidth=4:tabstop=4:
3  */
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
8 #ifndef nsGtkUtils_h__
9 #define nsGtkUtils_h__
10 
11 #include <glib.h>
12 
13 // Some gobject functions expect functions for gpointer arguments.
14 // gpointer is void* but C++ doesn't like casting functions to void*.
15 template <class T>
FuncToGpointer(T aFunction)16 static inline gpointer FuncToGpointer(T aFunction) {
17   return reinterpret_cast<gpointer>(
18       reinterpret_cast<uintptr_t>
19       // This cast just provides a warning if T is not a function.
20       (reinterpret_cast<void (*)()>(aFunction)));
21 }
22 
23 #endif  // nsGtkUtils_h__
24