Annotation of /trunk/mozilla-firefox/patches/mozilla-firefox-1.0.7-gtk-file-chooser-morefixes.patch
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 5933 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 5933 byte(s)
-import
1 | niro | 153 | Index: widget/src/gtk2/Makefile.in |
2 | =================================================================== | ||
3 | RCS file: /cvsroot/mozilla/widget/src/gtk2/Makefile.in,v | ||
4 | retrieving revision 1.34 | ||
5 | diff -u -r1.34 Makefile.in | ||
6 | --- widget/src/gtk2/Makefile.in 7 Sep 2004 21:21:48 -0000 1.34 | ||
7 | +++ widget/src/gtk2/Makefile.in 26 Oct 2004 22:07:49 -0000 | ||
8 | @@ -58,6 +58,7 @@ | ||
9 | dom \ | ||
10 | necko \ | ||
11 | uconv \ | ||
12 | + intl \ | ||
13 | gtkxtbin \ | ||
14 | xremoteservice | ||
15 | |||
16 | Index: widget/src/gtk2/nsFilePicker.cpp | ||
17 | =================================================================== | ||
18 | RCS file: /cvsroot/mozilla/widget/src/gtk2/nsFilePicker.cpp,v | ||
19 | retrieving revision 1.7 | ||
20 | diff -u -r1.7 nsFilePicker.cpp | ||
21 | --- widget/src/gtk2/nsFilePicker.cpp 21 Oct 2004 06:19:00 -0000 1.7 | ||
22 | +++ widget/src/gtk2/nsFilePicker.cpp 26 Oct 2004 22:07:49 -0000 | ||
23 | @@ -38,11 +38,14 @@ | ||
24 | #include <gtk/gtkwindow.h> | ||
25 | #include <gtk/gtkdialog.h> | ||
26 | #include <gtk/gtkstock.h> | ||
27 | +#include <gtk/gtkmessagedialog.h> | ||
28 | |||
29 | #include "nsIFileURL.h" | ||
30 | #include "nsIURI.h" | ||
31 | #include "nsIWidget.h" | ||
32 | #include "nsILocalFile.h" | ||
33 | +#include "nsIStringBundle.h" | ||
34 | + | ||
35 | #include "nsArrayEnumerator.h" | ||
36 | #include "nsVoidArray.h" | ||
37 | #include "nsMemory.h" | ||
38 | @@ -91,6 +94,9 @@ | ||
39 | typedef void (*_gtk_file_chooser_set_current_name_fn)(GtkFileChooser* chooser, const gchar* name); | ||
40 | typedef void (*_gtk_file_chooser_set_current_folder_fn)(GtkFileChooser* chooser, const gchar* folder); | ||
41 | typedef void (*_gtk_file_chooser_add_filter_fn)(GtkFileChooser* chooser, GtkFileFilter* filter); | ||
42 | +typedef void (*_gtk_file_chooser_set_filter_fn)(GtkFileChooser* chooser, GtkFileFilter* filter); | ||
43 | +typedef GtkFileFilter* (*_gtk_file_chooser_get_filter_fn)(GtkFileChooser* chooser); | ||
44 | +typedef GSList* (*_gtk_file_chooser_list_filters_fn)(GtkFileChooser* chooser); | ||
45 | typedef GtkFileFilter* (*_gtk_file_filter_new_fn)(); | ||
46 | typedef void (*_gtk_file_filter_add_pattern_fn)(GtkFileFilter* filter, const gchar* pattern); | ||
47 | typedef void (*_gtk_file_filter_set_name_fn)(GtkFileFilter* filter, const gchar* name); | ||
48 | @@ -103,6 +109,9 @@ | ||
49 | DECL_FUNC_PTR(gtk_file_chooser_set_current_name); | ||
50 | DECL_FUNC_PTR(gtk_file_chooser_set_current_folder); | ||
51 | DECL_FUNC_PTR(gtk_file_chooser_add_filter); | ||
52 | +DECL_FUNC_PTR(gtk_file_chooser_set_filter); | ||
53 | +DECL_FUNC_PTR(gtk_file_chooser_get_filter); | ||
54 | +DECL_FUNC_PTR(gtk_file_chooser_list_filters); | ||
55 | DECL_FUNC_PTR(gtk_file_filter_new); | ||
56 | DECL_FUNC_PTR(gtk_file_filter_add_pattern); | ||
57 | DECL_FUNC_PTR(gtk_file_filter_set_name); | ||
58 | @@ -179,6 +188,9 @@ | ||
59 | GET_LIBGTK_FUNC(gtk_file_chooser_set_current_name); | ||
60 | GET_LIBGTK_FUNC(gtk_file_chooser_set_current_folder); | ||
61 | GET_LIBGTK_FUNC(gtk_file_chooser_add_filter); | ||
62 | + GET_LIBGTK_FUNC(gtk_file_chooser_set_filter); | ||
63 | + GET_LIBGTK_FUNC(gtk_file_chooser_get_filter); | ||
64 | + GET_LIBGTK_FUNC(gtk_file_chooser_list_filters); | ||
65 | GET_LIBGTK_FUNC(gtk_file_filter_new); | ||
66 | GET_LIBGTK_FUNC(gtk_file_filter_add_pattern); | ||
67 | GET_LIBGTK_FUNC(gtk_file_filter_set_name); | ||
68 | @@ -272,6 +284,12 @@ | ||
69 | g_free(filename); | ||
70 | } | ||
71 | |||
72 | + GtkFileFilter *filter = _gtk_file_chooser_get_filter (GTK_FILE_CHOOSER(file_chooser)); | ||
73 | + GSList *filter_list = _gtk_file_chooser_list_filters (GTK_FILE_CHOOSER(file_chooser)); | ||
74 | + | ||
75 | + mSelectedType = NS_STATIC_CAST(PRInt16, g_slist_index (filter_list, filter)); | ||
76 | + g_slist_free(filter_list); | ||
77 | + | ||
78 | // Remember last used directory. | ||
79 | nsCOMPtr<nsILocalFile> file; | ||
80 | GetFile(getter_AddRefs(file)); | ||
81 | @@ -438,6 +456,46 @@ | ||
82 | return NS_ERROR_FAILURE; | ||
83 | } | ||
84 | |||
85 | +PRBool | ||
86 | +confirm_overwrite_file (GtkWidget *parent, nsILocalFile* file) | ||
87 | +{ | ||
88 | + nsCOMPtr<nsIStringBundleService> sbs = do_GetService(NS_STRINGBUNDLE_CONTRACTID); | ||
89 | + nsCOMPtr<nsIStringBundle> bundle; | ||
90 | + nsresult rv = sbs->CreateBundle("chrome://global/locale/filepicker.properties", | ||
91 | + getter_AddRefs(bundle)); | ||
92 | + if (NS_FAILED(rv)) { | ||
93 | + return PR_FALSE; | ||
94 | + } | ||
95 | + | ||
96 | + nsAutoString leafName; | ||
97 | + file->GetLeafName(leafName); | ||
98 | + const PRUnichar *formatStrings[] = | ||
99 | + { | ||
100 | + leafName.get() | ||
101 | + }; | ||
102 | + | ||
103 | + nsXPIDLString title, message; | ||
104 | + bundle->GetStringFromName(NS_LITERAL_STRING("confirmTitle").get(), | ||
105 | + getter_Copies(title)); | ||
106 | + bundle->FormatStringFromName(NS_LITERAL_STRING("confirmFileReplacing").get(), | ||
107 | + formatStrings, NS_ARRAY_LENGTH(formatStrings), | ||
108 | + getter_Copies(message)); | ||
109 | + | ||
110 | + GtkWidget *dialog; | ||
111 | + | ||
112 | + dialog = gtk_message_dialog_new(GTK_WINDOW(parent), | ||
113 | + GTK_DIALOG_DESTROY_WITH_PARENT, | ||
114 | + GTK_MESSAGE_QUESTION, | ||
115 | + GTK_BUTTONS_YES_NO, | ||
116 | + NS_ConvertUTF16toUTF8(message).get()); | ||
117 | + gtk_window_set_title(GTK_WINDOW(dialog), NS_ConvertUTF16toUTF8(title).get()); | ||
118 | + | ||
119 | + PRBool result = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES); | ||
120 | + gtk_widget_destroy (dialog); | ||
121 | + | ||
122 | + return result; | ||
123 | +} | ||
124 | + | ||
125 | NS_IMETHODIMP | ||
126 | nsFilePicker::Show(PRInt16 *aReturn) | ||
127 | { | ||
128 | @@ -508,6 +566,11 @@ | ||
129 | } | ||
130 | |||
131 | _gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), filter); | ||
132 | + | ||
133 | + // Set the initially selected filter | ||
134 | + if (mSelectedType == i) { | ||
135 | + _gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(file_chooser), filter); | ||
136 | + } | ||
137 | } | ||
138 | |||
139 | gint response = gtk_dialog_run (GTK_DIALOG (file_chooser)); | ||
140 | @@ -516,14 +579,20 @@ | ||
141 | case GTK_RESPONSE_ACCEPT: | ||
142 | ReadValuesFromFileChooser(file_chooser); | ||
143 | *aReturn = nsIFilePicker::returnOK; | ||
144 | - if (mMode == modeSave) { | ||
145 | + if (mMode == nsIFilePicker::modeSave) { | ||
146 | nsCOMPtr<nsILocalFile> file; | ||
147 | GetFile(getter_AddRefs(file)); | ||
148 | if (file) { | ||
149 | PRBool exists = PR_FALSE; | ||
150 | file->Exists(&exists); | ||
151 | if (exists) { | ||
152 | - *aReturn = nsIFilePicker::returnReplace; | ||
153 | + PRBool overwrite = confirm_overwrite_file (file_chooser, file); | ||
154 | + | ||
155 | + if (overwrite) { | ||
156 | + *aReturn = nsIFilePicker::returnReplace; | ||
157 | + } else { | ||
158 | + *aReturn = nsIFilePicker::returnCancel; | ||
159 | + } | ||
160 | } | ||
161 | } | ||
162 | } |