55
54
GtkWidget *menu; /* for optionmenu (==droplist) */
56
55
GtkWidget *optmenu; /* also for optionmenu */
57
56
GtkWidget *text; /* for text */
57
GtkWidget *label; /* for dlg_label_change */
58
58
GtkAdjustment *adj; /* for the scrollbar in a list box */
91
92
static void shortcut_add(struct Shortcuts *scs, GtkWidget *labelw,
92
93
int chr, int action, void *ptr);
94
static void shortcut_highlight(GtkWidget *label, int chr);
93
95
static int listitem_single_key(GtkWidget *item, GdkEventKey *event,
95
97
static int listitem_multi_key(GtkWidget *item, GdkEventKey *event,
97
static int listitem_button(GtkWidget *item, GdkEventButton *event,
99
static int listitem_button_press(GtkWidget *item, GdkEventButton *event,
101
static int listitem_button_release(GtkWidget *item, GdkEventButton *event,
99
103
static void menuitem_activate(GtkMenuItem *item, gpointer data);
100
104
static void coloursel_ok(GtkButton *button, gpointer data);
101
105
static void coloursel_cancel(GtkButton *button, gpointer data);
438
442
gtk_signal_connect(GTK_OBJECT(listitem), "focus_in_event",
439
443
GTK_SIGNAL_FUNC(widget_focus), dp);
440
444
gtk_signal_connect(GTK_OBJECT(listitem), "button_press_event",
441
GTK_SIGNAL_FUNC(listitem_button), dp);
445
GTK_SIGNAL_FUNC(listitem_button_press), dp);
446
gtk_signal_connect(GTK_OBJECT(listitem), "button_release_event",
447
GTK_SIGNAL_FUNC(listitem_button_release), dp);
442
448
gtk_object_set_data(GTK_OBJECT(listitem), "user-data",
443
449
GINT_TO_POINTER(id));
549
555
if (uc->optmenu) {
550
556
gtk_option_menu_set_history(GTK_OPTION_MENU(uc->optmenu), index);
560
gdouble newtop, newbot;
552
562
gtk_list_select_item(GTK_LIST(uc->list), index);
565
* Scroll the list box if necessary to ensure the newly
566
* selected item is visible.
568
items = gtk_container_children(GTK_CONTAINER(uc->list));
569
nitems = g_list_length(items);
571
int modified = FALSE;
573
newtop = uc->adj->lower +
574
(uc->adj->upper - uc->adj->lower) * index / nitems;
575
newbot = uc->adj->lower +
576
(uc->adj->upper - uc->adj->lower) * (index+1) / nitems;
577
if (uc->adj->value > newtop) {
579
uc->adj->value = newtop;
580
} else if (uc->adj->value < newbot - uc->adj->page_size) {
582
uc->adj->value = newbot - uc->adj->page_size;
585
gtk_adjustment_value_changed(uc->adj);
564
598
gtk_label_set_text(GTK_LABEL(uc->text), text);
601
void dlg_label_change(union control *ctrl, void *dlg, char const *text)
603
struct dlgparam *dp = (struct dlgparam *)dlg;
604
struct uctrl *uc = dlg_find_byctrl(dp, ctrl);
606
switch (uc->ctrl->generic.type) {
608
gtk_label_set_text(GTK_LABEL(uc->toplevel), text);
609
shortcut_highlight(uc->toplevel, ctrl->button.shortcut);
612
gtk_label_set_text(GTK_LABEL(uc->toplevel), text);
613
shortcut_highlight(uc->toplevel, ctrl->checkbox.shortcut);
616
gtk_label_set_text(GTK_LABEL(uc->label), text);
617
shortcut_highlight(uc->label, ctrl->radio.shortcut);
620
gtk_label_set_text(GTK_LABEL(uc->label), text);
621
shortcut_highlight(uc->label, ctrl->editbox.shortcut);
623
case CTRL_FILESELECT:
624
gtk_label_set_text(GTK_LABEL(uc->label), text);
625
shortcut_highlight(uc->label, ctrl->fileselect.shortcut);
627
case CTRL_FONTSELECT:
628
gtk_label_set_text(GTK_LABEL(uc->label), text);
629
shortcut_highlight(uc->label, ctrl->fontselect.shortcut);
632
gtk_label_set_text(GTK_LABEL(uc->label), text);
633
shortcut_highlight(uc->label, ctrl->listbox.shortcut);
636
assert(!"This shouldn't happen");
567
641
void dlg_filesel_set(union control *ctrl, void *dlg, Filename fn)
569
643
struct dlgparam *dp = (struct dlgparam *)dlg;
1014
1088
return listitem_key(item, event, data, TRUE);
1017
static int listitem_button(GtkWidget *item, GdkEventButton *event,
1020
struct dlgparam *dp = (struct dlgparam *)data;
1021
if (event->type == GDK_2BUTTON_PRESS ||
1022
event->type == GDK_3BUTTON_PRESS) {
1023
struct uctrl *uc = dlg_find_bywidget(dp, GTK_WIDGET(item));
1091
static int listitem_button_press(GtkWidget *item, GdkEventButton *event,
1094
struct dlgparam *dp = (struct dlgparam *)data;
1095
struct uctrl *uc = dlg_find_bywidget(dp, GTK_WIDGET(item));
1096
switch (event->type) {
1098
case GDK_BUTTON_PRESS: uc->nclicks = 1; break;
1099
case GDK_2BUTTON_PRESS: uc->nclicks = 2; break;
1100
case GDK_3BUTTON_PRESS: uc->nclicks = 3; break;
1105
static int listitem_button_release(GtkWidget *item, GdkEventButton *event,
1108
struct dlgparam *dp = (struct dlgparam *)data;
1109
struct uctrl *uc = dlg_find_bywidget(dp, GTK_WIDGET(item));
1110
if (uc->nclicks>1) {
1024
1111
uc->ctrl->generic.handler(uc->ctrl, dp, dp->data, EVENT_ACTION);
1342
1431
gtk_widget_show(label);
1343
1432
shortcut_add(scs, label, ctrl->radio.shortcut,
1344
1433
SHORTCUT_UCTRL, uc);
1346
1436
percentages = g_new(gint, ctrl->radio.ncolumns);
1347
1437
for (i = 0; i < ctrl->radio.ncolumns; i++) {
1674
1767
static void treeitem_sel(GtkItem *item, gpointer data)
1676
1769
struct selparam *sp = (struct selparam *)data;
1678
panels_switch_to(sp->panels, sp->panel);
1772
page_num = gtk_notebook_page_num(sp->panels, sp->panel);
1773
gtk_notebook_set_page(sp->panels, page_num);
1775
dlg_refresh(NULL, sp->dp);
1680
1777
sp->dp->shortcuts = &sp->shortcuts;
1681
1778
sp->dp->currtreeitem = sp->treeitem;
1996
static void shortcut_highlight(GtkWidget *labelw, int chr)
1998
GtkLabel *label = GTK_LABEL(labelw);
1999
gchar *currstr, *pattern;
2002
gtk_label_get(label, &currstr);
2003
for (i = 0; currstr[i]; i++)
2004
if (tolower((unsigned char)currstr[i]) == chr) {
2007
pattern = dupprintf("%*s_", i, "");
2009
gtk_widget_size_request(GTK_WIDGET(label), &req);
2010
gtk_label_set_pattern(label, pattern);
2011
gtk_widget_set_usize(GTK_WIDGET(label), -1, req.height);
1899
2018
void shortcut_add(struct Shortcuts *scs, GtkWidget *labelw,
1900
2019
int chr, int action, void *ptr)
1902
GtkLabel *label = GTK_LABEL(labelw);
1903
gchar *currstr, *pattern;
1906
2021
if (chr == NO_SHORTCUT)
1920
2035
scs->sc[chr].uc = (struct uctrl *)ptr;
1923
gtk_label_get(label, &currstr);
1924
for (i = 0; currstr[i]; i++)
1925
if (tolower((unsigned char)currstr[i]) == chr) {
1928
pattern = dupprintf("%*s_", i, "");
1930
gtk_widget_size_request(GTK_WIDGET(label), &req);
1931
gtk_label_set_pattern(label, pattern);
1932
gtk_widget_set_usize(GTK_WIDGET(label), -1, req.height);
2038
shortcut_highlight(labelw, chr);
1939
2041
int get_listitemheight(void)
1975
2074
window = gtk_dialog_new();
1977
2076
ctrlbox = ctrl_new_box();
1978
setup_config_box(ctrlbox, &sl, midsession, cfg->protocol, protcfginfo);
1979
unix_setup_config_box(ctrlbox, midsession);
2077
setup_config_box(ctrlbox, midsession, cfg->protocol, protcfginfo);
2078
unix_setup_config_box(ctrlbox, midsession, cfg->protocol);
1980
2079
gtk_setup_config_box(ctrlbox, midsession, window);
1982
2081
gtk_window_set_title(GTK_WINDOW(window), title);
2001
2100
shortcut_add(&scs, label, 'g', SHORTCUT_TREE, tree);
2002
2101
gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM);
2003
2102
gtk_tree_set_selection_mode(GTK_TREE(tree), GTK_SELECTION_BROWSE);
2004
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(treescroll),
2006
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(treescroll),
2008
GTK_POLICY_AUTOMATIC);
2009
2103
gtk_signal_connect(GTK_OBJECT(tree), "focus",
2010
2104
GTK_SIGNAL_FUNC(tree_focus), &dp);
2011
gtk_widget_show(tree);
2012
2105
gtk_widget_show(treescroll);
2013
2106
gtk_box_pack_start(GTK_BOX(vbox), treescroll, TRUE, TRUE, 0);
2014
panels = panels_new();
2107
panels = gtk_notebook_new();
2108
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(panels), FALSE);
2109
gtk_notebook_set_show_border(GTK_NOTEBOOK(panels), FALSE);
2015
2110
gtk_box_pack_start(GTK_BOX(hbox), panels, TRUE, TRUE, 0);
2016
2111
gtk_widget_show(panels);
2059
2154
gtk_tree_item_set_subtree
2060
2155
(treeitemlevels[j-1],
2061
2156
GTK_WIDGET(treelevels[j-1]));
2062
gtk_tree_item_expand(treeitemlevels[j-1]);
2158
gtk_tree_item_expand(treeitemlevels[j-1]);
2160
gtk_tree_item_collapse(treeitemlevels[j-1]);
2064
2162
gtk_tree_append(treelevels[j-1], treeitem);
2081
2179
first = (panelvbox == NULL);
2083
2181
panelvbox = gtk_vbox_new(FALSE, 4);
2084
gtk_container_add(GTK_CONTAINER(panels), panelvbox);
2182
gtk_widget_show(panelvbox);
2183
gtk_notebook_append_page(GTK_NOTEBOOK(panels), panelvbox,
2086
panels_switch_to(PANELS(panels), panelvbox);
2188
page_num = gtk_notebook_page_num(GTK_NOTEBOOK(panels),
2190
gtk_notebook_set_page(GTK_NOTEBOOK(panels), page_num);
2087
2191
gtk_tree_select_child(GTK_TREE(tree), treeitem);
2093
2197
struct selparam);
2095
2199
selparams[nselparams].dp = &dp;
2096
selparams[nselparams].panels = PANELS(panels);
2200
selparams[nselparams].panels = GTK_NOTEBOOK(panels);
2097
2201
selparams[nselparams].panel = panelvbox;
2098
2202
selparams[nselparams].shortcuts = scs; /* structure copy */
2099
2203
selparams[nselparams].treeitem = treeitem;
2129
2233
dp.window = window;
2237
extern void set_window_icon(GtkWidget *window,
2238
const char *const *const *icon,
2240
extern const char *const *const cfg_icon[];
2241
extern const int n_cfg_icon;
2242
set_window_icon(window, cfg_icon, n_cfg_icon);
2245
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(treescroll),
2247
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(treescroll),
2249
GTK_POLICY_AUTOMATIC);
2250
gtk_widget_show(tree);
2131
2252
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
2132
2253
gtk_widget_show(window);
2426
2546
char *licence =
2427
"Copyright 1997-2005 Simon Tatham.\n\n"
2547
"Copyright 1997-2007 Simon Tatham.\n\n"
2429
2549
"Portions copyright Robert de Bath, Joris van Rantwijk, Delian "
2430
2550
"Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas "
2431
"Barry, Justin Bradford, Ben Harris, Malcolm Smith, Markus Kuhn, "
2432
"and CORE SDI S.A.\n\n"
2551
"Barry, Justin Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, "
2552
"Markus Kuhn, and CORE SDI S.A.\n\n"
2434
2554
"Permission is hereby granted, free of charge, to any person "
2435
2555
"obtaining a copy of this software and associated documentation "