Magellan Linux

Contents of /trunk/mozilla-firefox/patches/mozilla-firefox-1.0.7-gtk-file-chooser-morefixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years 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 }