small-gtkfilesel.patch 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
  2. --- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100
  3. +++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100
  4. @@ -68,6 +68,7 @@
  5. #include "gtkprivate.h"
  6. #include "gtkscrolledwindow.h"
  7. #include "gtkstock.h"
  8. +#include "gtksignal.h"
  9. #include "gtktreeselection.h"
  10. #include "gtktreeview.h"
  11. #include "gtkvbox.h"
  12. @@ -77,6 +78,7 @@
  13. #include "gtkmessagedialog.h"
  14. #include "gtkdnd.h"
  15. #include "gtkeventbox.h"
  16. +#include "gtkimage.h"
  17. #undef GTK_DISABLE_DEPRECATED
  18. #include "gtkoptionmenu.h"
  19. @@ -245,7 +247,8 @@
  20. };
  21. enum {
  22. - DIR_COLUMN
  23. + DIR_COLUMN,
  24. + ISFILE_COLUMN
  25. };
  26. enum {
  27. @@ -400,6 +403,12 @@
  28. GtkTreePath *path,
  29. GtkTreeViewColumn *column,
  30. gpointer user_data);
  31. +
  32. +static void gtk_file_selection_activate (GtkTreeView *tree_view,
  33. + GtkTreePath *path,
  34. + GtkTreeViewColumn *column,
  35. + gpointer user_data);
  36. +
  37. static void gtk_file_selection_file_changed (GtkTreeSelection *selection,
  38. gpointer user_data);
  39. static void gtk_file_selection_dir_activate (GtkTreeView *tree_view,
  40. @@ -419,6 +428,7 @@
  41. static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data);
  42. static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
  43. static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
  44. +static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style);
  45. static void free_selected_names (GPtrArray *names);
  46. @@ -578,6 +588,23 @@
  47. G_PARAM_WRITABLE));
  48. object_class->destroy = gtk_file_selection_destroy;
  49. widget_class->map = gtk_file_selection_map;
  50. + widget_class->style_set = gtk_file_selection_style_set;
  51. +
  52. + gtk_widget_class_install_style_property (widget_class,
  53. + g_param_spec_boolean ("show_fileops_default",
  54. + _("Show fileop buttons by default"),
  55. + _("Whether file operation buttons are shown by default"),
  56. + TRUE,
  57. + G_PARAM_READABLE));
  58. +
  59. + gtk_widget_class_install_style_property (widget_class,
  60. + g_param_spec_int ("border_width",
  61. + _("Border width"),
  62. + _("Width of border around the main dialog area"),
  63. + 0,
  64. + G_MAXINT,
  65. + 10,
  66. + G_PARAM_READABLE));
  67. }
  68. static void gtk_file_selection_set_property (GObject *object,
  69. @@ -649,7 +676,29 @@
  70. gtk_widget_grab_default (widget);
  71. return FALSE;
  72. }
  73. -
  74. +
  75. +static void
  76. +gtk_file_selection_style_set (GtkWidget *filesel,
  77. + GtkStyle *prev_style)
  78. +{
  79. + gboolean show_fileops;
  80. + gint border_width;
  81. +
  82. + gtk_widget_style_get (filesel,
  83. + "show_fileops_default",
  84. + &show_fileops,
  85. + "border_width",
  86. + &border_width,
  87. + NULL);
  88. +
  89. + gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
  90. +
  91. + if (show_fileops)
  92. + gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
  93. + else
  94. + gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
  95. +}
  96. +
  97. static void
  98. gtk_file_selection_init (GtkFileSelection *filesel)
  99. {
  100. @@ -674,17 +723,15 @@
  101. /* The dialog-sized vertical box */
  102. filesel->main_vbox = dialog->vbox;
  103. - gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
  104. /* The horizontal box containing create, rename etc. buttons */
  105. filesel->button_area = gtk_hbutton_box_new ();
  106. gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
  107. - gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
  108. gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area,
  109. FALSE, FALSE, 0);
  110. gtk_widget_show (filesel->button_area);
  111. - gtk_file_selection_show_fileop_buttons (filesel);
  112. + gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
  113. /* hbox for pulldown menu */
  114. pulldown_hbox = gtk_hbox_new (TRUE, 5);
  115. @@ -723,25 +770,32 @@
  116. /* The directories list */
  117. - model = gtk_list_store_new (1, G_TYPE_STRING);
  118. + model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
  119. filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
  120. g_object_unref (model);
  121. - column = gtk_tree_view_column_new_with_attributes (_("Folders"),
  122. + column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
  123. gtk_cell_renderer_text_new (),
  124. "text", DIR_COLUMN,
  125. NULL);
  126. label = gtk_label_new_with_mnemonic (_("Fol_ders"));
  127. gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
  128. gtk_widget_show (label);
  129. - gtk_tree_view_column_set_widget (column, label);
  130. +
  131. + /* gtk_tree_view_column_set_widget (column, label); */
  132. + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
  133. +
  134. gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
  135. gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
  136. gtk_widget_set_size_request (filesel->dir_list,
  137. DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
  138. g_signal_connect (filesel->dir_list, "row_activated",
  139. - G_CALLBACK (gtk_file_selection_dir_activate), filesel);
  140. + G_CALLBACK (gtk_file_selection_activate), filesel);
  141. +
  142. + g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
  143. + G_CALLBACK (gtk_file_selection_file_changed), filesel);
  144. +
  145. /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
  146. @@ -758,41 +812,6 @@
  147. gtk_widget_show (filesel->dir_list);
  148. gtk_widget_show (scrolled_win);
  149. - /* The files list */
  150. - model = gtk_list_store_new (1, G_TYPE_STRING);
  151. - filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
  152. - g_object_unref (model);
  153. -
  154. - column = gtk_tree_view_column_new_with_attributes (_("Files"),
  155. - gtk_cell_renderer_text_new (),
  156. - "text", FILE_COLUMN,
  157. - NULL);
  158. - label = gtk_label_new_with_mnemonic (_("_Files"));
  159. - gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
  160. - gtk_widget_show (label);
  161. - gtk_tree_view_column_set_widget (column, label);
  162. - gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
  163. - gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
  164. -
  165. - gtk_widget_set_size_request (filesel->file_list,
  166. - FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
  167. - g_signal_connect (filesel->file_list, "row_activated",
  168. - G_CALLBACK (gtk_file_selection_file_activate), filesel);
  169. - g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
  170. - G_CALLBACK (gtk_file_selection_file_changed), filesel);
  171. -
  172. - /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
  173. -
  174. - scrolled_win = gtk_scrolled_window_new (NULL, NULL);
  175. - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
  176. - gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
  177. - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
  178. - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
  179. - gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
  180. - gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
  181. - gtk_widget_show (filesel->file_list);
  182. - gtk_widget_show (scrolled_win);
  183. -
  184. /* action area for packing buttons into. */
  185. filesel->action_area = gtk_hbox_new (TRUE, 0);
  186. gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area,
  187. @@ -2008,6 +2027,23 @@
  188. }
  189. static void
  190. +gtk_file_selection_activate (GtkTreeView *tree_view,
  191. + GtkTreePath *path,
  192. + GtkTreeViewColumn *column,
  193. + gpointer user_data)
  194. +{
  195. + GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
  196. + GtkTreeIter iter;
  197. + gboolean is_file;
  198. +
  199. + gtk_tree_model_get_iter (model, &iter, path);
  200. + gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
  201. +
  202. + if (! is_file)
  203. + gtk_file_selection_dir_activate (tree_view, path, column, user_data);
  204. +}
  205. +
  206. +static void
  207. gtk_file_selection_file_activate (GtkTreeView *tree_view,
  208. GtkTreePath *path,
  209. GtkTreeViewColumn *column,
  210. @@ -2103,7 +2139,6 @@
  211. PossibleCompletion* poss;
  212. GtkTreeIter iter;
  213. GtkListStore *dir_model;
  214. - GtkListStore *file_model;
  215. gchar* filename;
  216. gchar* rem_path = rel_path;
  217. gchar* sel_text;
  218. @@ -2125,10 +2160,8 @@
  219. g_assert (cmpl_state->reference_dir);
  220. dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
  221. - file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
  222. gtk_list_store_clear (dir_model);
  223. - gtk_list_store_clear (file_model);
  224. /* Set the dir list to include ./ and ../ */
  225. gtk_list_store_append (dir_model, &iter);
  226. @@ -2150,13 +2183,17 @@
  227. strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
  228. {
  229. gtk_list_store_append (dir_model, &iter);
  230. - gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
  231. + gtk_list_store_set (dir_model, &iter,
  232. + DIR_COLUMN, filename,
  233. + ISFILE_COLUMN, FALSE, -1);
  234. }
  235. }
  236. else
  237. {
  238. - gtk_list_store_append (file_model, &iter);
  239. - gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
  240. + gtk_list_store_append (dir_model, &iter);
  241. + gtk_list_store_set (dir_model, &iter,
  242. + DIR_COLUMN, filename,
  243. + ISFILE_COLUMN, TRUE, -1);
  244. }
  245. }