SF.net SVN: geany:[4505] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Dec 20 21:49:23 UTC 2009


Revision: 4505
          http://geany.svn.sourceforge.net/geany/?rev=4505&view=rev
Author:   eht16
Date:     2009-12-20 21:49:23 +0000 (Sun, 20 Dec 2009)

Log Message:
-----------
Rename win32_show_file_dialog() to win32_show_document_open_dialog() as it is specialised for opening documents.
Implement win32_show_file_dialog() as a generic file open dialog and use it with ui_path_box_new().

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/dialogs.c
    trunk/src/ui_utils.c
    trunk/src/win32.c
    trunk/src/win32.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-12-20 21:03:28 UTC (rev 4504)
+++ trunk/ChangeLog	2009-12-20 21:49:23 UTC (rev 4505)
@@ -29,6 +29,11 @@
    Rename win32_show_project_folder_dialog() to
    win32_show_folder_dialog() as it is not related and not used by any
    project management related code.
+ * src/ui_utils.c, src/win32.c, src/win32.h, src/dialogs.c:
+   Rename win32_show_file_dialog() to win32_show_document_open_dialog()
+   as it is specialised for opening documents.
+   Implement win32_show_file_dialog() as a generic file open dialog and
+   use it with ui_path_box_new().
 
 
 2009-12-20  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>

Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c	2009-12-20 21:03:28 UTC (rev 4504)
+++ trunk/src/dialogs.c	2009-12-20 21:49:23 UTC (rev 4505)
@@ -222,7 +222,7 @@
 	setptr(initdir, utils_get_locale_from_utf8(initdir));
 
 #if GEANY_USE_WIN32_DIALOG
-	win32_show_file_dialog(TRUE, initdir);
+	win32_show_document_open_dialog(TRUE, initdir);
 #else /* X11, not win32: use GTK_FILE_CHOOSER */
 
 	/* We use the same file selection widget each time, so first of all we create it

Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c	2009-12-20 21:03:28 UTC (rev 4504)
+++ trunk/src/ui_utils.c	2009-12-20 21:49:23 UTC (rev 4505)
@@ -1662,7 +1662,7 @@
 	if (action == GTK_FILE_CHOOSER_ACTION_OPEN)
 	{
 #ifdef G_OS_WIN32
-		utf8_path = win32_show_folder_dialog(ui_widgets.prefs_dialog, title,
+		utf8_path = win32_show_file_dialog(GTK_WINDOW(ui_widgets.prefs_dialog), title,
 						gtk_entry_get_text(GTK_ENTRY(entry)));
 #else
 		utf8_path = run_file_chooser(title, action, gtk_entry_get_text(GTK_ENTRY(entry)));
@@ -1672,9 +1672,8 @@
 	{
 		gchar *path = g_path_get_dirname(gtk_entry_get_text(GTK_ENTRY(entry)));
 #ifdef G_OS_WIN32
-		/* TODO this doesn't work on Windows yet, we need a more generic win32_show_file_dialog() */
-		/*utf8_path = win32_show_file_dialog(TRUE, ui_widgets.prefs_dialog, path);*/
-		utf8_path = NULL;
+		utf8_path = win32_show_folder_dialog(ui_widgets.prefs_dialog, title,
+						gtk_entry_get_text(GTK_ENTRY(entry)));
 #else
 		utf8_path = run_file_chooser(title, action, path);
 #endif

Modified: trunk/src/win32.c
===================================================================
--- trunk/src/win32.c	2009-12-20 21:03:28 UTC (rev 4504)
+++ trunk/src/win32.c	2009-12-20 21:49:23 UTC (rev 4505)
@@ -313,7 +313,7 @@
 
 /* initial_dir can be NULL to use the current working directory.
  * Returns: TRUE if the dialog was not cancelled. */
-gboolean win32_show_file_dialog(gboolean file_open, const gchar *initial_dir)
+gboolean win32_show_document_open_dialog(gboolean file_open, const gchar *initial_dir)
 {
 	OPENFILENAMEW of;
 	gint retval;
@@ -412,6 +412,59 @@
 }
 
 
+/* initial_dir can be NULL to use the current working directory.
+ * Returns: the selected filename */
+gchar *win32_show_file_dialog(GtkWindow *parent, const gchar *title, const gchar *initial_file)
+{
+	OPENFILENAMEW of;
+	gint retval;
+	gchar tmp[MAX_PATH];
+	wchar_t w_file[MAX_PATH];
+	wchar_t w_title[512];
+	guint x;
+
+	w_file[0] = '\0';
+
+	if (initial_file != NULL)
+		MultiByteToWideChar(CP_UTF8, 0, initial_file, -1, w_file, sizeof(w_file));
+
+	MultiByteToWideChar(CP_UTF8, 0, title, -1, w_title, sizeof(w_title));
+
+	/* initialise file dialog info struct */
+	memset(&of, 0, sizeof of);
+#ifdef OPENFILENAME_SIZE_VERSION_400
+	of.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+#else
+	of.lStructSize = sizeof of;
+#endif
+	of.hwndOwner = GDK_WINDOW_HWND(GTK_WIDGET(parent)->window);
+
+	of.lpstrFile = w_file;
+	of.nMaxFile = 2048;
+	of.lpstrFileTitle = NULL;
+	of.lpstrTitle = w_title;
+	of.lpstrDefExt = L"";
+	of.Flags = OFN_FILEMUSTEXIST | OFN_EXPLORER;
+	retval = GetOpenFileNameW(&of);
+
+	if (! retval)
+	{
+		if (CommDlgExtendedError())
+		{
+			gchar *error = g_strdup_printf(
+				"File dialog box error (%x)", (gint) CommDlgExtendedError());
+			win32_message_dialog(NULL, GTK_MESSAGE_ERROR, error);
+			g_free(error);
+		}
+		return NULL;
+	}
+
+	WideCharToMultiByte(CP_UTF8, 0, w_file, -1, tmp, sizeof(tmp), NULL, NULL);
+
+	return g_strdup(tmp);
+}
+
+
 void win32_show_font_dialog(void)
 {
 	gint retval;

Modified: trunk/src/win32.h
===================================================================
--- trunk/src/win32.h	2009-12-20 21:03:28 UTC (rev 4504)
+++ trunk/src/win32.h	2009-12-20 21:49:23 UTC (rev 4505)
@@ -27,8 +27,10 @@
 
 void win32_show_pref_file_dialog(GtkEntry *item);
 
-gboolean win32_show_file_dialog(gboolean file_open, const gchar *initial_dir);
+gchar *win32_show_file_dialog(GtkWindow *parent, const gchar *title, const gchar *initial_dir);
 
+gboolean win32_show_document_open_dialog(gboolean file_open, const gchar *initial_dir);
+
 void win32_show_font_dialog(void);
 
 void win32_show_color_dialog(const gchar *colour);
@@ -43,8 +45,7 @@
 								      const gchar *initial_dir, gboolean allow_new_file,
 								      gboolean project_file_filter);
 
-gchar *win32_show_project_folder_dialog(GtkWidget *parent, const gchar *title,
-										const gchar *initial_dir);
+gchar *win32_show_folder_dialog(GtkWidget *parent, const gchar *title, const gchar *initial_dir);
 
 gint win32_check_write_permission(const gchar *dir);
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list