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