diff options
Diffstat (limited to 'iup/src/gtk/iupgtk_filedlg.c')
-rwxr-xr-x | iup/src/gtk/iupgtk_filedlg.c | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/iup/src/gtk/iupgtk_filedlg.c b/iup/src/gtk/iupgtk_filedlg.c index 5426910..a326c72 100755 --- a/iup/src/gtk/iupgtk_filedlg.c +++ b/iup/src/gtk/iupgtk_filedlg.c @@ -77,6 +77,8 @@ static void gtkFileDlgGetMultipleFiles(Ihandle* ih, GSList* list) cur_len = iupArrayCount(names_array); all_names = iupArrayAdd(names_array, dir_len+1); memcpy(all_names+cur_len, filename, dir_len); + all_names[cur_len+dir_len] = '0'; + iupAttribStoreStr(ih, "DIRECTORY", all_names); all_names[cur_len+dir_len] = '|'; dir_len++; /* skip separator */ @@ -101,10 +103,14 @@ static void gtkFileDlgGetMultipleFiles(Ihandle* ih, GSList* list) iupArrayDestroy(names_array); } -#ifdef WIN32 -#include <gdk/gdkwin32.h> +#ifdef GTK_MAC + #include <gdk/gdk.h> #else -#include <gdk/gdkx.h> + #ifdef WIN32 + #include <gdk/gdkwin32.h> + #else + #include <gdk/gdkx.h> + #endif #endif static void gtkFileDlgUpdatePreviewGLCanvas(Ihandle* ih) @@ -112,10 +118,12 @@ static void gtkFileDlgUpdatePreviewGLCanvas(Ihandle* ih) Ihandle* glcanvas = IupGetAttributeHandle(ih, "PREVIEWGLCANVAS"); if (glcanvas) { -#ifdef WIN32 - iupAttribSetStr(glcanvas, "HWND", iupAttribGet(ih, "HWND")); -#else - iupAttribSetStr(glcanvas, "XWINDOW", iupAttribGet(ih, "XWINDOW")); +#ifndef GTK_MAC + #ifdef WIN32 + iupAttribSetStr(glcanvas, "HWND", iupAttribGet(ih, "HWND")); + #else + iupAttribSetStr(glcanvas, "XWINDOW", iupAttribGet(ih, "XWINDOW")); + #endif #endif glcanvas->iclass->Map(glcanvas); } @@ -126,12 +134,15 @@ static void gtkFileDlgPreviewRealize(GtkWidget *widget, Ihandle *ih) iupAttribSetStr(ih, "PREVIEWDC", iupgtkGetNativeGraphicsContext(widget)); iupAttribSetStr(ih, "WID", (char*)widget); -#ifdef WIN32 - iupAttribSetStr(ih, "HWND", (char*)GDK_WINDOW_HWND(widget->window)); -#else - iupAttribSetStr(ih, "XWINDOW", (char*)GDK_WINDOW_XID(widget->window)); - iupAttribSetStr(ih, "XDISPLAY", (char*)iupdrvGetDisplay()); +#ifndef GTK_MAC + #ifdef WIN32 + iupAttribSetStr(ih, "HWND", (char*)GDK_WINDOW_HWND(widget->window)); + #else + iupAttribSetStr(ih, "XWINDOW", (char*)GDK_WINDOW_XID(widget->window)); + iupAttribSetStr(ih, "XDISPLAY", (char*)iupdrvGetDisplay()); + #endif #endif + gtkFileDlgUpdatePreviewGLCanvas(ih); } @@ -174,11 +185,11 @@ static void gtkFileDlgUpdatePreview(GtkFileChooser *file_chooser, Ihandle* ih) { char *filename = gtk_file_chooser_get_preview_filename(file_chooser); + IFnss cb = (IFnss)IupGetCallback(ih, "FILE_CB"); if (iupdrvIsFile(filename)) - { - IFnss cb = (IFnss)IupGetCallback(ih, "FILE_CB"); cb(ih, iupgtkStrConvertFromFilename(filename), "SELECT"); - } + else + cb(ih, iupgtkStrConvertFromFilename(filename), "OTHER"); g_free (filename); @@ -469,6 +480,13 @@ static int gtkFileDlgPopup(Ihandle* ih, int x, int y) char* filename = (char*)file_list->data; iupAttribStoreStr(ih, "VALUE", iupgtkStrConvertFromFilename(filename)); g_free(filename); + + /* store the DIRECTORY */ + { + char* dir = iupStrFileGetPath(iupAttribGet(ih, "VALUE")); + iupAttribStoreStr(ih, "DIRECTORY", dir); + free(dir); + } } g_slist_free(file_list); @@ -481,6 +499,14 @@ static int gtkFileDlgPopup(Ihandle* ih, int x, int y) iupAttribStoreStr(ih, "VALUE", iupgtkStrConvertFromFilename(filename)); file_exist = iupdrvIsFile(filename); dir_exist = iupdrvIsDirectory(filename); + + if (file_exist) + { + char* dir = iupStrFileGetPath(filename); + iupAttribStoreStr(ih, "DIRECTORY", dir); + free(dir); + } + g_free(filename); } @@ -507,8 +533,11 @@ static int gtkFileDlgPopup(Ihandle* ih, int x, int y) { /* GtkFileChooser does not change the current directory */ char* dir = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog)); - if (dir) iupdrvSetCurrentDirectory(dir); - g_free(dir); + if (dir) + { + iupdrvSetCurrentDirectory(dir); + g_free(dir); + } } } else |