Magellan Linux

Annotation 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 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years, 1 month 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     }