@ -71,7 +71,7 @@ TODO
# define KGTK_DLSYM_VERSION "GLIBC_2.0"
# endif
# define BLACKLIST_UNKNOWN_GTK_APPS 1
# define BLACKLIST_UNKNOWN_GTK_APPS 0
/*
# define KGTK_DEBUG_DLSYM
@ -672,6 +672,22 @@ kgtk_file_chooser_dialog_new_valist (const gchar *title,
return result ;
}
void
kgtk_dialog_add_buttons_valist ( GtkDialog * dialog ,
const gchar * first_button_text ,
va_list varargs )
{
const char * button_text = first_button_text ;
gint response_id ;
while ( button_text )
{
response_id = va_arg ( varargs , gint ) ;
gtk_dialog_add_button ( GTK_DIALOG ( dialog ) , button_text , response_id ) ;
button_text = va_arg ( varargs , const gchar * ) ;
}
}
/* ......................... */
gboolean gtk_init_check ( int * argc , char * * * argv )
@ -1437,6 +1453,7 @@ gint gtk_dialog_run(GtkDialog *dialog)
# ifdef KGTK_DEBUG
printf ( " KGTK::RETURN RESP:%d \n " , resp ) ;
printf ( " OK would be %d; Cancel would be %d \n \r " , data - > ok , data - > cancel ) ;
# endif
g_signal_emit_by_name ( dialog , " response " , resp ) ;
running = FALSE ;
@ -1626,8 +1643,6 @@ void gtk_file_chooser_set_current_name(GtkFileChooser *chooser, const char *file
}
}
// [FIXME]
// This function cannot pick up filenames chosen by a program such as geany
GSList * gtk_file_chooser_get_filenames ( GtkFileChooser * chooser )
{
KGtkFileData * data = lookupHash ( chooser , FALSE ) ;
@ -1889,11 +1904,52 @@ void g_signal_stop_emission_by_name(gpointer instance, const gchar *detailed_sig
# endif
}
// [FIXME]
// This needs to use the real gtk_file_chooser_dialog_new function when an app is blacklisted,
// but I don't know how to handle the variable arguments!
// On the other hand this program seems to work just fine with this function this way...hmmm...
// ...does anything need to be changed in reality?
void gtk_dialog_add_buttons ( GtkDialog * dialog , const gchar * first_button_text , . . . )
{
KGtkFileData * data = NULL ;
const char * text = first_button_text ;
gint id ;
va_list varargs ;
va_start ( varargs , first_button_text ) ;
kgtk_dialog_add_buttons_valist ( dialog , first_button_text , varargs ) ;
va_end ( varargs ) ;
determineAppName ( ) ;
if ( ( kgtkApp = = APP_UNKNOWN ) & & BLACKLIST_UNKNOWN_GTK_APPS ) {
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_dialog_add_buttons Bypassing internal function \n \r " ) ; fflush ( stdout ) ;
# endif
return ;
}
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_dialog_add_buttons \n " ) ;
# endif
data = lookupHash ( dialog , TRUE ) ;
va_start ( varargs , first_button_text ) ;
while ( text )
{
id = va_arg ( varargs , gint ) ;
if ( text & & ( 0 = = strcmp ( text , GTK_STOCK_CANCEL ) | | 0 = = strcmp ( text , GTK_STOCK_CLOSE ) | |
0 = = strcmp ( text , GTK_STOCK_QUIT ) | | 0 = = strcmp ( text , GTK_STOCK_NO ) ) ) {
data - > cancel = id ;
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_dialog_add_buttons Overriding data->cancel: %d \n \r " , data - > cancel ) ;
# endif
}
else if ( text & & ( 0 = = strcmp ( text , GTK_STOCK_OK ) | | 0 = = strcmp ( text , GTK_STOCK_OPEN ) | |
0 = = strcmp ( text , GTK_STOCK_SAVE ) | | 0 = = strcmp ( text , GTK_STOCK_YES ) ) ) {
data - > ok = id ;
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_dialog_add_buttons Overriding data->ok: %d \n \r " , data - > ok ) ;
# endif
}
text = va_arg ( varargs , const gchar * ) ;
}
}
GtkWidget * gtk_file_chooser_dialog_new ( const gchar * title , GtkWindow * parent ,
GtkFileChooserAction action , const gchar * first_button_text ,
. . . )
@ -1908,6 +1964,14 @@ GtkWidget * gtk_file_chooser_dialog_new(const gchar *title, GtkWindow *parent,
dlg = kgtk_file_chooser_dialog_new_valist ( title , parent , action , NULL , first_button_text , varargs ) ;
va_end ( varargs ) ;
determineAppName ( ) ;
if ( ( kgtkApp = = APP_UNKNOWN ) & & BLACKLIST_UNKNOWN_GTK_APPS ) {
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_file_chooser_dialog_new Bypassing internal function \n \r " ) ; fflush ( stdout ) ;
# endif
return dlg ;
}
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_file_chooser_dialog_new \n " ) ;
# endif
@ -1918,11 +1982,19 @@ GtkWidget * gtk_file_chooser_dialog_new(const gchar *title, GtkWindow *parent,
id = va_arg ( varargs , gint ) ;
if ( text & & ( 0 = = strcmp ( text , GTK_STOCK_CANCEL ) | | 0 = = strcmp ( text , GTK_STOCK_CLOSE ) | |
0 = = strcmp ( text , GTK_STOCK_QUIT ) | | 0 = = strcmp ( text , GTK_STOCK_NO ) ) )
0 = = strcmp ( text , GTK_STOCK_QUIT ) | | 0 = = strcmp ( text , GTK_STOCK_NO ) ) ) {
data - > cancel = id ;
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_file_chooser_dialog_new Overriding data->cancel: %d \n \r " , data - > cancel ) ;
# endif
}
else if ( text & & ( 0 = = strcmp ( text , GTK_STOCK_OK ) | | 0 = = strcmp ( text , GTK_STOCK_OPEN ) | |
0 = = strcmp ( text , GTK_STOCK_SAVE ) | | 0 = = strcmp ( text , GTK_STOCK_YES ) ) )
0 = = strcmp ( text , GTK_STOCK_SAVE ) | | 0 = = strcmp ( text , GTK_STOCK_YES ) ) ) {
data - > ok = id ;
# ifdef KGTK_DEBUG
printf ( " KGTK::gtk_file_chooser_dialog_new Overriding data->ok: %d \n \r " , data - > ok ) ;
# endif
}
text = va_arg ( varargs , const gchar * ) ;
}
va_end ( varargs ) ;
@ -2062,6 +2134,9 @@ static void * kgtk_get_fnptr(const char *raw_name)
else if ( 0 = = strcmp ( raw_name , " gtk_file_chooser_dialog_new " ) )
return & gtk_file_chooser_dialog_new ;
else if ( 0 = = strcmp ( raw_name , " gtk_dialog_add_buttons " ) )
return & gtk_dialog_add_buttons ;
else if ( 0 = = strcmp ( raw_name , " gtk_file_chooser_button_new " ) )
return & gtk_file_chooser_button_new ;