* gfind.c (GFindDlg): Add last_dir_row field for the last
directory row. (add_to_list): Last argument is now boolean, FALSE for files, TRUE for directories. Change all callers. Use item data for the row of the last directory. (select_row): Enable `view' and `edit' buttons for files only, `change' button for all entries. (setup_gui): Set selection mode to GTK_SELECTION_BROWSE. Make `change' button inactive. Don't hide `view' and `edit' buttons. (get_list_info): Look up directory using list item data.
Этот коммит содержится в:
родитель
9456612686
Коммит
b734c85b0a
@ -1,5 +1,16 @@
|
|||||||
2001-07-26 Pavel Roskin <proski@gnu.org>
|
2001-07-26 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
|
* gfind.c (GFindDlg): Add last_dir_row field for the last
|
||||||
|
directory row.
|
||||||
|
(add_to_list): Last argument is now boolean, FALSE for files,
|
||||||
|
TRUE for directories. Change all callers. Use item data for
|
||||||
|
the row of the last directory.
|
||||||
|
(select_row): Enable `view' and `edit' buttons for files only,
|
||||||
|
`change' button for all entries.
|
||||||
|
(setup_gui): Set selection mode to GTK_SELECTION_BROWSE. Make
|
||||||
|
`change' button inactive. Don't hide `view' and `edit' buttons.
|
||||||
|
(get_list_info): Look up directory using list item data.
|
||||||
|
|
||||||
* gfind.c (find_parameters): Fix behavior of the Enter key.
|
* gfind.c (find_parameters): Fix behavior of the Enter key.
|
||||||
Select initial values in the text entries.
|
Select initial values in the text entries.
|
||||||
|
|
||||||
|
@ -74,10 +74,11 @@ typedef struct {
|
|||||||
char *content_pattern; /* pattern to search inside files */
|
char *content_pattern; /* pattern to search inside files */
|
||||||
int is_start; /* Status of the start/stop toggle button */
|
int is_start; /* Status of the start/stop toggle button */
|
||||||
char *old_dir;
|
char *old_dir;
|
||||||
|
int last_dir_row;
|
||||||
dir_stack *dir_stack_base;
|
dir_stack *dir_stack_base;
|
||||||
} GFindDlg;
|
} GFindDlg;
|
||||||
|
|
||||||
static char *add_to_list(GFindDlg *head, char *text, void *closure);
|
static char *add_to_list(GFindDlg *head, char *text, gboolean is_dir);
|
||||||
static void stop_idle(GFindDlg *head);
|
static void stop_idle(GFindDlg *head);
|
||||||
static void status_update(GFindDlg *head, char *text);
|
static void status_update(GFindDlg *head, char *text);
|
||||||
static void get_list_info(GFindDlg *head, char **file, char **dir);
|
static void get_list_info(GFindDlg *head, char **file, char **dir);
|
||||||
@ -270,15 +271,15 @@ static void find_add_match(GFindDlg *head, char *dir, char *file)
|
|||||||
if (strcmp(head->old_dir, dir)) {
|
if (strcmp(head->old_dir, dir)) {
|
||||||
g_free(head->old_dir);
|
g_free(head->old_dir);
|
||||||
head->old_dir = g_strdup(dir);
|
head->old_dir = g_strdup(dir);
|
||||||
dirname = add_to_list(head, dir, NULL);
|
dirname = add_to_list(head, dir, TRUE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
head->old_dir = g_strdup(dir);
|
head->old_dir = g_strdup(dir);
|
||||||
dirname = add_to_list(head, dir, NULL);
|
dirname = add_to_list(head, dir, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp_name = g_strconcat(" ", file, NULL);
|
tmp_name = g_strconcat(" ", file, NULL);
|
||||||
add_to_list(head, tmp_name, dirname);
|
add_to_list(head, tmp_name, FALSE);
|
||||||
g_free(tmp_name);
|
g_free(tmp_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,8 +515,12 @@ find_do_view_edit(GFindDlg *head, int unparsed_view, int edit, char *dir, char *
|
|||||||
static void
|
static void
|
||||||
select_row(GtkCList *clist, gint row, gint column, GdkEvent *event, GFindDlg *head)
|
select_row(GtkCList *clist, gint row, gint column, GdkEvent *event, GFindDlg *head)
|
||||||
{
|
{
|
||||||
gtk_widget_set_sensitive(head->g_edit, TRUE);
|
gboolean is_file;
|
||||||
gtk_widget_set_sensitive(head->g_view, TRUE);
|
is_file = ((int) gtk_clist_get_row_data(clist, row) != -1);
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(head->g_edit, is_file);
|
||||||
|
gtk_widget_set_sensitive(head->g_view, is_file);
|
||||||
|
gtk_widget_set_sensitive(head->g_change, TRUE);
|
||||||
head->current_row = row;
|
head->current_row = row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,7 +619,7 @@ static void setup_gui(GFindDlg *head)
|
|||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER,
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER,
|
||||||
GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC);
|
||||||
head->g_clist = gtk_clist_new(1);
|
head->g_clist = gtk_clist_new(1);
|
||||||
gtk_clist_set_selection_mode(GTK_CLIST(head->g_clist), GTK_SELECTION_SINGLE);
|
gtk_clist_set_selection_mode(GTK_CLIST(head->g_clist), GTK_SELECTION_BROWSE);
|
||||||
gtk_widget_set_usize(head->g_clist, -1, 200);
|
gtk_widget_set_usize(head->g_clist, -1, 200);
|
||||||
gtk_container_add(GTK_CONTAINER(sw), head->g_clist);
|
gtk_container_add(GTK_CONTAINER(sw), head->g_clist);
|
||||||
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(head->g_find_dlg)->vbox),
|
gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(head->g_find_dlg)->vbox),
|
||||||
@ -650,6 +655,7 @@ static void setup_gui(GFindDlg *head)
|
|||||||
|
|
||||||
gtk_widget_set_sensitive(head->g_view, FALSE);
|
gtk_widget_set_sensitive(head->g_view, FALSE);
|
||||||
gtk_widget_set_sensitive(head->g_edit, FALSE);
|
gtk_widget_set_sensitive(head->g_edit, FALSE);
|
||||||
|
gtk_widget_set_sensitive(head->g_change, FALSE);
|
||||||
box2 = gtk_hbox_new(1, GNOME_PAD + GNOME_PAD);
|
box2 = gtk_hbox_new(1, GNOME_PAD + GNOME_PAD);
|
||||||
gtk_box_pack_start(GTK_BOX(box2), head->g_view, 0, 0, 0);
|
gtk_box_pack_start(GTK_BOX(box2), head->g_view, 0, 0, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(box2), head->g_edit, 0, 0, 0);
|
gtk_box_pack_start(GTK_BOX(box2), head->g_edit, 0, 0, 0);
|
||||||
@ -667,8 +673,6 @@ static void setup_gui(GFindDlg *head)
|
|||||||
box3, TRUE, TRUE, GNOME_PAD_SMALL);
|
box3, TRUE, TRUE, GNOME_PAD_SMALL);
|
||||||
|
|
||||||
gtk_widget_show_all(head->g_find_dlg);
|
gtk_widget_show_all(head->g_find_dlg);
|
||||||
gtk_widget_hide(GTK_WIDGET(head->g_view));
|
|
||||||
gtk_widget_hide(GTK_WIDGET(head->g_edit));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_process(GFindDlg *head)
|
static int run_process(GFindDlg *head)
|
||||||
@ -711,32 +715,53 @@ static void status_update(GFindDlg *head, char *text)
|
|||||||
x_flush_events();
|
x_flush_events();
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *add_to_list(GFindDlg *head, char *text, void *data)
|
static char *add_to_list(GFindDlg *head, char *text, gboolean is_dir)
|
||||||
{
|
{
|
||||||
int row;
|
int row;
|
||||||
char *texts[1];
|
char *texts[1];
|
||||||
|
int data;
|
||||||
|
|
||||||
texts[0] = text;
|
texts[0] = text;
|
||||||
|
|
||||||
row = gtk_clist_append(GTK_CLIST(head->g_clist), texts);
|
row = gtk_clist_append(GTK_CLIST(head->g_clist), texts);
|
||||||
gtk_clist_set_row_data(GTK_CLIST(head->g_clist), row, data);
|
|
||||||
#if 1
|
/* Record parent row (or -1 for directories) in the item data. */
|
||||||
|
if (is_dir) {
|
||||||
|
data = -1;
|
||||||
|
head->last_dir_row = row;
|
||||||
|
} else {
|
||||||
|
data = head->last_dir_row;
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_clist_set_row_data(GTK_CLIST(head->g_clist), row, (void *) data);
|
||||||
|
|
||||||
if (gtk_clist_row_is_visible(GTK_CLIST(head->g_clist), row)
|
if (gtk_clist_row_is_visible(GTK_CLIST(head->g_clist), row)
|
||||||
!= GTK_VISIBILITY_FULL) {
|
!= GTK_VISIBILITY_FULL) {
|
||||||
gtk_clist_moveto(GTK_CLIST(head->g_clist), row, 0, 0.5, 0.0);
|
gtk_clist_moveto(GTK_CLIST(head->g_clist), row, 0, 0.5, 0.0);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_list_info(GFindDlg *head, char **file, char **dir)
|
static void get_list_info(GFindDlg *head, char **file, char **dir)
|
||||||
{
|
{
|
||||||
|
int p_row;
|
||||||
|
|
||||||
if (head->current_row == -1)
|
if (head->current_row == -1)
|
||||||
*file = *dir = NULL;
|
*file = *dir = NULL;
|
||||||
|
|
||||||
|
p_row = (int) gtk_clist_get_row_data(GTK_CLIST(head->g_clist),
|
||||||
|
head->current_row);
|
||||||
gtk_clist_get_text(GTK_CLIST(head->g_clist),
|
gtk_clist_get_text(GTK_CLIST(head->g_clist),
|
||||||
head->current_row, 0, file);
|
head->current_row, 0, file);
|
||||||
*dir = gtk_clist_get_row_data(GTK_CLIST(head->g_clist),
|
|
||||||
head->current_row);
|
if (p_row == -1) {
|
||||||
|
/* No parent row - it's a directory */
|
||||||
|
*dir = *file;
|
||||||
|
*file = NULL;
|
||||||
|
} else {
|
||||||
|
gtk_clist_get_text(GTK_CLIST(head->g_clist), p_row, 0, dir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_file(char *start_dir, char *pattern, char *content, char **dirname,
|
static int find_file(char *start_dir, char *pattern, char *content, char **dirname,
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user