| diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c |
| --- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100 |
| +++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100 |
| @@ -68,6 +68,7 @@ |
| #include "gtkprivate.h" |
| #include "gtkscrolledwindow.h" |
| #include "gtkstock.h" |
| +#include "gtksignal.h" |
| #include "gtktreeselection.h" |
| #include "gtktreeview.h" |
| #include "gtkvbox.h" |
| @@ -77,6 +78,7 @@ |
| #include "gtkmessagedialog.h" |
| #include "gtkdnd.h" |
| #include "gtkeventbox.h" |
| +#include "gtkimage.h" |
| |
| #undef GTK_DISABLE_DEPRECATED |
| #include "gtkoptionmenu.h" |
| @@ -245,7 +247,8 @@ |
| }; |
| |
| enum { |
| - DIR_COLUMN |
| + DIR_COLUMN, |
| + ISFILE_COLUMN |
| }; |
| |
| enum { |
| @@ -400,6 +403,12 @@ |
| GtkTreePath *path, |
| GtkTreeViewColumn *column, |
| gpointer user_data); |
| + |
| +static void gtk_file_selection_activate (GtkTreeView *tree_view, |
| + GtkTreePath *path, |
| + GtkTreeViewColumn *column, |
| + gpointer user_data); |
| + |
| static void gtk_file_selection_file_changed (GtkTreeSelection *selection, |
| gpointer user_data); |
| static void gtk_file_selection_dir_activate (GtkTreeView *tree_view, |
| @@ -419,6 +428,7 @@ |
| static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data); |
| static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data); |
| static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data); |
| +static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style); |
| |
| static void free_selected_names (GPtrArray *names); |
| |
| @@ -578,6 +588,23 @@ |
| G_PARAM_WRITABLE)); |
| object_class->destroy = gtk_file_selection_destroy; |
| widget_class->map = gtk_file_selection_map; |
| + widget_class->style_set = gtk_file_selection_style_set; |
| + |
| + gtk_widget_class_install_style_property (widget_class, |
| + g_param_spec_boolean ("show_fileops_default", |
| + _("Show fileop buttons by default"), |
| + _("Whether file operation buttons are shown by default"), |
| + TRUE, |
| + G_PARAM_READABLE)); |
| + |
| + gtk_widget_class_install_style_property (widget_class, |
| + g_param_spec_int ("border_width", |
| + _("Border width"), |
| + _("Width of border around the main dialog area"), |
| + 0, |
| + G_MAXINT, |
| + 10, |
| + G_PARAM_READABLE)); |
| } |
| |
| static void gtk_file_selection_set_property (GObject *object, |
| @@ -649,7 +676,29 @@ |
| gtk_widget_grab_default (widget); |
| return FALSE; |
| } |
| - |
| + |
| +static void |
| +gtk_file_selection_style_set (GtkWidget *filesel, |
| + GtkStyle *prev_style) |
| +{ |
| + gboolean show_fileops; |
| + gint border_width; |
| + |
| + gtk_widget_style_get (filesel, |
| + "show_fileops_default", |
| + &show_fileops, |
| + "border_width", |
| + &border_width, |
| + NULL); |
| + |
| + gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width); |
| + |
| + if (show_fileops) |
| + gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel)); |
| + else |
| + gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel)); |
| +} |
| + |
| static void |
| gtk_file_selection_init (GtkFileSelection *filesel) |
| { |
| @@ -674,17 +723,15 @@ |
| |
| /* The dialog-sized vertical box */ |
| filesel->main_vbox = dialog->vbox; |
| - gtk_container_set_border_width (GTK_CONTAINER (filesel), 10); |
| |
| /* The horizontal box containing create, rename etc. buttons */ |
| filesel->button_area = gtk_hbutton_box_new (); |
| gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START); |
| - gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0); |
| gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area, |
| FALSE, FALSE, 0); |
| gtk_widget_show (filesel->button_area); |
| |
| - gtk_file_selection_show_fileop_buttons (filesel); |
| + gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL); |
| |
| /* hbox for pulldown menu */ |
| pulldown_hbox = gtk_hbox_new (TRUE, 5); |
| @@ -723,25 +770,32 @@ |
| |
| /* The directories list */ |
| |
| - model = gtk_list_store_new (1, G_TYPE_STRING); |
| + model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */ |
| filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model)); |
| g_object_unref (model); |
| |
| - column = gtk_tree_view_column_new_with_attributes (_("Folders"), |
| + column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL, |
| gtk_cell_renderer_text_new (), |
| "text", DIR_COLUMN, |
| NULL); |
| label = gtk_label_new_with_mnemonic (_("Fol_ders")); |
| gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list); |
| gtk_widget_show (label); |
| - gtk_tree_view_column_set_widget (column, label); |
| + |
| + /* gtk_tree_view_column_set_widget (column, label); */ |
| + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE); |
| + |
| gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); |
| gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column); |
| |
| gtk_widget_set_size_request (filesel->dir_list, |
| DIR_LIST_WIDTH, DIR_LIST_HEIGHT); |
| g_signal_connect (filesel->dir_list, "row_activated", |
| - G_CALLBACK (gtk_file_selection_dir_activate), filesel); |
| + G_CALLBACK (gtk_file_selection_activate), filesel); |
| + |
| + g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed", |
| + G_CALLBACK (gtk_file_selection_file_changed), filesel); |
| + |
| |
| /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */ |
| |
| @@ -758,41 +812,6 @@ |
| gtk_widget_show (filesel->dir_list); |
| gtk_widget_show (scrolled_win); |
| |
| - /* The files list */ |
| - model = gtk_list_store_new (1, G_TYPE_STRING); |
| - filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model)); |
| - g_object_unref (model); |
| - |
| - column = gtk_tree_view_column_new_with_attributes (_("Files"), |
| - gtk_cell_renderer_text_new (), |
| - "text", FILE_COLUMN, |
| - NULL); |
| - label = gtk_label_new_with_mnemonic (_("_Files")); |
| - gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list); |
| - gtk_widget_show (label); |
| - gtk_tree_view_column_set_widget (column, label); |
| - gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); |
| - gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column); |
| - |
| - gtk_widget_set_size_request (filesel->file_list, |
| - FILE_LIST_WIDTH, FILE_LIST_HEIGHT); |
| - g_signal_connect (filesel->file_list, "row_activated", |
| - G_CALLBACK (gtk_file_selection_file_activate), filesel); |
| - g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed", |
| - G_CALLBACK (gtk_file_selection_file_changed), filesel); |
| - |
| - /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */ |
| - |
| - scrolled_win = gtk_scrolled_window_new (NULL, NULL); |
| - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN); |
| - gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list); |
| - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), |
| - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |
| - gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0); |
| - gtk_container_add (GTK_CONTAINER (list_container), scrolled_win); |
| - gtk_widget_show (filesel->file_list); |
| - gtk_widget_show (scrolled_win); |
| - |
| /* action area for packing buttons into. */ |
| filesel->action_area = gtk_hbox_new (TRUE, 0); |
| gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area, |
| @@ -2008,6 +2027,23 @@ |
| } |
| |
| static void |
| +gtk_file_selection_activate (GtkTreeView *tree_view, |
| + GtkTreePath *path, |
| + GtkTreeViewColumn *column, |
| + gpointer user_data) |
| +{ |
| + GtkTreeModel *model = gtk_tree_view_get_model (tree_view); |
| + GtkTreeIter iter; |
| + gboolean is_file; |
| + |
| + gtk_tree_model_get_iter (model, &iter, path); |
| + gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1); |
| + |
| + if (! is_file) |
| + gtk_file_selection_dir_activate (tree_view, path, column, user_data); |
| +} |
| + |
| +static void |
| gtk_file_selection_file_activate (GtkTreeView *tree_view, |
| GtkTreePath *path, |
| GtkTreeViewColumn *column, |
| @@ -2103,7 +2139,6 @@ |
| PossibleCompletion* poss; |
| GtkTreeIter iter; |
| GtkListStore *dir_model; |
| - GtkListStore *file_model; |
| gchar* filename; |
| gchar* rem_path = rel_path; |
| gchar* sel_text; |
| @@ -2125,10 +2160,8 @@ |
| g_assert (cmpl_state->reference_dir); |
| |
| dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list))); |
| - file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list))); |
| |
| gtk_list_store_clear (dir_model); |
| - gtk_list_store_clear (file_model); |
| |
| /* Set the dir list to include ./ and ../ */ |
| gtk_list_store_append (dir_model, &iter); |
| @@ -2150,13 +2183,17 @@ |
| strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0) |
| { |
| gtk_list_store_append (dir_model, &iter); |
| - gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1); |
| + gtk_list_store_set (dir_model, &iter, |
| + DIR_COLUMN, filename, |
| + ISFILE_COLUMN, FALSE, -1); |
| } |
| } |
| else |
| { |
| - gtk_list_store_append (file_model, &iter); |
| - gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1); |
| + gtk_list_store_append (dir_model, &iter); |
| + gtk_list_store_set (dir_model, &iter, |
| + DIR_COLUMN, filename, |
| + ISFILE_COLUMN, TRUE, -1); |
| } |
| } |
| |