1 //
2 //
3 //
4 #ifdef COPYRIGHT_INFORMATION
5 #include "gplv3.h"
6 #endif
7 static void
entry_activate(GtkWidget * entry,GdkEventKey * event,gpointer data)8 entry_activate (GtkWidget * entry, GdkEventKey * event, gpointer data) {
9 GtkWidget *dialog = g_object_get_data(G_OBJECT(entry), "dialog");
10 gtk_dialog_response (GTK_DIALOG(dialog), GTK_RESPONSE_YES);
11 return;
12 }
13 #if 0
14
15 This is replaced by rfm_get_response function .
16
17 static GtkWidget *
18 passwd_dialog (widgets_t * widgets_p,
19 const gchar * ptext,
20 gint option,
21 const gchar * qtext,
22 const gchar *default_value) ;
23
24 #endif
25
26 static
27 GtkWidget *
confirm_dialog(widgets_t * widgets_p,gint type,const gchar * text,const gchar * action_false,const gchar * action_true)28 confirm_dialog (widgets_t * widgets_p,
29 gint type,
30 // GtkMessageType type,
31 const gchar * text,
32 const gchar * action_false,
33 const gchar * action_true
34 ) {
35 GtkWidget *dialog;
36 GtkWidget *button;
37 // type: GTK_MESSAGE_INFO, GTK_MESSAGE_WARNING, GTK_MESSAGE_QUESTION, GTK_MESSAGE_ERROR
38
39 NOOP ("DIAGNOSTICS: rfm_confirm_dialog\n");
40 gchar *q = rfm_utf_string (text);
41 rfm_global_t *rfm_global_p = rfm_global();
42
43 dialog = gtk_dialog_new_with_buttons ("rfm",
44 (rfm_global_p)?GTK_WINDOW(rfm_global_p->window):NULL,
45 GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL);
46 gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
47
48
49 GtkWidget *cbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
50 GtkWidget *box = rfm_hbox_new(FALSE, 2);
51 gtk_box_pack_start(GTK_BOX(cbox),box, FALSE, FALSE,0);
52 gtk_widget_show(box);
53
54 GdkPixbuf *pixbuf=NULL;
55 switch (type){
56 case GTK_MESSAGE_INFO:
57 pixbuf=rfm_get_pixbuf("xffm/stock_dialog-info", 96);
58 break;
59 case GTK_MESSAGE_WARNING:
60 pixbuf=rfm_get_pixbuf("xffm/stock_dialog-warning", 96);
61 break;
62 case GTK_MESSAGE_QUESTION:
63 pixbuf=rfm_get_pixbuf("xffm/stock_dialog-question", 96);
64 break;
65 case GTK_MESSAGE_ERROR:
66 pixbuf=rfm_get_pixbuf("xffm/emblem_cancel", 96);
67 break;
68 case GTK_MESSAGE_OTHER:
69 pixbuf=rfm_get_pixbuf("xffm/emblem_bookmark", 96);
70 break;
71 case -1:
72 pixbuf = rfm_get_pixbuf("xffm/stock_directory/compositeNW/emblem_star", 250);
73 }
74 if (pixbuf) {
75 GtkWidget *image=gtk_image_new_from_pixbuf(pixbuf);
76 gtk_widget_show(image);
77 g_object_unref(pixbuf);
78 gtk_box_pack_start(GTK_BOX(box),image, FALSE, FALSE,0);
79 }
80 GtkWidget *label = gtk_label_new("");
81 gtk_label_set_markup(GTK_LABEL(label), q);
82 gtk_widget_show(label);
83 gtk_box_pack_start(GTK_BOX(box),label, FALSE, FALSE,0);
84
85 if(widgets_p && widgets_p->view_p) {
86 view_t *view_p=widgets_p->view_p;
87 if(view_p->flags.type == DESKVIEW_TYPE) {
88 gtk_window_set_keep_above (GTK_WINDOW(dialog), TRUE);
89 gtk_window_stick (GTK_WINDOW(dialog));
90 } else {
91 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
92 if(rfm_global_p) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (rfm_global_p->window));
93 }
94 } else {
95 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
96 }
97
98 if(action_false) {
99 button = rfm_dialog_button ("xffm/stock_no", action_false);
100 gtk_widget_show (button);
101 gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_NO);
102 g_object_set_data (G_OBJECT (dialog), "action_false_button", button);
103 }
104 button = rfm_dialog_button ("xffm/stock_yes", (action_true) ? action_true : _("Ok"));
105 gtk_widget_show (button);
106 g_object_set_data (G_OBJECT (dialog), "action_true_button", button);
107 gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_YES);
108
109
110 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
111 gtk_widget_show (dialog);
112 return dialog;
113 }
114
115 static void *
confirm_f(void * data)116 confirm_f (void *data) {
117 void **arg = data;
118 if (!arg) g_error("malloc: %s\n", strerror(errno));
119 widgets_t * widgets_p = arg[0];
120 gint type = GPOINTER_TO_INT(arg[1]);
121 const gchar *text = arg[2];
122 const gchar *action_false = arg[3];
123 const gchar *action_true = arg[4];
124 gint response = GTK_RESPONSE_NONE;
125 NOOP ("DIAGNOSTICS: confirm_f\n");
126 GtkWidget *dialog = confirm_dialog (widgets_p, type, text, action_false, action_true);
127 if(!dialog){
128 return GINT_TO_POINTER(FALSE);
129 }
130 response = rfm_dialog_run_response(dialog);
131
132 gtk_widget_hide (dialog);
133 gtk_widget_destroy (dialog);
134
135 if(response == GTK_RESPONSE_YES)
136 return GINT_TO_POINTER(TRUE);
137
138 return GINT_TO_POINTER(FALSE);
139 }
140
141 /////////////////////////////77 simplified response dialog...
142
143
144 static GtkWidget *
response_dialog(widgets_t * widgets_p,const gchar * ptext,const gchar * default_value,gboolean hidden)145 response_dialog (widgets_t * widgets_p, const gchar * ptext, const gchar *default_value, gboolean hidden) {
146
147 GtkWidget *dialog = gtk_dialog_new ();
148 gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
149
150 gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
151 gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
152 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
153 gtk_window_set_title(GTK_WINDOW (dialog), _("User Input"));
154 gtk_window_set_keep_above(GTK_WINDOW (dialog), TRUE);
155
156 gtk_widget_realize (dialog);
157
158 GtkWidget *hbox = rfm_hbox_new (FALSE, 0);
159 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
160 gtk_box_pack_start (
161 GTK_BOX (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
162 hbox, TRUE, TRUE, 0);
163 gtk_widget_show (hbox);
164
165 GtkWidget *label = gtk_label_new("");
166 if(ptext){
167 gtk_label_set_markup (GTK_LABEL(label), ptext);
168 } else {
169 gtk_label_set_markup (GTK_LABEL(label), _("response:"));
170 }
171
172 gtk_box_pack_start (GTK_BOX (hbox), label, EXPAND, FILL, 0);
173 gtk_widget_show (label);
174
175 GtkWidget *bhbox=rfm_hbox_new (FALSE, 0);
176 gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
177 bhbox, TRUE, TRUE, 0);
178 gtk_widget_show (bhbox);
179
180 GtkWidget *vbox=rfm_vbox_new (FALSE, 0);
181 gtk_box_pack_start (GTK_BOX (bhbox), vbox, TRUE, TRUE, 0);
182 // put image here
183 GdkPixbuf *pixbuf=rfm_get_pixbuf("xffm/stock_dialog-authentication",BIG_ICON_SIZE);
184 GtkWidget *image=gtk_image_new_from_pixbuf(pixbuf);
185 g_object_unref(pixbuf);
186 gtk_box_pack_start (GTK_BOX (vbox), image, TRUE, TRUE, 0);
187
188 gtk_widget_show (image);
189 gtk_widget_show (vbox);
190 vbox=rfm_vbox_new (FALSE, 0);
191 gtk_box_pack_start (GTK_BOX (bhbox), vbox, TRUE, TRUE, 0);
192 gtk_widget_show (vbox);
193
194 hbox = rfm_hbox_new (FALSE, 0);
195 gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
196 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
197 gtk_widget_show (hbox);
198
199
200 GtkWidget *response_text = gtk_entry_new ();
201 g_object_set_data(G_OBJECT(response_text), "dialog", dialog);
202 gtk_box_pack_start (GTK_BOX (hbox), response_text, EXPAND, NOFILL, 0);
203 gtk_entry_set_visibility ((GtkEntry *) response_text, (hidden)?FALSE:TRUE);
204 g_signal_connect (G_OBJECT (response_text), "activate", G_CALLBACK (entry_activate), NULL);
205 gtk_widget_show (response_text);
206 g_object_set_data(G_OBJECT(dialog), "response_text", response_text);
207 if (default_value) gtk_entry_set_text(GTK_ENTRY(response_text), default_value);
208
209 GtkWidget *button = rfm_dialog_button ("xffm/stock_ok", _("Ok"));
210 gtk_widget_show (button);
211 gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_YES);
212
213
214 button = rfm_dialog_button ("xffm/stock_cancel", _("Cancel"));
215 gtk_widget_show (button);
216 gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_NO);
217
218 if(widgets_p){
219 // This borks things bigtime.
220 // rfm_global_t *rfm_global_p = rfm_global();
221 //gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (rfm_global_p->window));
222 }
223 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
224 gtk_widget_show (dialog);
225
226 return dialog;
227 }
228
229
230
231 static void *
get_response_f(void * data)232 get_response_f (void *data) {
233 void **arg = data;
234 widgets_t * widgets_p = arg[0];
235 const gchar * ptext=arg[1];
236 const gchar *default_text = arg[2];
237 gboolean hidden = GPOINTER_TO_INT(arg[3]);
238
239 GtkWidget *dialog = response_dialog (widgets_p, ptext, default_text, hidden);
240 gint response = GTK_RESPONSE_NONE;
241 response = rfm_dialog_run_response(dialog);
242 gtk_widget_hide (dialog);
243
244 gchar *response_text = NULL;
245
246 if(response == GTK_RESPONSE_YES){
247 GtkWidget *entry = g_object_get_data(G_OBJECT(dialog), "response_text");
248 const gchar *c = gtk_entry_get_text(GTK_ENTRY(entry));
249 if (c) response_text = g_strdup(c);
250 gtk_entry_set_text(GTK_ENTRY(entry), "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
251 }
252 gtk_widget_destroy (dialog);
253 return response_text;
254 }
255
256