Contents of /trunk/mozilla-firefox/patches/mozilla-firefox-1.0.7-gtk-file-chooser-morefixes.patch
Parent Directory | Revision Log
Revision 153 -
(show 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 | 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 | } |