summaryrefslogtreecommitdiff
path: root/iup/src/gtk/iupgtk_filedlg.c
diff options
context:
space:
mode:
Diffstat (limited to 'iup/src/gtk/iupgtk_filedlg.c')
-rwxr-xr-xiup/src/gtk/iupgtk_filedlg.c63
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