105
116
GtkWidget* ToolsMain_Create(void);
108
Bool RpcInResetCB(char const **result, size_t *resultLen, const char *name,
109
const char *args, size_t argsSize, void *clientData);
119
Bool RpcInResetCB(RpcInData *data);
110
120
Bool RpcInSetOptionCB(char const **result, size_t *resultLen, const char *name,
111
121
const char *args, size_t argsSize, void *clientData);
112
122
Bool RpcInCapRegCB(char const **result, size_t *resultLen, const char *name,
199
209
char helpPage[1000];
211
if (hlpDir == NULL) {
212
ToolsMain_MsgBox("Error", "Unable to determine where help pages are stored.");
201
216
if (help == NULL) {
202
217
ToolsMain_MsgBox("Error", "No help was found for the page.");
206
Str_Snprintf(helpPage, sizeof helpPage, "file:%s%s", hlpDir, help);
221
Str_Snprintf(helpPage, sizeof helpPage, "file:%s/%s", hlpDir, help);
207
222
if (!GuestApp_OpenUrl(helpPage, FALSE)) {
208
223
ToolsMain_MsgBox("Help Unavailable",
209
224
"Sorry, but help requires a web browser. You may need "
246
curPage = gtk_notebook_get_nth_page(nb, gtk_notebook_get_current_page(nb));
247
gtk_label_get(GTK_LABEL(gtk_notebook_get_tab_label(nb,curPage)), &text);
248
if (strcmp(text, TAB_LABEL_OPTIONS) == 0) {
249
ToolsMain_OpenHelp("tools_options.htm");
250
} else if (strcmp(text, TAB_LABEL_DEVICES) == 0) {
251
ToolsMain_OpenHelp("tools_devices.htm");
252
} else if (strcmp(text, TAB_LABEL_SCRIPTS) == 0) {
253
ToolsMain_OpenHelp("tools_scripts.htm");
254
} else if (strcmp(text, TAB_LABEL_SHRINK) == 0) {
255
ToolsMain_OpenHelp("tools_shrink.htm");
256
} else if (strcmp(text, TAB_LABEL_ABOUT) == 0) {
257
ToolsMain_OpenHelp("tools_about.htm");
259
ToolsMain_OpenHelp("index.htm");
260
page = gtk_notebook_get_current_page(nb) + 1;
263
if (page >= ARRAYSIZE(gHelpPages)) {
266
curPage = gtk_notebook_get_nth_page(nb, page - 1);
267
gtk_label_get(GTK_LABEL(gtk_notebook_get_tab_label(nb,curPage)), &text);
268
Warning("No help page for tab %s, defaulting to index.\n", text);
272
ToolsMain_OpenHelp(gHelpPages[page]);
301
313
gtk_widget_show(label);
302
314
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
317
okbtn = gtk_button_new_with_mnemonic("_OK");
304
319
okbtn = gtk_button_new_with_label("OK");
305
321
gtk_widget_show(okbtn);
306
322
gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->action_area), okbtn, FALSE, FALSE, 0);
307
323
gtk_widget_set_usize(okbtn, 70, 25);
308
324
gtk_signal_connect_object(GTK_OBJECT(okbtn), "clicked",
309
325
GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog));
326
GTK_WIDGET_SET_FLAGS(okbtn, GTK_CAN_DEFAULT);
327
gtk_widget_grab_default(okbtn);
310
328
gtk_widget_show_all(dialog);
352
370
gtk_widget_show(label);
353
371
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
374
btn = gtk_button_new_with_mnemonic("_Yes");
355
376
btn = gtk_button_new_with_label("Yes");
356
378
gtk_widget_show(btn);
357
379
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), btn, FALSE, FALSE, 0);
358
380
gtk_widget_set_usize(btn, 70, 25);
359
381
gtk_signal_connect(GTK_OBJECT(btn), "clicked",
360
382
GTK_SIGNAL_FUNC(ToolsMain_YesNoBoxOnClicked), &ret);
385
btn = gtk_button_new_with_mnemonic("_No");
362
387
btn = gtk_button_new_with_label("No");
363
389
gtk_widget_show(btn);
364
390
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), btn, FALSE, FALSE, 0);
365
391
gtk_widget_set_usize(btn, 70, 25);
528
554
gtk_box_pack_start(GTK_BOX(vbox), notebookMain, TRUE, TRUE, 0);
529
555
gtk_container_set_border_width(GTK_CONTAINER(notebookMain), 0);
558
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Options_Create(ToolsMain),
559
gtk_label_new_with_mnemonic(TAB_LABEL_OPTIONS));
531
561
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Options_Create(ToolsMain),
532
562
gtk_label_new(TAB_LABEL_OPTIONS));
535
* Beginning with ACE1, a VM could be configured to prevent editing of
536
* device state from the guest. So we enable the devices page only if the
566
* Beginning with ACE1, a VM could be configured to prevent editing of
567
* device state from the guest. So we enable the devices page only if the
537
568
* command fails (meaning we're pre-ACE1), or if the command succeeds and
538
569
* we're allowed to edit the devices.
540
571
if (!RpcOut_sendOne(&result, &resultLen, "vmx.capability.edit_devices") ||
541
572
strcmp(result, "0") != 0) {
542
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain),
574
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain),
575
Devices_Create(ToolsMain),
576
gtk_label_new_with_mnemonic(TAB_LABEL_DEVICES));
578
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain),
543
579
Devices_Create(ToolsMain),
544
580
gtk_label_new(TAB_LABEL_DEVICES));
546
583
Debug("User not allowed to edit devices");
588
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Scripts_Create(ToolsMain),
589
gtk_label_new_with_mnemonic(TAB_LABEL_SCRIPTS));
590
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Shrink_Create(ToolsMain),
591
gtk_label_new_with_mnemonic(TAB_LABEL_SHRINK));
592
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), About_Create(ToolsMain),
593
gtk_label_new_with_mnemonic(TAB_LABEL_ABOUT));
550
595
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Scripts_Create(ToolsMain),
551
596
gtk_label_new(TAB_LABEL_SCRIPTS));
552
597
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), Shrink_Create(ToolsMain),
553
598
gtk_label_new(TAB_LABEL_SHRINK));
554
599
gtk_notebook_append_page(GTK_NOTEBOOK(notebookMain), About_Create(ToolsMain),
555
600
gtk_label_new(TAB_LABEL_ABOUT));
557
603
hbox = gtk_hbutton_box_new();
558
604
gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 10);
560
606
gtk_widget_show(hbox);
561
607
gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
564
610
* The HIG says that the Help button should be in the lower left, and all
565
611
* other buttons in the lower right.
567
613
* See http://developer.gnome.org/projects/gup/hig/2.0/windows-alert.html#alert-button-order
616
btn = gtk_button_new_with_mnemonic("_Help");
569
618
btn = gtk_button_new_with_label("Help");
570
620
gtk_widget_show(btn);
571
621
gtk_box_pack_start(GTK_BOX(hbox), btn, FALSE, FALSE, 0);
572
622
gtk_signal_connect(GTK_OBJECT(btn), "clicked", GTK_SIGNAL_FUNC(ToolsMain_OnHelp),
626
btn = gtk_button_new_with_mnemonic("_Close");
575
628
btn = gtk_button_new_with_label("Close");
576
630
gtk_widget_show(btn);
577
631
gtk_box_pack_start(GTK_BOX(hbox), btn, FALSE, FALSE, 0);
578
632
gtk_signal_connect_object(GTK_OBJECT(btn), "clicked",
605
RpcInResetCB(char const **result, // OUT
606
size_t *resultLen, // OUT
607
const char *name, // IN
608
const char *args, // IN
609
size_t argsSize, // Unused
610
void *clientData) // Unused
659
RpcInResetCB(RpcInData *data) // IN/OUT
612
661
Debug("----------toolbox: Received 'reset' from vmware\n");
614
return RpcIn_SetRetVals(result, resultLen, "ATR " TOOLS_CTLPANEL_NAME,
663
return RPCIN_SETRETVALS(data, "ATR " TOOLS_CTLPANEL_NAME, TRUE);
821
869
*-----------------------------------------------------------------------------
873
* Queries the Tools config dictionary for the location of the Toolbox
874
* Help docs. If not found, will try to fall back to semi-safe defaults.
880
* If a suitable directory was found, hlpDir will point to a buffer
881
* containing it. Otherwise it will remain NULL.
883
*-----------------------------------------------------------------------------
887
InitHelpDir(GuestApp_Dict *pConfDict) // IN
889
const char *tmpDir = NULL;
891
ASSERT(hlpDir == NULL);
893
tmpDir = GuestApp_GetDictEntry(pConfDict, CONFNAME_HELPDIR);
894
if (!tmpDir || !File_Exists(tmpDir)) {
897
static const char *candidates[] = {
898
"/usr/lib/vmware-tools/hlp", // Linux, Solaris
899
"/usr/local/lib/vmware-tools/hlp", // FreeBSD
902
for (i = 0; i < ARRAYSIZE(candidates); i++) {
903
if (File_Exists(candidates[i])) {
904
tmpDir = candidates[i];
911
hlpDir = Util_SafeStrdup(tmpDir);
917
*-----------------------------------------------------------------------------
825
921
* Print out usage information to stdout.
868
967
main(int argc, char *argv[])
871
Bool optIconify, optHelp;
969
Bool optIconify, optHelp, optVersion;
872
970
struct sigaction olds[ARRAYSIZE(gSignals)];
873
971
GuestApp_Dict *pConfDict;
876
* Setup the path to the help directory. We assume that this binary lives in
877
* "LIBDIR/<some_bin_path>" and that the help directory is "LIBDIR/hlp".
879
* If for some reason this isn't true (if argv[0] lacks enough parent
880
* directories) we'll still initialize the help directory path to something,
881
* but subsequent help requests will probably fail.
883
Str_Strcpy(hlpDir, argv[0], sizeof hlpDir);
884
tmp = Str_Strrchr(hlpDir, '/');
887
tmp = Str_Strrchr(hlpDir, '/');
892
Str_Strcat(hlpDir, "/hlp/", sizeof hlpDir);
894
973
if (!VmCheck_IsVirtualWorld()) {
895
974
#ifndef ALLOW_TOOLS_IN_FOREIGN_VM
896
Panic("The VMware Toolbox must be run inside a virtual machine.\n");
975
Warning("The VMware Toolbox must be run inside a virtual machine.\n");
898
978
runningInForeignVM = TRUE;