diff options
author | Ulf Lamping <ulf.lamping@web.de> | 2006-08-29 21:09:32 +0000 |
---|---|---|
committer | Ulf Lamping <ulf.lamping@web.de> | 2006-08-29 21:09:32 +0000 |
commit | 2dff4c21bbc32efcae0033393c93024b54240341 (patch) | |
tree | 4d3b21658c8b84951a895f54d592f8c2b0e0454b /gtk | |
parent | fc2c17c6f722793e43d6c282f0140d3d44ed9c28 (diff) |
fix #331: add a scrollbar to the dialog. If a fileset contains more than 18 files, use that scrollbar. These 18 files should be displayable even on a 800*600 display.
svn path=/trunk/; revision=19080
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/fileset_dlg.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/gtk/fileset_dlg.c b/gtk/fileset_dlg.c index 09940c8ca8..2afb312875 100644 --- a/gtk/fileset_dlg.c +++ b/gtk/fileset_dlg.c @@ -67,6 +67,7 @@ static GtkWidget *fs_w; /* various widget related global data */ int row; GtkWidget *fs_tb; +GtkWidget *fs_sw; GtkTooltips *tooltips; GtkWidget *fs_dir_lb; GtkWidget *fs_first_rb; @@ -169,7 +170,7 @@ fileset_dlg_add_file(fileset_entry *entry) { created = fileset_dlg_name2date_dup(entry->name); if(!created) { - /* if this file doesn't follow the fiel set pattern, */ + /* if this file doesn't follow the file set pattern, */ /* use the creation time of that file */ local = localtime(&entry->ctime); created = g_strdup_printf("%04u.%02u.%02u %02u:%02u:%02u", @@ -218,10 +219,24 @@ fileset_dlg_add_file(fileset_entry *entry) { gtk_label_set(GTK_LABEL(fs_dir_lb), title); g_free(title); - row++; - gtk_widget_show_all(fs_tb); + /* resize the table until we use 18 rows (fits well into 800*600), if it's bigger use a scrollbar */ + /* XXX - I didn't found a way to automatically shrink the table size again */ + if(row <= 18) { + GtkRequisition requisition; + + gtk_widget_size_request(fs_tb, &requisition); + WIDGET_SET_SIZE(GTK_WINDOW(fs_sw), -1, requisition.height); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER); + } + + if(row == 18) { + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + } + + row++; + g_free(created); g_free(modified); g_free(size); @@ -244,16 +259,16 @@ fileset_init_table(GtkWidget *parent) fs_first_rb = NULL; fs_lb = gtk_label_new("Filename"); - gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 0, 1, row, row+1); + gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 0, 1, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0); fs_lb = gtk_label_new("Created"); - gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 1, 2, row, row+1); + gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 1, 2, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0); fs_lb = gtk_label_new("Last Modified"); - gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 2, 3, row, row+1); + gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 2, 3, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0); fs_lb = gtk_label_new("Size"); - gtk_table_attach_defaults(GTK_TABLE(fs_tb), fs_lb, 3, 4, row, row+1); + gtk_table_attach(GTK_TABLE(fs_tb), fs_lb, 3, 4, row, row+1, GTK_EXPAND|GTK_FILL, 0, 0,0); gtk_widget_hide(fs_tb); @@ -297,12 +312,16 @@ fileset_cb(GtkWidget *w _U_, gpointer d _U_) gtk_container_border_width(GTK_CONTAINER(main_vb), 5); gtk_container_add(GTK_CONTAINER(fs_w), main_vb); + fs_sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fs_sw), GTK_POLICY_NEVER, GTK_POLICY_NEVER); + gtk_box_pack_start(GTK_BOX(main_vb), fs_sw, TRUE, TRUE, 0); + /* add a dummy container, so we can replace the table later */ fs_tb_vb = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(main_vb), fs_tb_vb); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(fs_sw), fs_tb_vb); fs_dir_lb = gtk_label_new(""); - gtk_container_add(GTK_CONTAINER(main_vb), fs_dir_lb); + gtk_box_pack_start(GTK_BOX(main_vb), fs_dir_lb, FALSE, FALSE, 0); fileset_init_table(fs_tb_vb); |