SF.net SVN: geany:[4897] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Mon May 10 21:52:43 UTC 2010
Revision: 4897
http://geany.svn.sourceforge.net/geany/?rev=4897&view=rev
Author: eht16
Date: 2010-05-10 21:52:43 +0000 (Mon, 10 May 2010)
Log Message:
-----------
(Re-)Implement a (still basic) native Windows Save As dialog when compiled with GEANY_USE_WIN32_DIALOG.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/dialogs.c
trunk/src/win32.c
trunk/src/win32.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-05-10 17:36:19 UTC (rev 4896)
+++ trunk/ChangeLog 2010-05-10 21:52:43 UTC (rev 4897)
@@ -2,6 +2,9 @@
* src/dialogs.c:
Fix Cancel on Goto Line dialog (patch by Dimitar Zhekov, thanks).
+ * src/dialogs.c, src/win32.c, src/win32.h:
+ (Re-)Implement a (still basic) native Windows Save As dialog when
+ compiled with GEANY_USE_WIN32_DIALOG.
2010-05-09 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c 2010-05-10 17:36:19 UTC (rev 4896)
+++ trunk/src/dialogs.c 2010-05-10 21:52:43 UTC (rev 4897)
@@ -65,6 +65,10 @@
GEANY_RESPONSE_VIEW
};
+
+static gboolean handle_save_as(const gchar *utf8_filename, gboolean open_new_tab,
+ gboolean rename_file);
+
#if ! GEANY_USE_WIN32_DIALOG
static GtkWidget *add_file_open_extra_widget(void);
@@ -333,7 +337,6 @@
#endif
-#if ! GEANY_USE_WIN32_DIALOG
static gboolean handle_save_as(const gchar *utf8_filename, gboolean open_new_tab, gboolean rename_file)
{
GeanyDocument *doc = document_get_current();
@@ -366,6 +369,7 @@
}
+#if ! GEANY_USE_WIN32_DIALOG
static void
on_file_save_dialog_response (GtkDialog *dialog,
gint response,
@@ -550,7 +554,10 @@
gboolean result;
#if GEANY_USE_WIN32_DIALOG
- result = win32_show_file_dialog(FALSE, utils_get_default_dir_utf8());
+ GeanyDocument *doc = document_get_current();
+ gchar *utf8_name = win32_show_document_save_as_dialog(GTK_WINDOW(main_widgets.window),
+ _("Save File"), DOC_FILENAME(doc));
+ result = handle_save_as(utf8_name, FALSE, FALSE);
#else
result = gtk_show_save_as();
#endif
Modified: trunk/src/win32.c
===================================================================
--- trunk/src/win32.c 2010-05-10 17:36:19 UTC (rev 4896)
+++ trunk/src/win32.c 2010-05-10 21:52:43 UTC (rev 4897)
@@ -413,6 +413,62 @@
}
+gchar *win32_show_document_save_as_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.lpstrFilter = get_file_filters();
+ of.lpstrCustomFilter = NULL;
+ of.nFilterIndex = GEANY_FILETYPES_NONE + 1;
+
+ of.lpstrFile = w_file;
+ of.nMaxFile = 2048;
+ of.lpstrFileTitle = NULL;
+ of.lpstrTitle = w_title;
+ of.lpstrDefExt = L"";
+ of.Flags = OFN_FILEMUSTEXIST | OFN_EXPLORER;
+ retval = GetSaveFileNameW(&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);
+}
+
+
/* 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)
Modified: trunk/src/win32.h
===================================================================
--- trunk/src/win32.h 2010-05-10 17:36:19 UTC (rev 4896)
+++ trunk/src/win32.h 2010-05-10 21:52:43 UTC (rev 4897)
@@ -31,6 +31,9 @@
gboolean win32_show_document_open_dialog(gboolean file_open, const gchar *initial_dir);
+gchar *win32_show_document_save_as_dialog(GtkWindow *parent, const gchar *title,
+ const gchar *initial_file);
+
void win32_show_font_dialog(void);
void win32_show_color_dialog(const gchar *colour);
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