File indexing completed on 2024-05-12 17:05:47
0001 /* 0002 this file is part of the oxygen gtk engine 0003 SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "oxygendialogengine.h" 0009 #include "../oxygengtktypenames.h" 0010 #include "../oxygengtkutils.h" 0011 #include "../config.h" 0012 0013 #include <string> 0014 0015 namespace Oxygen 0016 { 0017 //_________________________________________________________ 0018 bool DialogEngine::registerWidget( GtkWidget* widget ) 0019 { 0020 if( contains( widget ) ) return false; 0021 0022 GtkDialog* dialog(GTK_DIALOG(widget)); 0023 0024 GtkResponseType responses[]={ 0025 GTK_RESPONSE_HELP, 0026 (GtkResponseType)1, // FIXME: This id is commonly used, but doesn't seem to be documented anywhere... 0027 GTK_RESPONSE_OK, 0028 GTK_RESPONSE_YES, 0029 GTK_RESPONSE_ACCEPT, 0030 GTK_RESPONSE_APPLY, 0031 GTK_RESPONSE_REJECT, 0032 GTK_RESPONSE_CLOSE, 0033 GTK_RESPONSE_NO, 0034 GTK_RESPONSE_CANCEL 0035 }; 0036 0037 const int numOfResponseIDs=sizeof(responses)/sizeof(responses[0]); 0038 0039 #if OXYGEN_DEBUG 0040 std::cerr<<"DialogEngine::registerWidget - Initial response table: "; 0041 for(int i=0; i<numOfResponseIDs; i++) 0042 { std::cerr << Gtk::TypeNames::response( responses[i] ) << ", "; } 0043 std::cerr<<std::endl; 0044 #endif 0045 0046 int numOfResponsesFound=0; 0047 for(int i=0; i<numOfResponseIDs; i++) 0048 { 0049 GtkWidget* button( Gtk::gtk_dialog_find_button(dialog,responses[i]) ); 0050 if( !button ) continue; 0051 0052 #if OXYGEN_DEBUG 0053 std::cerr << "responseID found: " << Gtk::TypeNames::response( responses[i] ) << "; button \"" << gtk_button_get_label(GTK_BUTTON(button)) << "\"" << std::endl; 0054 #endif 0055 // i is always >= numOfResponsesFound, so this will copy response id nearer to start, but never to end 0056 responses[numOfResponsesFound]=responses[i]; 0057 numOfResponsesFound++; 0058 0059 } 0060 0061 #if OXYGEN_DEBUG 0062 std::cerr << "DialogEngine::registerWidget - numOfResponsesFound: " << numOfResponsesFound << std::endl; 0063 std::cerr << "List of responses found: { "; 0064 0065 for(int i=0; i<numOfResponsesFound; i++) 0066 { std::cerr << Gtk::TypeNames::response( responses[i] ) << (i==numOfResponsesFound-1 ? " " :", "); } 0067 0068 std::cerr << "}; remaining in the list: { "; 0069 0070 for(int i=numOfResponsesFound; i<numOfResponseIDs; i++) 0071 { std::cerr << Gtk::TypeNames::response( responses[i] ) << (i==numOfResponseIDs-1 ? " " :", "); } 0072 0073 std::cerr << "}\n"; 0074 #endif 0075 0076 // change order 0077 gtk_dialog_set_alternative_button_order_from_array( dialog, numOfResponsesFound, (gint*) responses ); 0078 0079 // insert in set 0080 _data.insert( widget ); 0081 0082 // call base class 0083 BaseEngine::registerWidget( widget ); 0084 return true; 0085 0086 } 0087 }