20#if HAVE_DLSYM && HAVE_DLFCN_H 
   33typedef void* gpointer;
 
   35typedef unsigned int    guint;
 
   36typedef unsigned long   gulong;
 
   39typedef struct _GSList GSList;
 
   45#define  g_slist_next(slist)             ((slist) ? (((GSList *)(slist))->next) : NULL) 
   46typedef struct _GtkWidget      GtkWidget;
 
   47typedef struct _GtkFileChooser      GtkFileChooser;
 
   48typedef struct _GtkDialog        GtkDialog;
 
   49typedef struct _GtkWindow          GtkWindow;
 
   50typedef struct _GdkDrawable           GdkWindow;
 
   51typedef struct _GtkFileFilter     GtkFileFilter;
 
   52typedef struct _GtkToggleButton       GtkToggleButton;
 
   54  GTK_FILE_FILTER_FILENAME     = 1 << 0,
 
   55  GTK_FILE_FILTER_URI          = 1 << 1,
 
   56  GTK_FILE_FILTER_DISPLAY_NAME = 1 << 2,
 
   57  GTK_FILE_FILTER_MIME_TYPE    = 1 << 3
 
   59struct _GtkFileFilterInfo
 
   61  GtkFileFilterFlags contains;
 
   63  const gchar *filename;
 
   65  const gchar *display_name;
 
   66  const gchar *mime_type;
 
   68typedef struct _GtkFileFilterInfo GtkFileFilterInfo;
 
   69typedef gboolean (*GtkFileFilterFunc) (
const GtkFileFilterInfo *filter_info, gpointer data);
 
   70typedef void (*GDestroyNotify)(gpointer data);
 
   73  GTK_FILE_CHOOSER_ACTION_OPEN,
 
   74  GTK_FILE_CHOOSER_ACTION_SAVE,
 
   75  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
 
   76  GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
 
   77} GtkFileChooserAction;
 
   78#define GTK_STOCK_CANCEL           "gtk-cancel" 
   79#define GTK_STOCK_SAVE             "gtk-save" 
   80#define GTK_STOCK_OPEN             "gtk-open" 
   81const int   GTK_RESPONSE_NONE = -1;
 
   82const int   GTK_RESPONSE_ACCEPT = -3;
 
   83const int   GTK_RESPONSE_DELETE_EVENT = -4;
 
   84const int   GTK_RESPONSE_CANCEL = -6;
 
   85typedef void  (*GCallback)(void);
 
   86#define G_CALLBACK(f)                    ((GCallback) (f)) 
   87typedef int GConnectFlags;
 
   88typedef struct _GClosure                 GClosure;
 
   89typedef void  (*GClosureNotify)(gpointer data, GClosure *closure);
 
   93int Fl_GTK_File_Chooser::did_find_GTK_libs = 0;
 
   98typedef void (*XX_g_free)(gpointer);
 
   99static XX_g_free fl_g_free = NULL;
 
  102typedef gpointer (*XX_g_slist_nth_data) (GSList *, guint);
 
  103static XX_g_slist_nth_data fl_g_slist_nth_data = NULL;
 
  106typedef guint (*XX_g_slist_length) (GSList *);
 
  107static XX_g_slist_length fl_g_slist_length = NULL;
 
  110typedef void (*XX_g_slist_free) (GSList *);
 
  111static XX_g_slist_free fl_g_slist_free = NULL;
 
  114typedef gboolean (*XX_gtk_init_check)(
int *, 
char ***);
 
  115static XX_gtk_init_check fl_gtk_init_check = NULL;
 
  118typedef void (*XX_gtk_widget_destroy) (GtkWidget *);
 
  119static XX_gtk_widget_destroy fl_gtk_widget_destroy = NULL;
 
  122typedef void (*XX_gtk_file_chooser_set_select_multiple)(GtkFileChooser *, gboolean);
 
  123static XX_gtk_file_chooser_set_select_multiple fl_gtk_file_chooser_set_select_multiple = NULL;
 
  126typedef void (*XX_gtk_file_chooser_set_do_overwrite_confirmation)(GtkFileChooser *, gboolean);
 
  127static XX_gtk_file_chooser_set_do_overwrite_confirmation fl_gtk_file_chooser_set_do_overwrite_confirmation = NULL;
 
  130typedef void (*XX_gtk_file_chooser_set_current_name)(GtkFileChooser *, 
const gchar *);
 
  131static XX_gtk_file_chooser_set_current_name fl_gtk_file_chooser_set_current_name = NULL;
 
  134typedef void (*XX_gtk_file_chooser_set_current_folder)(GtkFileChooser *, 
const gchar *);
 
  135static XX_gtk_file_chooser_set_current_folder fl_gtk_file_chooser_set_current_folder = NULL;
 
  138typedef void (*XX_gtk_file_chooser_set_create_folders) (GtkFileChooser *, gboolean);
 
  139static XX_gtk_file_chooser_set_create_folders fl_gtk_file_chooser_set_create_folders = NULL;
 
  142typedef gboolean (*XX_gtk_file_chooser_get_select_multiple)(GtkFileChooser *);
 
  143static XX_gtk_file_chooser_get_select_multiple fl_gtk_file_chooser_get_select_multiple = NULL;
 
  146typedef void (*XX_gtk_widget_hide)(GtkWidget *);
 
  147static XX_gtk_widget_hide fl_gtk_widget_hide = NULL;
 
  150typedef gchar* (*XX_gtk_file_chooser_get_filename)(GtkFileChooser *);
 
  151static XX_gtk_file_chooser_get_filename fl_gtk_file_chooser_get_filename = NULL;
 
  154typedef GSList* (*XX_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser);
 
  155static XX_gtk_file_chooser_get_filenames fl_gtk_file_chooser_get_filenames = NULL;
 
  158typedef gboolean (*XX_gtk_main_iteration)(void);
 
  159static XX_gtk_main_iteration fl_gtk_main_iteration = NULL;
 
  162typedef gboolean (*XX_gtk_events_pending)(void);
 
  163static XX_gtk_events_pending fl_gtk_events_pending = NULL;
 
  166typedef GtkWidget* (*XX_gtk_file_chooser_dialog_new)(
const gchar *, GtkWindow *, GtkFileChooserAction, 
const gchar *, ...);
 
  167static XX_gtk_file_chooser_dialog_new fl_gtk_file_chooser_dialog_new = NULL;
 
  170typedef void (*XX_gtk_file_chooser_add_filter)(GtkFileChooser*, GtkFileFilter*);
 
  171static XX_gtk_file_chooser_add_filter fl_gtk_file_chooser_add_filter = NULL;
 
  174typedef GtkFileFilter* (*XX_gtk_file_chooser_get_filter)(GtkFileChooser*);
 
  175static XX_gtk_file_chooser_get_filter fl_gtk_file_chooser_get_filter = NULL;
 
  178typedef void (*XX_gtk_file_chooser_set_filter)(GtkFileChooser*, GtkFileFilter*);
 
  179static XX_gtk_file_chooser_set_filter fl_gtk_file_chooser_set_filter = NULL;
 
  182typedef GtkFileFilter* (*XX_gtk_file_filter_new)(void);
 
  183static XX_gtk_file_filter_new fl_gtk_file_filter_new = NULL;
 
  186typedef void (*XX_gtk_file_filter_add_pattern)(GtkFileFilter*, 
const gchar*);
 
  187static XX_gtk_file_filter_add_pattern fl_gtk_file_filter_add_pattern = NULL;
 
  191typedef void (*XX_gtk_file_filter_add_custom)(GtkFileFilter *filter, GtkFileFilterFlags needed,
 
  192                                              GtkFileFilterFunc func, gpointer data, 
 
  193                                              GDestroyNotify notify);
 
  194static XX_gtk_file_filter_add_custom fl_gtk_file_filter_add_custom = NULL;
 
  197typedef void (*XX_gtk_file_filter_set_name)(GtkFileFilter*, 
const gchar*);
 
  198static XX_gtk_file_filter_set_name fl_gtk_file_filter_set_name = NULL;
 
  201typedef const gchar* (*XX_gtk_file_filter_get_name)(GtkFileFilter*);
 
  202static XX_gtk_file_filter_get_name fl_gtk_file_filter_get_name = NULL;
 
  205typedef void (*XX_gtk_file_chooser_set_extra_widget)(GtkFileChooser *, GtkWidget *);
 
  206static XX_gtk_file_chooser_set_extra_widget fl_gtk_file_chooser_set_extra_widget = NULL;
 
  209typedef void (*XX_gtk_widget_show_now)(GtkWidget *);
 
  210static XX_gtk_widget_show_now fl_gtk_widget_show_now = NULL;
 
  213typedef GdkWindow* (*XX_gtk_widget_get_window)(GtkWidget *);
 
  214static XX_gtk_widget_get_window fl_gtk_widget_get_window = NULL;
 
  217typedef Window (*XX_gdk_x11_drawable_get_xid)(GdkWindow *);
 
  218static XX_gdk_x11_drawable_get_xid fl_gdk_x11_drawable_get_xid = NULL;
 
  221typedef GtkWidget* (*XX_gtk_check_button_new_with_label)(
const gchar *);
 
  222static XX_gtk_check_button_new_with_label fl_gtk_check_button_new_with_label = NULL;
 
  225typedef gulong (*XX_g_signal_connect_data)(gpointer, 
const gchar *, GCallback, gpointer, GClosureNotify, GConnectFlags);
 
  226static XX_g_signal_connect_data fl_g_signal_connect_data = NULL;
 
  229typedef gboolean (*XX_gtk_toggle_button_get_active)(GtkToggleButton*);
 
  230static XX_gtk_toggle_button_get_active fl_gtk_toggle_button_get_active = NULL;
 
  233typedef void (*XX_gtk_file_chooser_set_show_hidden)(GtkFileChooser *, gboolean);
 
  234static XX_gtk_file_chooser_set_show_hidden fl_gtk_file_chooser_set_show_hidden = NULL;
 
  237typedef gboolean (*XX_gtk_file_chooser_get_show_hidden)(GtkFileChooser *);
 
  238static XX_gtk_file_chooser_get_show_hidden fl_gtk_file_chooser_get_show_hidden = NULL;
 
  241typedef void (*XX_gtk_toggle_button_set_active)(GtkToggleButton *, gboolean);
 
  242static XX_gtk_toggle_button_set_active fl_gtk_toggle_button_set_active = NULL;
 
  250  gtkw_filename = NULL; 
 
  253  previous_filter = NULL;
 
  256Fl_GTK_File_Chooser::~Fl_GTK_File_Chooser()
 
  260    fl_gtk_widget_destroy (gtkw_ptr);
 
  264    fl_g_free(gtkw_filename);
 
  265    gtkw_filename = NULL;
 
  268    GSList *iter = (GSList *)gtkw_slist;
 
  270      if(iter->data) fl_g_free(iter->data);
 
  271      iter = g_slist_next(iter);
 
  273    fl_g_slist_free((GSList *)gtkw_slist);
 
  277  gtkw_title = strfree(gtkw_title);
 
  280void Fl_GTK_File_Chooser::type(
int val) {
 
  284int Fl_GTK_File_Chooser::count()
 const {
 
  288const char *Fl_GTK_File_Chooser::filename()
 const 
  291    if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
 
  292      return gtkw_filename;
 
  295      GSList *iter = (GSList *)gtkw_slist;
 
  296      char *nm = (
char *)iter->data;
 
  303const char *Fl_GTK_File_Chooser::filename(
int i)
 const 
  305  if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
 
  306    return gtkw_filename;
 
  309    if ((
unsigned)i < gtkw_count) {
 
  310      GSList *iter = (GSList *)gtkw_slist;
 
  311      char *nm = (
char *)fl_g_slist_nth_data(iter, i);
 
  318void Fl_GTK_File_Chooser::title(
const char *val)
 
  321  gtkw_title = strnew(val);
 
  324const char* Fl_GTK_File_Chooser::title()
 const 
  330void Fl_GTK_File_Chooser::changed_output_type(
const char *filter)
 
  333  if (strchr(filter, 
'(') || strchr(filter, 
'{') || strchr(filter+1, 
'*') || strncmp(filter, 
"*.", 2)) 
return;
 
  334  const char *p = fl_gtk_file_chooser_get_filename((GtkFileChooser*)gtkw_ptr);
 
  337  const char *q = strrchr(p, 
'.');
 
  338  if (!q) q = p + strlen(p);
 
  339  char *r = 
new char[strlen(p) + strlen(filter)];
 
  341  strcpy(r + (q - p), filter + 1);
 
  342  fl_gtk_file_chooser_set_current_name((GtkFileChooser*)gtkw_ptr, r);
 
  348gboolean Fl_GTK_File_Chooser::custom_gtk_filter_function(
const GtkFileFilterInfo *info, Fl_GTK_File_Chooser::pair* p)
 
  350  if (p->running->previous_filter != p->filter) {
 
  351    p->running->changed_output_type(p->filter);
 
  352    p->running->previous_filter = p->filter;
 
  357void Fl_GTK_File_Chooser::free_pair(Fl_GTK_File_Chooser::pair *p)
 
  362static void hidden_files_cb(GtkToggleButton *togglebutton, gpointer user_data)
 
  364  gboolean state = fl_gtk_toggle_button_get_active(togglebutton);
 
  365  fl_gtk_file_chooser_set_show_hidden((GtkFileChooser*)user_data, state);
 
  368int Fl_GTK_File_Chooser::show()
 
  374  static bool first = 
true;
 
  377  static char *gtk_wants = NULL;
 
  380  p = setlocale(LC_ALL, NULL);
 
  381  if (p) before = strdup(p);
 
  383    setlocale(LC_ALL, gtk_wants);
 
  385  int retval = fl_gtk_chooser_wrapper(); 
 
  389    p = setlocale(LC_ALL, NULL);
 
  390    if (p) gtk_wants = strdup(p);
 
  393    setlocale(LC_ALL, before); 
 
  399static char *extract_dir_from_path(
const char *path)
 
  401  static char *dir = NULL;
 
  405  if (*path != 
'/') 
return NULL;
 
  409    char *p = strrchr(dir, 
'/');
 
  417static void run_response_handler(GtkDialog *dialog, gint response_id, gpointer data)
 
  419  gint *ri = (gint *)data;
 
  424int Fl_GTK_File_Chooser::fl_gtk_chooser_wrapper()
 
  427  static int have_gtk_init = 0;
 
  433    fl_gtk_init_check(&ac, NULL);
 
  437    fl_gtk_widget_destroy (gtkw_ptr);
 
  442  GtkFileChooserAction gtw_action_type;
 
  446      gtw_action_type = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
 
  450      gtw_action_type = GTK_FILE_CHOOSER_ACTION_SAVE;
 
  454      gtw_action_type = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
 
  460      gtw_action_type = GTK_FILE_CHOOSER_ACTION_OPEN;
 
  464  gtkw_ptr = fl_gtk_file_chooser_dialog_new (gtkw_title,
 
  467                                             GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 
  468                                             gtw_action_type == GTK_FILE_CHOOSER_ACTION_SAVE || gtw_action_type == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER ? 
 
  469                                             GTK_STOCK_SAVE : GTK_STOCK_OPEN, 
 
  482      fl_gtk_file_chooser_set_select_multiple((GtkFileChooser *)gtkw_ptr, TRUE);
 
  486      if (_preset_file)fl_gtk_file_chooser_set_current_name ((GtkFileChooser *)gtkw_ptr, 
fl_filename_name(_preset_file));
 
  489      fl_gtk_file_chooser_set_create_folders((GtkFileChooser *)gtkw_ptr, TRUE);
 
  499  if (_directory && _directory[0]) {
 
  500    p = extract_dir_from_path(_directory);
 
  501    if (p) fl_gtk_file_chooser_set_current_folder((GtkFileChooser *)gtkw_ptr, p);
 
  503  else if (_preset_file) {
 
  504    p = extract_dir_from_path(_preset_file);
 
  505    if (p) fl_gtk_file_chooser_set_current_folder((GtkFileChooser *)gtkw_ptr, p);
 
  508  GtkFileFilter **filter_tab = NULL;
 
  510    filter_tab = 
new GtkFileFilter*[_nfilters];
 
  511    char *filter = strdup(_parsedfilt);
 
  512    p = strtok(filter, 
"\t");
 
  515      filter_tab[count] = fl_gtk_file_filter_new();
 
  516      fl_gtk_file_filter_set_name(filter_tab[count], p);
 
  517      p = strchr(p, 
'(') + 1;
 
  518      char *q = strchr(p, 
')'); *q = 0;
 
  519      fl_gtk_file_filter_add_custom(filter_tab[count], 
 
  520                                    GTK_FILE_FILTER_FILENAME, 
 
  521                                    (GtkFileFilterFunc)Fl_GTK_File_Chooser::custom_gtk_filter_function, 
 
  522                                    new Fl_GTK_File_Chooser::pair(
this, p), 
 
  523                                    (GDestroyNotify)Fl_GTK_File_Chooser::free_pair);
 
  524      fl_gtk_file_chooser_add_filter((GtkFileChooser *)gtkw_ptr, filter_tab[count]);
 
  525      p = strtok(NULL, 
"\t");
 
  529    fl_gtk_file_chooser_set_filter((GtkFileChooser *)gtkw_ptr, filter_tab[_filtvalue < _nfilters?_filtvalue:0]);
 
  530    previous_filter = NULL;
 
  531    if (gtw_action_type == GTK_FILE_CHOOSER_ACTION_OPEN) {
 
  532      GtkFileFilter* gfilter = fl_gtk_file_filter_new();
 
  534      fl_gtk_file_filter_add_pattern(gfilter, 
"*");
 
  535      fl_gtk_file_chooser_add_filter((GtkFileChooser *)gtkw_ptr, gfilter);
 
  540  fl_gtk_file_chooser_set_extra_widget((GtkFileChooser *)gtkw_ptr, toggle);
 
  541  fl_g_signal_connect_data(toggle, 
"toggled", G_CALLBACK(hidden_files_cb), gtkw_ptr, NULL, (GConnectFlags) 0);
 
  543  fl_gtk_widget_show_now(gtkw_ptr); 
 
  545    GdkWindow* gdkw = fl_gtk_widget_get_window(gtkw_ptr);
 
  546    Window xw = fl_gdk_x11_drawable_get_xid(gdkw); 
 
  547    XSetTransientForHint(fl_display, xw, fl_xid(firstw)); 
 
  549  gboolean state = fl_gtk_file_chooser_get_show_hidden((GtkFileChooser *)gtkw_ptr);
 
  550  fl_gtk_toggle_button_set_active((GtkToggleButton *)toggle, state);
 
  552  gint response_id = GTK_RESPONSE_NONE;
 
  553  fl_g_signal_connect_data(gtkw_ptr, 
"response", G_CALLBACK(run_response_handler), &response_id, NULL, (GConnectFlags) 0);
 
  554  while (response_id == GTK_RESPONSE_NONE) { 
 
  555    fl_gtk_main_iteration(); 
 
  556    while (XEventsQueued(fl_display, QueuedAfterReading)) { 
 
  558      XNextEvent(fl_display, &xevent);
 
  559      Window xid = xevent.xany.window;
 
  560      if (xevent.type == ConfigureNotify) xid = xevent.xmaprequest.window;
 
  561      if (!fl_find(xid)) 
continue; 
 
  563      if ( xevent.type == Expose || xevent.type == ConfigureNotify ) fl_handle(xevent); 
 
  568  if (response_id == GTK_RESPONSE_ACCEPT) {
 
  570      GtkFileFilter *gfilter = fl_gtk_file_chooser_get_filter((GtkFileChooser *)gtkw_ptr);
 
  571      for (_filtvalue = 0; _filtvalue < _nfilters; _filtvalue++) {
 
  572        if (filter_tab[_filtvalue] == gfilter) 
break;
 
  578      fl_g_free(gtkw_filename);
 
  579      gtkw_filename = NULL;
 
  582      GSList *iter = (GSList *)gtkw_slist;
 
  584        if(iter->data) fl_g_free(iter->data);
 
  585        iter = g_slist_next(iter);
 
  587      fl_g_slist_free((GSList *)gtkw_slist);
 
  592    if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
 
  593      gtkw_filename = fl_gtk_file_chooser_get_filename ((GtkFileChooser *)gtkw_ptr);
 
  601      gtkw_slist = fl_gtk_file_chooser_get_filenames((GtkFileChooser *)gtkw_ptr);
 
  602      gtkw_count = fl_g_slist_length((GSList *)gtkw_slist);
 
  603      if(gtkw_count) result = 0;
 
  616  if ( response_id == GTK_RESPONSE_DELETE_EVENT) gtkw_ptr = NULL;
 
  617  else fl_gtk_widget_hide (gtkw_ptr);
 
  621  while (fl_gtk_events_pending ()) fl_gtk_main_iteration (); 
 
  626#if HAVE_DLSYM && HAVE_DLFCN_H 
  628#  define GET_SYM(SSS, LLL) \ 
  630fl_##SSS = (XX_##SSS)dlsym(LLL, #SSS);        \ 
  631if ((pc_dl_error = dlerror()) != NULL)  {     \ 
  632fprintf(stderr, "%s\n", pc_dl_error);       \ 
  633did_find_GTK_libs = 0;                      \ 
  636static void* fl_dlopen(
const char *filename1, 
const char *filename2)
 
  638  void *ptr = dlopen(filename1, RTLD_LAZY | RTLD_GLOBAL);
 
  639  if (!ptr) ptr = dlopen(filename2, RTLD_LAZY | RTLD_GLOBAL);
 
  649void Fl_GTK_File_Chooser::probe_for_GTK_libs(
void) {
 
  650#if HAVE_DLSYM && HAVE_DLFCN_H 
  651  void *ptr_glib    = NULL;
 
  652  void *ptr_gtk     = NULL;
 
  655  ptr_glib    = dlopen(
"/sw/lib/libglib-2.0.dylib", RTLD_LAZY | RTLD_GLOBAL);
 
  657  ptr_glib    = fl_dlopen(
"libglib-2.0.so", 
"libglib-2.0.so.0");
 
  661  ptr_gtk     = dlopen(
"/sw/lib/libgtk-x11-2.0.dylib", RTLD_LAZY | RTLD_GLOBAL);
 
  663  ptr_gtk     = fl_dlopen(
"libgtk-x11-2.0.so", 
"libgtk-x11-2.0.so.0");
 
  665  if (ptr_gtk && ptr_glib) {
 
  667    puts(
"selected GTK-2\n");
 
  671    ptr_gtk     = fl_dlopen(
"libgtk-3.so", 
"libgtk-3.so.0");
 
  673    if (ptr_gtk && ptr_glib) {
 
  674      puts(
"selected GTK-3\n");
 
  679  if((!ptr_glib) || (!ptr_gtk)) {
 
  681    puts(
"Failure to load libglib or libgtk");
 
  683    did_find_GTK_libs = 0;
 
  689  GET_SYM(g_free, ptr_glib);
 
  690  GET_SYM(g_slist_nth_data, ptr_glib);
 
  691  GET_SYM(g_slist_length, ptr_glib);
 
  692  GET_SYM(g_slist_free, ptr_glib);
 
  694  GET_SYM(gtk_init_check, ptr_gtk);
 
  695  GET_SYM(gtk_widget_destroy, ptr_gtk);
 
  696  GET_SYM(gtk_file_chooser_set_select_multiple, ptr_gtk);
 
  697  GET_SYM(gtk_file_chooser_set_do_overwrite_confirmation, ptr_gtk);
 
  698  GET_SYM(gtk_file_chooser_set_current_name, ptr_gtk);
 
  699  GET_SYM(gtk_file_chooser_set_current_folder, ptr_gtk);
 
  700  GET_SYM(gtk_file_chooser_set_create_folders, ptr_gtk);
 
  701  GET_SYM(gtk_file_chooser_get_select_multiple, ptr_gtk);
 
  702  GET_SYM(gtk_widget_hide, ptr_gtk);
 
  703  GET_SYM(gtk_file_chooser_get_filename, ptr_gtk);
 
  704  GET_SYM(gtk_file_chooser_get_filenames, ptr_gtk);
 
  705  GET_SYM(gtk_main_iteration, ptr_gtk);
 
  706  GET_SYM(gtk_events_pending, ptr_gtk);
 
  707  GET_SYM(gtk_file_chooser_dialog_new, ptr_gtk);
 
  708  GET_SYM(gtk_file_chooser_add_filter, ptr_gtk);
 
  709  GET_SYM(gtk_file_chooser_get_filter, ptr_gtk);
 
  710  GET_SYM(gtk_file_chooser_set_filter, ptr_gtk);
 
  711  GET_SYM(gtk_file_filter_new, ptr_gtk);
 
  712  GET_SYM(gtk_file_filter_add_pattern, ptr_gtk);
 
  713  GET_SYM(gtk_file_filter_add_custom, ptr_gtk);
 
  714  GET_SYM(gtk_file_filter_set_name, ptr_gtk);
 
  715  GET_SYM(gtk_file_filter_get_name, ptr_gtk);
 
  716  GET_SYM(gtk_file_chooser_set_extra_widget, ptr_gtk);
 
  717  GET_SYM(gtk_widget_show_now, ptr_gtk);
 
  718  GET_SYM(gtk_widget_get_window, ptr_gtk);
 
  719  GET_SYM(gdk_x11_drawable_get_xid, ptr_gtk);
 
  720  GET_SYM(gtk_check_button_new_with_label, ptr_gtk);
 
  721  GET_SYM(g_signal_connect_data, ptr_gtk);
 
  722  GET_SYM(gtk_toggle_button_get_active, ptr_gtk);
 
  723  GET_SYM(gtk_file_chooser_set_show_hidden, ptr_gtk);
 
  724  GET_SYM(gtk_file_chooser_get_show_hidden, ptr_gtk);
 
  725  GET_SYM(gtk_toggle_button_set_active, ptr_gtk);
 
  727  did_find_GTK_libs = 1;
 
Definition Fl_Native_File_Chooser.H:259
static const char * hidden_label
[standard text may be customized at run-time]
Definition Fl_File_Chooser.H:226
static const char * all_files_label
[standard text may be customized at run-time]
Definition Fl_File_Chooser.H:178
@ BROWSE_DIRECTORY
browse directories (lets user choose one directory)
Definition Fl_Native_File_Chooser.H:115
@ BROWSE_MULTI_FILE
browse files (lets user choose multiple files)
Definition Fl_Native_File_Chooser.H:116
@ BROWSE_SAVE_FILE
browse to save a file
Definition Fl_Native_File_Chooser.H:118
@ BROWSE_SAVE_DIRECTORY
browse to save a directory
Definition Fl_Native_File_Chooser.H:119
@ BROWSE_MULTI_DIRECTORY
browse directories (lets user choose multiple directories)
Definition Fl_Native_File_Chooser.H:117
@ BROWSE_FILE
browse files (lets user choose one file)
Definition Fl_Native_File_Chooser.H:114
@ USE_FILTER_EXT
Chooser filter pilots the output file extension (if supported)
Definition Fl_Native_File_Chooser.H:126
@ SAVEAS_CONFIRM
Show native 'Save As' overwrite confirm dialog.
Definition Fl_Native_File_Chooser.H:123
static void flush()
Causes all the windows that need it to be redrawn and graphics forced out through the pipes.
Definition Fl.cxx:799
FL_EXPORT const char * fl_filename_name(const char *filename)
Gets the file name from a path.
FL_EXPORT int fl_filename_match(const char *name, const char *pattern)
Checks if a string s matches a pattern p.
Definition filename_match.cxx:44
FL_EXPORT int fl_filename_isdir(const char *name)
Determines if a file exists and is a directory from its filename.
Definition filename_isdir.cxx:52
static Fl_Window * first_window()
Returns the first top-level window in the list of shown() windows.
Definition Fl.cxx:753