2 Unix SMB/CIFS implementation.
3 SMB-related GTK+ functions
5 Copyright (C) Jelmer Vernooij 2004
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #include <sys/types.h>
32 #include <gdk/gdkkeysyms.h>
36 void gtk_show_werror(GtkWidget *win, WERROR err)
38 GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win),
39 GTK_DIALOG_DESTROY_WITH_PARENT,
42 "Windows error: %s\n", win_errstr(err));
43 gtk_dialog_run (GTK_DIALOG (dialog));
44 gtk_widget_destroy (dialog);
47 void gtk_show_ntstatus(GtkWidget *win, NTSTATUS status)
49 GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win),
50 GTK_DIALOG_DESTROY_WITH_PARENT,
53 "Windows error: %s\n", nt_errstr(status));
54 gtk_dialog_run (GTK_DIALOG (dialog));
55 gtk_widget_destroy (dialog);
58 static void gtk_rpc_binding_dialog_class_init (GtkRpcBindingDialogClass *class)
62 static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_dialog)
64 GtkWidget *dialog_vbox1;
67 GtkWidget *frame_transport;
69 GtkWidget *lbl_transport;
71 GtkWidget *frame_host;
75 GtkWidget *frame_security;
78 GtkWidget *frame_credentials;
80 GtkWidget *lbl_username;
81 GtkWidget *lbl_password;
83 GtkWidget *chk_button;
84 GtkWidget *lbl_credentials;
85 GtkWidget *dialog_action_area1;
86 GtkWidget *btn_cancel;
87 GtkWidget *btn_connect;
88 GSList *transport_smb_group = NULL;
90 gtk_rpc_binding_dialog->mem_ctx = talloc_init("gtk_rcp_binding_dialog");
92 gtk_window_set_title (GTK_WINDOW (gtk_rpc_binding_dialog), "Connect");
94 dialog_vbox1 = GTK_DIALOG (gtk_rpc_binding_dialog)->vbox;
95 gtk_widget_show (dialog_vbox1);
97 vbox1 = gtk_vbox_new (FALSE, 0);
98 gtk_widget_show (vbox1);
99 gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0);
101 frame_transport = gtk_frame_new (NULL);
102 gtk_widget_show (frame_transport);
103 gtk_box_pack_start (GTK_BOX (vbox1), frame_transport, TRUE, TRUE, 0);
105 vbox6 = gtk_vbox_new (FALSE, 0);
106 gtk_widget_show (vbox6);
107 gtk_container_add (GTK_CONTAINER (frame_transport), vbox6);
109 gtk_rpc_binding_dialog->transport_smb = gtk_radio_button_new_with_mnemonic (NULL, "RPC over SMB over TCP/IP");
110 gtk_widget_show (gtk_rpc_binding_dialog->transport_smb);
111 gtk_box_pack_start (GTK_BOX (vbox6), gtk_rpc_binding_dialog->transport_smb, FALSE, FALSE, 0);
112 gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_smb), transport_smb_group);
113 transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_smb));
114 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_rpc_binding_dialog->transport_smb), TRUE);
116 gtk_rpc_binding_dialog->transport_tcp_ip = gtk_radio_button_new_with_mnemonic (NULL, "RPC over TCP/IP");
117 gtk_widget_show (gtk_rpc_binding_dialog->transport_tcp_ip);
118 gtk_box_pack_start (GTK_BOX (vbox6), gtk_rpc_binding_dialog->transport_tcp_ip, FALSE, FALSE, 0);
119 gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip), transport_smb_group);
120 transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip));
122 label1 = gtk_label_new ("Transport");
123 gtk_widget_show (label1);
124 gtk_frame_set_label_widget (GTK_FRAME (frame_transport), label1);
126 frame_host = gtk_frame_new (NULL);
127 gtk_widget_show (frame_host);
128 gtk_box_pack_start (GTK_BOX (vbox1), frame_host, TRUE, TRUE, 0);
130 hbox1 = gtk_hbox_new (FALSE, 0);
131 gtk_widget_show (hbox1);
132 gtk_container_add (GTK_CONTAINER (frame_host), hbox1);
134 lbl_name = gtk_label_new ("Name");
135 gtk_widget_show (lbl_name);
136 gtk_box_pack_start (GTK_BOX (hbox1), lbl_name, TRUE, TRUE, 0);
138 gtk_rpc_binding_dialog->entry_host = gtk_entry_new ();
139 gtk_widget_show (gtk_rpc_binding_dialog->entry_host);
140 gtk_box_pack_start (GTK_BOX (hbox1), gtk_rpc_binding_dialog->entry_host, TRUE, TRUE, 0);
142 label2 = gtk_label_new ("Host");
143 gtk_widget_show (label2);
144 gtk_frame_set_label_widget (GTK_FRAME (frame_host), label2);
146 frame_security = gtk_frame_new (NULL);
147 gtk_widget_show (frame_security);
148 gtk_box_pack_start (GTK_BOX (vbox1), frame_security, TRUE, TRUE, 0);
150 vbox2 = gtk_vbox_new (FALSE, 0);
151 gtk_widget_show (vbox2);
152 gtk_container_add (GTK_CONTAINER (frame_security), vbox2);
154 gtk_rpc_binding_dialog->chk_sign = gtk_check_button_new_with_mnemonic ("S_ign");
155 gtk_widget_show (gtk_rpc_binding_dialog->chk_sign);
156 gtk_box_pack_start (GTK_BOX (vbox2), gtk_rpc_binding_dialog->chk_sign, FALSE, FALSE, 0);
158 gtk_rpc_binding_dialog->chk_seal = gtk_check_button_new_with_mnemonic ("_Seal");
159 gtk_widget_show (gtk_rpc_binding_dialog->chk_seal);
160 gtk_box_pack_start (GTK_BOX (vbox2), gtk_rpc_binding_dialog->chk_seal, FALSE, FALSE, 0);
162 label3 = gtk_label_new ("Security");
163 gtk_widget_show (label3);
164 gtk_frame_set_label_widget (GTK_FRAME (frame_security), label3);
166 frame_credentials = gtk_frame_new (NULL);
167 gtk_widget_show (frame_credentials);
168 gtk_box_pack_start (GTK_BOX (dialog_vbox1), frame_credentials, TRUE, TRUE, 0);
170 table1 = gtk_table_new (3, 2, FALSE);
171 gtk_widget_show (table1);
172 gtk_container_add (GTK_CONTAINER (frame_credentials), table1);
174 lbl_username = gtk_label_new ("Username:");
175 gtk_widget_show (lbl_username);
176 gtk_table_attach (GTK_TABLE (table1), lbl_username, 0, 1, 0, 1,
177 (GtkAttachOptions) (GTK_FILL),
178 (GtkAttachOptions) (0), 0, 0);
179 gtk_misc_set_alignment (GTK_MISC (lbl_username), 0, 0.5);
181 lbl_password = gtk_label_new ("Password:");
182 gtk_widget_show (lbl_password);
183 gtk_table_attach (GTK_TABLE (table1), lbl_password, 0, 1, 1, 2,
184 (GtkAttachOptions) (GTK_FILL),
185 (GtkAttachOptions) (0), 0, 0);
186 gtk_misc_set_alignment (GTK_MISC (lbl_password), 0, 0.5);
188 label9 = gtk_label_new ("");
189 gtk_widget_show (label9);
190 gtk_table_attach (GTK_TABLE (table1), label9, 0, 1, 2, 3,
191 (GtkAttachOptions) (GTK_FILL),
192 (GtkAttachOptions) (0), 0, 0);
193 gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5);
195 gtk_rpc_binding_dialog->entry_password = gtk_entry_new ();
196 gtk_entry_set_visibility (GTK_ENTRY (gtk_rpc_binding_dialog->entry_password), FALSE);
197 gtk_widget_show (gtk_rpc_binding_dialog->entry_password);
198 gtk_table_attach (GTK_TABLE (table1), gtk_rpc_binding_dialog->entry_password, 1, 2, 1, 2,
199 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
200 (GtkAttachOptions) (0), 0, 0);
202 gtk_rpc_binding_dialog->entry_username = gtk_entry_new ();
203 gtk_widget_show (gtk_rpc_binding_dialog->entry_username);
204 gtk_table_attach (GTK_TABLE (table1), gtk_rpc_binding_dialog->entry_username, 1, 2, 0, 1,
205 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
206 (GtkAttachOptions) (0), 0, 0);
208 chk_button = gtk_check_button_new_with_mnemonic ("_Use kerberos");
209 gtk_widget_show (chk_button);
210 gtk_table_attach (GTK_TABLE (table1), chk_button, 1, 2, 2, 3,
211 (GtkAttachOptions) (GTK_FILL),
212 (GtkAttachOptions) (0), 0, 0);
214 lbl_credentials = gtk_label_new ("Credentials");
215 gtk_widget_show (lbl_credentials);
216 gtk_frame_set_label_widget (GTK_FRAME (frame_credentials), lbl_credentials);
218 dialog_action_area1 = GTK_DIALOG (gtk_rpc_binding_dialog)->action_area;
219 gtk_widget_show (dialog_action_area1);
220 gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
222 btn_cancel = gtk_button_new_from_stock ("gtk-cancel");
223 gtk_widget_show (btn_cancel);
224 gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_cancel, GTK_RESPONSE_CANCEL);
225 GTK_WIDGET_SET_FLAGS (btn_cancel, GTK_CAN_DEFAULT);
227 btn_connect = gtk_button_new_with_mnemonic ("_Connect");
228 gtk_widget_show (btn_connect);
229 gtk_dialog_add_action_widget (GTK_DIALOG (gtk_rpc_binding_dialog), btn_connect, GTK_RESPONSE_ACCEPT);
230 gtk_container_set_border_width (GTK_CONTAINER (btn_connect), 1);
231 GTK_WIDGET_SET_FLAGS (btn_connect, GTK_CAN_DEFAULT);
233 gtk_widget_grab_focus (btn_connect);
234 gtk_widget_grab_default (btn_connect);
237 GType gtk_rpc_binding_dialog_get_type ()
239 static GType mytype = 0;
243 static const GTypeInfo myinfo =
245 sizeof (GtkRpcBindingDialogClass),
248 (GClassInitFunc) gtk_rpc_binding_dialog_class_init,
251 sizeof(GtkRpcBindingDialog),
253 (GInstanceInitFunc) gtk_rpc_binding_dialog_init,
256 mytype = g_type_register_static (GTK_TYPE_DIALOG,
257 "GtkRpcBindingDialog", &myinfo, 0);
263 GtkWidget *gtk_rpc_binding_dialog_new (BOOL nocredentials)
265 return GTK_WIDGET ( gtk_type_new (gtk_rpc_binding_dialog_get_type ()));
268 const char *gtk_rpc_binding_dialog_get_username(GtkRpcBindingDialog *d)
270 return gtk_entry_get_text(GTK_ENTRY(d->entry_username));
273 const char *gtk_rpc_binding_dialog_get_password(GtkRpcBindingDialog *d)
275 return gtk_entry_get_text(GTK_ENTRY(d->entry_password));
278 const char *gtk_rpc_binding_dialog_get_binding(GtkRpcBindingDialog *d, char *pipe)
280 const char *transport;
282 char *options = NULL;
283 char *binding = NULL;
285 host = gtk_entry_get_text(GTK_ENTRY(d->entry_host));
286 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->transport_tcp_ip)))
287 transport = "ncacn_tcp";
289 transport = "ncacn_np";
290 // Format: TRANSPORT:host:[\pipe\foo,foo,foo]
292 options = talloc_asprintf(d->mem_ctx, "\\pipe\\%s", pipe);
295 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->chk_seal))) {
296 options = talloc_asprintf_append(d->mem_ctx, options, ",seal");
299 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->chk_sign))) {
300 options = talloc_asprintf_append(d->mem_ctx, options, ",sign");
304 return talloc_asprintf(d->mem_ctx, "%s:%s:[%s]", transport, host, options);
306 return talloc_asprintf(d->mem_ctx, "%s:%s", transport, host);
310 GtkWidget* create_gtk_samba_about_dialog (char *appname)
312 GtkWidget *dialog_vbox1;
316 GtkWidget *dialog_action_area1;
317 GtkWidget *closebutton1;
320 aboutwin = gtk_dialog_new ();
321 gtk_window_set_title (GTK_WINDOW (aboutwin), "About");
322 gtk_window_set_resizable (GTK_WINDOW (aboutwin), FALSE);
324 dialog_vbox1 = GTK_DIALOG (aboutwin)->vbox;
325 gtk_widget_show (dialog_vbox1);
327 /* FIXME: Samba logo ?
328 image1 = create_pixmap (aboutwin, "samba.png");
329 gtk_widget_show (image1);
330 gtk_box_pack_start (GTK_BOX (dialog_vbox1), image1, FALSE, TRUE, 0); */
332 label1 = gtk_label_new (appname);
333 gtk_widget_show (label1);
334 gtk_box_pack_start (GTK_BOX (dialog_vbox1), label1, FALSE, FALSE, 0);
335 gtk_label_set_use_markup (GTK_LABEL (label1), TRUE);
337 label2 = gtk_label_new_with_mnemonic ("(C) 2004 Jelmer Vernooij <jelmer@samba.org>\nPart of Samba\nhttp://www.samba.org/\n");
338 gtk_widget_show (label2);
339 gtk_box_pack_start (GTK_BOX (dialog_vbox1), label2, TRUE, FALSE, 0);
340 gtk_label_set_use_markup (GTK_LABEL (label2), TRUE);
342 dialog_action_area1 = GTK_DIALOG (aboutwin)->action_area;
343 gtk_widget_show (dialog_action_area1);
344 gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
346 closebutton1 = gtk_button_new_from_stock ("gtk-close");
347 gtk_widget_show (closebutton1);
348 gtk_dialog_add_action_widget (GTK_DIALOG (aboutwin), closebutton1, GTK_RESPONSE_CLOSE);
349 GTK_WIDGET_SET_FLAGS (closebutton1, GTK_CAN_DEFAULT);