File indexing completed on 2024-05-12 05:34:35
0001 0002 /* 0003 * this file is part of the oxygen gtk engine 0004 * SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "oxygensignal.h" 0010 #include "../config.h" 0011 0012 #include <iostream> 0013 0014 namespace Oxygen 0015 { 0016 0017 #if OXYGEN_DEBUG 0018 static int counter( 0 ); 0019 #endif 0020 0021 //____________________________________________________________________ 0022 bool Signal::connect( GObject* object, const std::string& signal, GCallback callback, gpointer data, bool after ) 0023 { 0024 // make sure that signal is not already connected 0025 assert( _object == 0L && _id == 0 ); 0026 0027 // check object 0028 if( !object ) return false; 0029 0030 // first try lookup signal 0031 if( !g_signal_lookup( signal.c_str(), G_OBJECT_TYPE(object) ) ) 0032 { 0033 0034 #if OXYGEN_DEBUG 0035 std::cerr << "Oxygen::Signal::connect - signal " << signal << " not installed on widget " << object << std::endl; 0036 #endif 0037 0038 return false; 0039 0040 } 0041 0042 // store attributes and create connection 0043 _object = object; 0044 if(after) _id = g_signal_connect_after( object, signal.c_str(), callback, data ); 0045 else _id = g_signal_connect( object, signal.c_str(), callback, data ); 0046 0047 #if OXYGEN_DEBUG 0048 ++counter; 0049 std::cerr << "Oxygen::Signal::connect - _id: " << _id << " counter: " << counter << std::endl; 0050 #endif 0051 0052 return true; 0053 0054 } 0055 0056 //____________________________________________________________________ 0057 void Signal::disconnect( void ) 0058 { 0059 0060 // disconnect signal 0061 if( _object && _id > 0 ) 0062 { 0063 0064 #if OXYGEN_DEBUG 0065 --counter; 0066 std::cerr << "Oxygen::Signal::disconnect - _id: " << _id << " counter: " << counter << std::endl; 0067 #endif 0068 0069 g_signal_handler_disconnect( _object, _id ); 0070 0071 } 0072 0073 // reset members 0074 _object = 0L; 0075 _id = 0; 0076 0077 } 0078 0079 }