[gq-commit] gq/src browse.c,1.76,1.77 browse.h,1.27,1.28 common.h,1.26,1.27 configfile.c,1.38,1.39 c
Status: Beta
Brought to you by:
sur5r
Update of /cvsroot/gqclient/gq/src
In directory sc8-pr-cvs1:/tmp/cvs-serv14693
Modified Files:
browse.c browse.h common.h configfile.c configfile.h gq-xml.c
mainwin.c prefs.c
Log Message:
* Got rid of fixed length buffers
* Support for restoration of tab state:
- open tabs
- active tab
- object currently shown in browse tab
* tab state restoration required the introduction of methods for the
struct tab through a function table. Every mode tab can then declare
save and restore functions to use for persistant state handling -
might be useful for search history restoration as well
* Cleanups wrt destroy handling - badly broken in prefs (caused segfaulting in
a testcast)
Index: browse.c
===================================================================
RCS file: /cvsroot/gqclient/gq/src/browse.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -C2 -d -r1.76 -r1.77
*** browse.c 11 Oct 2003 21:35:28 -0000 1.76
--- browse.c 11 Oct 2003 21:47:51 -0000 1.77
***************
*** 51,54 ****
--- 51,55 ----
#include "search.h"
#include "i18n.h"
+ #include "state.h"
#ifdef BROWSER_DND
***************
*** 361,364 ****
--- 362,366 ----
ctreeroot = BROWSETAB(tab)->ctreeroot;
+ BROWSETAB(tab)->cur_server = server;
/* delete old struct inputform (if any) */
***************
*** 569,572 ****
--- 571,575 ----
server_name = entry->server->name; /* dn_by_node(node); */
g_string_assign(BROWSETAB(tab)->cur_dn, server_name);
+ BROWSETAB(tab)->cur_server = NULL;
pane2_scrwin = BROWSETAB(tab)->pane2_scrwin;
***************
*** 1162,1165 ****
--- 1165,1200 ----
}
+ static void browse_save_snapshot(char *state_name, struct tab *tab)
+ {
+ if (BROWSETAB(tab)->cur_dn)
+ state_value_set_string(state_name, "dn",
+ BROWSETAB(tab)->cur_dn->str);
+
+ if (BROWSETAB(tab)->cur_server)
+ state_value_set_string(state_name, "server",
+ BROWSETAB(tab)->cur_server->name);
+ }
+
+
+ static void browse_restore_snapshot(char *state_name, struct tab *tab)
+ {
+ GtkCTree *ctree = BROWSETAB(tab)->ctreeroot;
+ const char *dn = state_value_get_string(state_name, "dn", NULL);
+ const char *s = state_value_get_string(state_name, "server", NULL);
+
+ if (dn && s) {
+ struct ldapserver *server = server_by_name(s);
+
+ if (server && !server->ask_pw) {
+ show_server_dn(ctree, server, dn, TRUE);
+ }
+ }
+ }
+
+
+
+ static struct tab_vtab browse_vtab = { browse_save_snapshot,
+ browse_restore_snapshot };
+
struct tab *new_browsemode()
{
***************
*** 1172,1175 ****
--- 1207,1211 ----
modeinfo = calloc(sizeof(struct tab_browse), 1);
tab->modeinfo = modeinfo;
+ tab->vtab = &browse_vtab;
browsemode_vbox = gtk_vbox_new(FALSE, 0);
***************
*** 1237,1241 ****
modeinfo->cur_dn = g_string_sized_new(128);
! g_string_assign(modeinfo->cur_dn, "some dummy string");
/* prepare for proper cleanup */
--- 1273,1277 ----
modeinfo->cur_dn = g_string_sized_new(128);
! g_string_assign(modeinfo->cur_dn, "");
/* prepare for proper cleanup */
***************
*** 1524,1528 ****
void show_server_dn(GtkCTree *tree,
! struct ldapserver *server, char *dn,
gboolean select_node)
{
--- 1560,1564 ----
void show_server_dn(GtkCTree *tree,
! struct ldapserver *server, const char *dn,
gboolean select_node)
{
***************
*** 1534,1538 ****
}
! void show_dn(GtkCTree *tree, GtkCTreeNode *node, char *dn,
gboolean select_node)
{
--- 1570,1574 ----
}
! void show_dn(GtkCTree *tree, GtkCTreeNode *node, const char *dn,
gboolean select_node)
{
Index: browse.h
===================================================================
RCS file: /cvsroot/gqclient/gq/src/browse.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** browse.h 11 Oct 2003 21:35:29 -0000 1.27
--- browse.h 11 Oct 2003 21:47:51 -0000 1.28
***************
*** 33,36 ****
--- 33,38 ----
struct tab_browse {
GString *cur_dn;
+ struct ldapserver *cur_server;
+
GtkCTree *ctreeroot;
GtkWidget *ctree_refresh; /* XXX try to get rid of this */
***************
*** 157,163 ****
void show_server_dn(GtkCTree *tree,
! struct ldapserver *server, char *dn,
gboolean select_node);
! void show_dn(GtkCTree *tree, GtkCTreeNode *node, char *dn,
gboolean select_node);
--- 159,165 ----
void show_server_dn(GtkCTree *tree,
! struct ldapserver *server, const char *dn,
gboolean select_node);
! void show_dn(GtkCTree *tree, GtkCTreeNode *node, const char *dn,
gboolean select_node);
Index: common.h
===================================================================
RCS file: /cvsroot/gqclient/gq/src/common.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** common.h 11 Oct 2003 21:35:29 -0000 1.26
--- common.h 11 Oct 2003 21:47:51 -0000 1.27
***************
*** 68,71 ****
--- 68,81 ----
#define SCHEMA_MODE 3
+ /* fwd decl */
+ struct mainwin_data;
+
+ struct tab;
+
+ struct tab_vtab {
+ void (*save_snapshot)(char *state_name, struct tab *);
+ void (*restore_snapshot)(char *state_name, struct tab *);
+ };
+
struct tab {
int type;
***************
*** 76,79 ****
--- 86,91 ----
widget of the tab */
void *modeinfo;
+
+ struct tab_vtab *vtab;
};
Index: configfile.c
===================================================================
RCS file: /cvsroot/gqclient/gq/src/configfile.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** configfile.c 10 Oct 2003 06:59:24 -0000 1.38
--- configfile.c 11 Oct 2003 21:47:51 -0000 1.39
***************
*** 2,5 ****
--- 2,6 ----
GQ -- a GTK-based LDAP client
Copyright (C) 1998-2001 Bert Vermeulen
+ Copyright (C) 2002-2003 Peter Stamfest
This program is released under the Gnu General Public License with
***************
*** 266,269 ****
--- 267,271 ----
{
char outstr[128];
+ assert(strlen(entity) < 40);
snprintf(outstr, sizeof(outstr),
***************
*** 277,280 ****
--- 279,283 ----
{
char outstr[128];
+ assert(strlen(entity) < 40);
snprintf(outstr, sizeof(outstr),
***************
*** 428,431 ****
--- 431,436 ----
config_write_bool(wc, cfg->restore_search_history,
"restore-search-history");
+ config_write_bool(wc, cfg->restore_tabs,
+ "restore-tabs");
config_write_string(wc, detokenize(token_ldifformat, cfg->ldifformat), "ldif-format");
***************
*** 602,605 ****
--- 607,611 ----
cfg->restore_window_positions = DEFAULT_RESTORE_POSITIONS;
cfg->restore_search_history = DEFAULT_RESTORE_SEARCHES;
+ cfg->restore_tabs = DEFAULT_RESTORE_TABS;
return cfg;
***************
*** 669,672 ****
--- 675,680 ----
struct ldapserver *server;
GList *I;
+
+ assert(cfg);
if (cfg->schemaserver) g_free(cfg->schemaserver);
Index: configfile.h
===================================================================
RCS file: /cvsroot/gqclient/gq/src/configfile.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** configfile.h 10 Oct 2003 06:59:25 -0000 1.27
--- configfile.h 11 Oct 2003 21:47:51 -0000 1.28
***************
*** 1,5 ****
/*
GQ -- a GTK-based LDAP client
! Copyright (C) 1998-2001 Bert Vermeulen
This program is released under the Gnu General Public License with
--- 1,6 ----
/*
GQ -- a GTK-based LDAP client
! Copyright (C) 1998-2003 Bert Vermeulen
! Copyright (C) 2002-2003 Peter Stamfest
This program is released under the Gnu General Public License with
***************
*** 65,68 ****
--- 66,70 ----
#define DEFAULT_RESTORE_POSITIONS 0
#define DEFAULT_RESTORE_SEARCHES 1
+ #define DEFAULT_RESTORE_TABS 0
/* The following do not _really_ belong in here right now... */
***************
*** 104,107 ****
--- 106,110 ----
int restore_window_positions;
int restore_search_history;
+ int restore_tabs;
GHashTable *defaultDT;
Index: gq-xml.c
===================================================================
RCS file: /cvsroot/gqclient/gq/src/gq-xml.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** gq-xml.c 5 Oct 2003 22:23:28 -0000 1.4
--- gq-xml.c 11 Oct 2003 21:47:51 -0000 1.5
***************
*** 218,221 ****
--- 218,230 ----
}
+ static void restore_tabsE(struct parser_context *ctx,
+ struct tagstack_entry *e)
+ {
+ struct gq_config *c = peek_tag(ctx->stack, 1)->data;
+
+ int b = booleanCDATA(ctx, e);
+ if (b >= 0) c->restore_tabs = b;
+ }
+
static void ldif_formatE(struct parser_context *ctx,
struct tagstack_entry *e)
***************
*** 638,641 ****
--- 647,655 ----
},
{
+ "restore-tabs", 0,
+ NULL, restore_tabsE,
+ { "gq-config", NULL },
+ },
+ {
"ldif-format", 0,
NULL, ldif_formatE,
***************
*** 997,1001 ****
g_free(handler);
if (rc != 0) {
! free_config(comm.result);
comm.result = NULL;
}
--- 1011,1017 ----
g_free(handler);
if (rc != 0) {
! if (comm.result) {
! free_config(comm.result);
! }
comm.result = NULL;
}
Index: mainwin.c
===================================================================
RCS file: /cvsroot/gqclient/gq/src/mainwin.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** mainwin.c 11 Oct 2003 21:35:29 -0000 1.42
--- mainwin.c 11 Oct 2003 21:47:51 -0000 1.43
***************
*** 112,119 ****
--- 112,174 ----
}
+ gboolean mainwin_restore_snapshot(struct mainwin_data *win)
+ {
+ int i, type;
+ char tmp[32];
+
+ if (!config->restore_tabs) return FALSE;
+
+ if (!exists_entity("mainwin.tabs")) return FALSE;
+
+ for (i = 0 ; ; i++) {
+ snprintf(tmp, sizeof(tmp), "mainwin.tabs.%d", i);
+ if (!exists_entity(tmp)) break;
+ type = state_value_get_int(tmp, "type", -1);
+ if (type > 0) {
+ struct tab *tab = new_modetab(win, type);
+
+ if (tab->vtab && tab->vtab->restore_snapshot) {
+ tab->vtab->restore_snapshot(tmp, tab);
+ }
+ }
+
+ }
+
+ if (i > 0) {
+ type = state_value_get_int("mainwin.tabs", "active", -1);
+ gtk_notebook_set_page(GTK_NOTEBOOK(win->mainbook), type);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ void mainwin_save_snapshot(struct mainwin_data *win)
+ {
+ struct tab *tab = NULL;
+ int i;
+ char tmp[32];
+
+ rm_value("mainwin.tabs");
+
+ if (!config->restore_tabs) return;
+
+ for( i = 0 ; (tab = mainwin_get_tab_nth(win, i)) != NULL ; i++) {
+ snprintf(tmp, sizeof(tmp), "mainwin.tabs.%d", i);
+ state_value_set_int(tmp, "type", tab->type);
+ if (tab->vtab && tab->vtab->save_snapshot) {
+ tab->vtab->save_snapshot(tmp, tab);
+ }
+ }
+
+ state_value_set_int("mainwin.tabs", "active",
+ gtk_notebook_get_current_page(GTK_NOTEBOOK(win->mainbook)));
+ }
+
+
/* gtk2 checked (multiple destroy callbacks safety), confidence 0.7:
cleanup_all_tabs semantics? */
void gq_exit(GtkWidget *widget, struct mainwin_data *win)
{
+ mainwin_save_snapshot(win);
cleanup(win);
gtk_main_quit();
***************
*** 448,458 ****
GTK_SIGNAL_FUNC(remove_tab), win);
! new_modetab(win, SEARCH_MODE);
! new_modetab(win, BROWSE_MODE | 32768);
! new_modetab(win, SCHEMA_MODE | 32768);
gtk_widget_show(win->mainwin);
}
-
struct tab *mainwin_get_tab_nth(struct mainwin_data *win, int n)
--- 503,516 ----
GTK_SIGNAL_FUNC(remove_tab), win);
! gtk_widget_realize(win->mainwin);
!
! if (! mainwin_restore_snapshot(win)) {
! new_modetab(win, SEARCH_MODE);
! new_modetab(win, BROWSE_MODE | 32768);
! new_modetab(win, SCHEMA_MODE | 32768);
! }
gtk_widget_show(win->mainwin);
}
struct tab *mainwin_get_tab_nth(struct mainwin_data *win, int n)
Index: prefs.c
===================================================================
RCS file: /cvsroot/gqclient/gq/src/prefs.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -d -r1.39 -r1.40
*** prefs.c 10 Oct 2003 06:55:03 -0000 1.39
--- prefs.c 11 Oct 2003 21:47:51 -0000 1.40
***************
*** 1,6 ****
/*
GQ -- a GTK-based LDAP client
! Copyright (C) 1998-2001 Bert Vermeulen
! Parts: Copyright (C) 2002 Peter Stamfest and Bert Vermeulen
This program is released under the Gnu General Public License with
--- 1,6 ----
/*
GQ -- a GTK-based LDAP client
! Copyright (C) 1998-2003 Bert Vermeulen
! Copyright (C) 2002-2003 Peter Stamfest
This program is released under the Gnu General Public License with
***************
*** 78,81 ****
--- 78,82 ----
GtkWidget *restore_window_positions;
GtkWidget *restore_search_history;
+ GtkWidget *restore_tabs;
/* template tab */
***************
*** 109,117 ****
static void create_serverstab(GtkWidget *target, struct prefs_windata *pw);
static void create_templatestab(GtkWidget *target, struct prefs_windata *pw);
! static void create_browse_optionstab(GtkWidget *target, struct prefs_windata *pw);
! static void create_search_optionstab(GtkWidget *target, struct prefs_windata *pw);
static void create_ldiftab(GtkWidget *target, struct prefs_windata *pw);
! static void destroy_edit_server_window(GtkWidget *this, struct server_windata *sw);
static void create_guitab(GtkWidget *target, struct prefs_windata *);
--- 110,121 ----
static void create_serverstab(GtkWidget *target, struct prefs_windata *pw);
static void create_templatestab(GtkWidget *target, struct prefs_windata *pw);
! static void create_browse_optionstab(GtkWidget *target,
! struct prefs_windata *pw);
! static void create_search_optionstab(GtkWidget *target,
! struct prefs_windata *pw);
static void create_ldiftab(GtkWidget *target, struct prefs_windata *pw);
! static void destroy_edit_server_window(GtkWidget *this,
! struct server_windata *sw);
static void create_guitab(GtkWidget *target, struct prefs_windata *);
***************
*** 119,124 ****
static void template_edit_callback(GtkWidget *widget, struct prefs_windata *);
static void template_selected_callback(GtkWidget *clist, gint row, gint column,
! GdkEventButton *event, struct prefs_windata *data);
! static void template_delete_callback(GtkWidget *widget, struct prefs_windata *pw);
--- 123,130 ----
static void template_edit_callback(GtkWidget *widget, struct prefs_windata *);
static void template_selected_callback(GtkWidget *clist, gint row, gint column,
! GdkEventButton *event,
! struct prefs_windata *data);
! static void template_delete_callback(GtkWidget *widget,
! struct prefs_windata *pw);
***************
*** 135,139 ****
! static prefs_callback_data *new_prefs_callback_data(struct server_windata *sw) {
prefs_callback_data *d = g_malloc(sizeof(prefs_callback_data));
d->server = NULL;
--- 141,146 ----
! static prefs_callback_data *new_prefs_callback_data(struct server_windata *sw)
! {
prefs_callback_data *d = g_malloc(sizeof(prefs_callback_data));
d->server = NULL;
***************
*** 317,321 ****
server->bindtype = tokenize(token_bindtype, text);
! /* connection info might have changed for this server -- close cached connection */
close_connection(server, TRUE);
--- 324,329 ----
server->bindtype = tokenize(token_bindtype, text);
! /* connection info might have changed for this server -- close
! cached connection */
close_connection(server, TRUE);
***************
*** 336,340 ****
}
! destroy_edit_server_window(NULL, cb_data->sw);
}
--- 344,348 ----
}
! gtk_widget_destroy(window);
}
***************
*** 350,358 ****
}
! static void destroy_edit_server_window(GtkWidget *this, struct server_windata *sw)
{
! gtk_widget_destroy(current_edit_server_window);
! current_edit_server_window = NULL;
!
if (sw) g_free(sw);
}
--- 358,367 ----
}
! static void destroy_edit_server_window(GtkWidget *this,
! struct server_windata *sw)
{
! if (this == current_edit_server_window) {
! current_edit_server_window = NULL;
! }
if (sw) g_free(sw);
}
***************
*** 363,367 ****
{
if(event && event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape) {
! destroy_edit_server_window(NULL, NULL);
return(TRUE);
}
--- 372,376 ----
{
if(event && event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape) {
! gtk_widget_destroy(widget);
return(TRUE);
}
***************
*** 370,374 ****
return(FALSE);
#else
! return(TRUE); /* may be a bug to return TRUE unconditionally in gtk 1.2 */
#endif
}
--- 379,384 ----
return(FALSE);
#else
! return(TRUE); /* may be a bug to return TRUE unconditionally in
! gtk 1.2 */
#endif
}
***************
*** 394,399 ****
int y, z;
int i;
! char title[MAX_SERVERNAME_LEN + 8];
! char tmp[16];
GtkWidget *bindtype;
GList *bindtypes = NULL;
--- 404,409 ----
int y, z;
int i;
! GString *title;
! char tmp[16]; /* fixed buffer: OK - used for printf("%d") only */
GtkWidget *bindtype;
GList *bindtypes = NULL;
***************
*** 441,449 ****
(GtkDestroyNotify) destroy_prefs_callback_data);
if(cb_data->edit_new_server)
! snprintf(title, sizeof(title), _("New server"));
else
! snprintf(title, sizeof(title), _("Server %s"), server->name);
! gtk_window_set_title(GTK_WINDOW(editwindow), title);
gtk_window_set_policy(GTK_WINDOW(editwindow), TRUE, TRUE, FALSE);
--- 451,464 ----
(GtkDestroyNotify) destroy_prefs_callback_data);
+ title = g_string_sized_new(64);
+
if(cb_data->edit_new_server)
! g_string_sprintf(title, _("New server"));
else
! g_string_sprintf(title, _("Server %s"), server->name);
!
! gtk_window_set_title(GTK_WINDOW(editwindow), title->str);
! g_string_free(title, TRUE);
!
gtk_window_set_policy(GTK_WINDOW(editwindow), TRUE, TRUE, FALSE);
***************
*** 461,465 ****
gtk_box_pack_start(GTK_BOX(main_vbox), notebook, TRUE, TRUE, 0);
-
/* "General" tab */
--- 476,479 ----
***************
*** 758,762 ****
gtk_widget_show(bindtype);
! gtk_list_select_item(GTK_LIST(GTK_COMBO(bindtype)->list), server->bindtype);
gtk_table_attach(GTK_TABLE(table2), bindtype, 1, 2, y, y + 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
--- 772,777 ----
gtk_widget_show(bindtype);
! gtk_list_select_item(GTK_LIST(GTK_COMBO(bindtype)->list),
! server->bindtype);
gtk_table_attach(GTK_TABLE(table2), bindtype, 1, 2, y, y + 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
***************
*** 770,774 ****
#if GTK_MAJOR >= 2
! gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_COMBO(bindtype)->entry);
#endif
--- 785,790 ----
#if GTK_MAJOR >= 2
! gtk_label_set_mnemonic_widget(GTK_LABEL(label),
! GTK_COMBO(bindtype)->entry);
#endif
***************
*** 974,977 ****
--- 990,994 ----
gtk_box_pack_start(GTK_BOX(main_vbox), hbox, FALSE, TRUE, 10);
+
#if GTK_MAJOR >= 2
okbutton = gtk_button_new_from_stock(GTK_STOCK_OK);
***************
*** 993,1002 ****
#endif
gtk_widget_show(cancelbutton);
! gtk_signal_connect(GTK_OBJECT(cancelbutton), "clicked",
! GTK_SIGNAL_FUNC(destroy_edit_server_window),
! sw);
! gtk_signal_connect(GTK_OBJECT(editwindow), "delete_event",
! GTK_SIGNAL_FUNC(destroy_edit_server_window),
! sw);
gtk_signal_connect(GTK_OBJECT(editwindow), "key_press_event",
GTK_SIGNAL_FUNC(destroy_edit_server_window_on_esc),
--- 1010,1016 ----
#endif
gtk_widget_show(cancelbutton);
! gtk_signal_connect_object(GTK_OBJECT(cancelbutton), "clicked",
! GTK_SIGNAL_FUNC(gtk_widget_destroy),
! editwindow);
gtk_signal_connect(GTK_OBJECT(editwindow), "key_press_event",
GTK_SIGNAL_FUNC(destroy_edit_server_window_on_esc),
***************
*** 1150,1153 ****
--- 1164,1170 ----
CONFIG_TOGGLE_BUTTON(config, pw, restore_search_history);
+ /* restore tabs */
+ CONFIG_TOGGLE_BUTTON(config, pw, restore_tabs);
+
/* LDIF: format */
for(type = 0; type < sizeof(pw->ldif_format)/sizeof(pw->ldif_format[0]);
***************
*** 1182,1186 ****
GtkWidget *label, *vbox2;
GtkWidget *notebook;
! GtkWidget *vbox_search_options, *vbox_browse_options, *vbox_servers, *vbox_templates, *vbox_ldif, *vbox_gui;
GtkWidget *hbox_buttons, *okbutton, *cancelbutton;
--- 1199,1204 ----
GtkWidget *label, *vbox2;
GtkWidget *notebook;
! GtkWidget *vbox_search_options, *vbox_browse_options;
! GtkWidget *vbox_servers, *vbox_templates, *vbox_ldif, *vbox_gui;
GtkWidget *hbox_buttons, *okbutton, *cancelbutton;
***************
*** 1236,1240 ****
GTK_WIDGET_UNSET_FLAGS(GTK_NOTEBOOK(notebook), GTK_CAN_FOCUS);
#endif
! gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_search_options, label);
/* Browse Options tab */
--- 1254,1259 ----
GTK_WIDGET_UNSET_FLAGS(GTK_NOTEBOOK(notebook), GTK_CAN_FOCUS);
#endif
! gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
! vbox_search_options, label);
/* Browse Options tab */
***************
*** 1246,1250 ****
label = gq_label_new(_("Browse O_ptions"));
gtk_widget_show(label);
! gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox_browse_options, label);
/* Servers tab */
--- 1265,1270 ----
label = gq_label_new(_("Browse O_ptions"));
gtk_widget_show(label);
! gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
! vbox_browse_options, label);
/* Servers tab */
***************
*** 1346,1350 ****
gtk_widget_show(scrwin);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
! GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox2), scrwin, TRUE, TRUE, 0);
--- 1366,1371 ----
gtk_widget_show(scrwin);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
! GTK_POLICY_AUTOMATIC,
! GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox2), scrwin, TRUE, TRUE, 0);
***************
*** 1460,1464 ****
fill_serverlist_combo(combo);
if(strlen(config->schemaserver))
! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), config->schemaserver);
gtk_widget_show(combo);
gtk_box_pack_start(GTK_BOX(hbox1), combo, FALSE, FALSE, 0);
--- 1481,1486 ----
fill_serverlist_combo(combo);
if(strlen(config->schemaserver))
! gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry),
! config->schemaserver);
gtk_widget_show(combo);
gtk_box_pack_start(GTK_BOX(hbox1), combo, FALSE, FALSE, 0);
***************
*** 1473,1477 ****
gtk_widget_show(scrwin);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
! GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox2), scrwin, TRUE, TRUE, 0);
--- 1495,1500 ----
gtk_widget_show(scrwin);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrwin),
! GTK_POLICY_AUTOMATIC,
! GTK_POLICY_AUTOMATIC);
gtk_box_pack_start(GTK_BOX(hbox2), scrwin, TRUE, TRUE, 0);
***************
*** 1485,1493 ****
gtk_clist_set_selection_mode(GTK_CLIST(template_clist),
GTK_SELECTION_SINGLE);
! gtk_clist_set_shadow_type(GTK_CLIST(template_clist), GTK_SHADOW_ETCHED_IN);
gtk_signal_connect(GTK_OBJECT(template_clist), "select_row",
GTK_SIGNAL_FUNC(template_selected_callback), pw);
gtk_widget_show(template_clist);
! gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrwin), template_clist);
fill_clist_templates(template_clist);
--- 1508,1518 ----
gtk_clist_set_selection_mode(GTK_CLIST(template_clist),
GTK_SELECTION_SINGLE);
! gtk_clist_set_shadow_type(GTK_CLIST(template_clist),
! GTK_SHADOW_ETCHED_IN);
gtk_signal_connect(GTK_OBJECT(template_clist), "select_row",
GTK_SIGNAL_FUNC(template_selected_callback), pw);
gtk_widget_show(template_clist);
! gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrwin),
! template_clist);
fill_clist_templates(template_clist);
***************
*** 1850,1853 ****
--- 1875,1896 ----
_("If set then save and restore the search "
"history across program invocations."),
+ S_("tooltip|")
+ );
+
+ /* Restore Tabs */
+ button = gq_check_button_new_with_label(_("Restore Ta_bs"));
+ pw->restore_tabs = button;
+
+ if(config->restore_tabs)
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), TRUE);
+ #ifdef OLD_FOCUS_HANDLING
+ GTK_WIDGET_UNSET_FLAGS(GTK_CHECK_BUTTON(button), GTK_CAN_FOCUS);
+ #endif
+ gtk_widget_show(button);
+ gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, TRUE, 5);
+
+ gtk_tooltips_set_tip(tips, button,
+ _("If set then save and restore the state "
+ "of the main window tabs."),
S_("tooltip|")
);
|