mirror of
https://github.com/MidnightCommander/mc
synced 2025-03-06 08:01:40 +03:00
1999-09-13 Federico Mena Quintero <federico@redhat.com>
* gtkdtree.c (scan_subtree): Do not set the current path here, just load the subtree. (gtk_dtree_get_row_path): Removed the column argument, since it was never used. (scan_subtree): Added a path argument that can be calculated upstream. (gtk_dtree_expand): Compute the path for scan_subtree(). (gtk_dtree_select_row): Compute the path for scan_subtree(), and set the tree's current path here. This is the right thing; setting the current path is completely orthogonal from scanning a subtree.
This commit is contained in:
parent
264287e3a1
commit
dfc790ac4e
@ -1,5 +1,17 @@
|
||||
1999-09-13 Federico Mena Quintero <federico@redhat.com>
|
||||
|
||||
* gtkdtree.c (scan_subtree): Do not set the current path here,
|
||||
just load the subtree.
|
||||
(gtk_dtree_get_row_path): Removed the column argument, since it
|
||||
was never used.
|
||||
(scan_subtree): Added a path argument that can be calculated
|
||||
upstream.
|
||||
(gtk_dtree_expand): Compute the path for scan_subtree().
|
||||
(gtk_dtree_select_row): Compute the path for scan_subtree(), and
|
||||
set the tree's current path here. This is the right thing;
|
||||
setting the current path is completely orthogonal from scanning a
|
||||
subtree.
|
||||
|
||||
* gtkdtree.c (gtk_dtree_class_init): Sigh. Create a new signal,
|
||||
called "possibly_ungrab", used to request the client to ungrab the
|
||||
mouse at the proper time. This is required because the stupid
|
||||
|
@ -893,7 +893,7 @@ panel_tree_drag_data_received (GtkWidget *widget,
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
path = gtk_dtree_get_row_path (dtree, node, 0);
|
||||
path = gtk_dtree_get_row_path (dtree, node);
|
||||
fe = file_entry_from_file (path);
|
||||
if (!fe) {
|
||||
g_free (path);
|
||||
@ -2044,7 +2044,7 @@ panel_tree_drag_motion (GtkWidget *widget, GdkDragContext *context, int x, int y
|
||||
|
||||
if (on_row) {
|
||||
node = gtk_ctree_node_nth (GTK_CTREE (dtree), row);
|
||||
row_path = gtk_dtree_get_row_path (dtree, node, 0);
|
||||
row_path = gtk_dtree_get_row_path (dtree, node);
|
||||
|
||||
if (row != panel->drag_tree_row) {
|
||||
/* Highlight the row by selecting it */
|
||||
|
@ -20,6 +20,8 @@
|
||||
#include "gtkdtree.h"
|
||||
#include "../vfs/vfs.h"
|
||||
|
||||
#define FREEZE
|
||||
|
||||
#ifdef HACK
|
||||
# define mc_opendir opendir
|
||||
# define mc_closedir closedir
|
||||
@ -42,7 +44,7 @@ enum {
|
||||
static guint gtk_dtree_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
char *
|
||||
gtk_dtree_get_row_path (GtkDTree *dtree, GtkCTreeNode *row, gint column)
|
||||
gtk_dtree_get_row_path (GtkDTree *dtree, GtkCTreeNode *row)
|
||||
{
|
||||
char *node_text, *path;
|
||||
|
||||
@ -56,7 +58,7 @@ gtk_dtree_get_row_path (GtkDTree *dtree, GtkCTreeNode *row, gint column)
|
||||
int val;
|
||||
|
||||
val = gtk_ctree_node_get_pixtext (
|
||||
GTK_CTREE (dtree), row, column,
|
||||
GTK_CTREE (dtree), row, 0,
|
||||
&node_text, NULL, NULL, NULL);
|
||||
|
||||
if (!val)
|
||||
@ -191,7 +193,9 @@ static void
|
||||
scan_begin (GtkDTree *dtree)
|
||||
{
|
||||
if (++dtree->scan_level == 1) {
|
||||
#ifdef FREEZE
|
||||
gtk_clist_freeze (GTK_CLIST (dtree));
|
||||
#endif
|
||||
gtk_signal_emit (GTK_OBJECT (dtree), gtk_dtree_signals[SCAN_BEGIN]);
|
||||
}
|
||||
}
|
||||
@ -203,36 +207,30 @@ scan_end (GtkDTree *dtree)
|
||||
|
||||
if (--dtree->scan_level == 0) {
|
||||
gtk_signal_emit (GTK_OBJECT (dtree), gtk_dtree_signals[SCAN_END]);
|
||||
#ifdef FREEZE
|
||||
gtk_clist_thaw (GTK_CLIST (dtree));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* Scans a subdirectory in the tree */
|
||||
static void
|
||||
scan_subtree (GtkDTree *dtree, GtkCTreeNode *row)
|
||||
scan_subtree (GtkDTree *dtree, GtkCTreeNode *row, char *path)
|
||||
{
|
||||
char *path;
|
||||
|
||||
dtree->loading_dir++;
|
||||
|
||||
scan_begin (dtree);
|
||||
path = gtk_dtree_get_row_path (dtree, row, 0);
|
||||
|
||||
if (dtree->current_path)
|
||||
g_free (dtree->current_path);
|
||||
|
||||
dtree->current_path = path;
|
||||
|
||||
gtk_dtree_load_path (dtree, path, row, 1);
|
||||
|
||||
dtree->loading_dir--;
|
||||
scan_end (dtree);
|
||||
dtree->loading_dir--;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dtree_select_row (GtkCTree *ctree, GtkCTreeNode *row, gint column)
|
||||
{
|
||||
GtkDTree *dtree;
|
||||
char *path;
|
||||
|
||||
dtree = GTK_DTREE (ctree);
|
||||
|
||||
@ -241,7 +239,8 @@ gtk_dtree_select_row (GtkCTree *ctree, GtkCTreeNode *row, gint column)
|
||||
|
||||
/* Ask for someone to ungrab the mouse, as the stupid clist grabs it on
|
||||
* button press. We cannot do it unconditionally because we don't want
|
||||
* to knock off a DnD grab.
|
||||
* to knock off a DnD grab. We cannot do it in a button_press handler,
|
||||
* either, because the row is selected *inside* the default handler.
|
||||
*/
|
||||
gtk_signal_emit (GTK_OBJECT (dtree), gtk_dtree_signals[POSSIBLY_UNGRAB], NULL);
|
||||
|
||||
@ -256,11 +255,19 @@ gtk_dtree_select_row (GtkCTree *ctree, GtkCTreeNode *row, gint column)
|
||||
|
||||
dtree->last_node = row;
|
||||
|
||||
scan_subtree (dtree, row);
|
||||
/* Set the new current path */
|
||||
|
||||
path = gtk_dtree_get_row_path (dtree, row);
|
||||
|
||||
if (dtree->current_path)
|
||||
g_free (dtree->current_path);
|
||||
|
||||
dtree->current_path = path;
|
||||
|
||||
scan_subtree (dtree, row, path);
|
||||
|
||||
if (!dtree->internal)
|
||||
gtk_signal_emit (GTK_OBJECT (dtree), gtk_dtree_signals[DIRECTORY_CHANGED],
|
||||
dtree->current_path);
|
||||
gtk_signal_emit (GTK_OBJECT (dtree), gtk_dtree_signals[DIRECTORY_CHANGED], path);
|
||||
|
||||
scan_end (dtree);
|
||||
}
|
||||
@ -306,7 +313,7 @@ gtk_dtree_do_select_dir (GtkDTree *dtree, char *path)
|
||||
if (dtree->current_path && (strcmp (path, dtree->current_path) == 0))
|
||||
return TRUE;
|
||||
|
||||
s = alloca (strlen (path)+1);
|
||||
s = alloca (strlen (path) + 1);
|
||||
strcpy (s, path);
|
||||
current_node = dtree->root_node;
|
||||
|
||||
@ -429,12 +436,18 @@ static void
|
||||
gtk_dtree_expand (GtkCTree *ctree, GtkCTreeNode *node)
|
||||
{
|
||||
GtkDTree *dtree;
|
||||
char *path;
|
||||
|
||||
dtree = GTK_DTREE (ctree);
|
||||
|
||||
scan_begin (dtree);
|
||||
|
||||
(* parent_class->tree_expand) (ctree, node);
|
||||
scan_subtree (dtree, node);
|
||||
|
||||
path = gtk_dtree_get_row_path (dtree, node);
|
||||
scan_subtree (dtree, node, path);
|
||||
g_free (path);
|
||||
|
||||
scan_end (dtree);
|
||||
}
|
||||
|
||||
@ -548,10 +561,12 @@ tree_set_freeze (int state, void *data)
|
||||
{
|
||||
GtkDTree *dtree = GTK_DTREE (data);
|
||||
|
||||
#ifdef FREEZE
|
||||
if (state)
|
||||
gtk_clist_freeze (GTK_CLIST (dtree));
|
||||
else
|
||||
gtk_clist_thaw (GTK_CLIST (dtree));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
@ -660,7 +675,6 @@ gtk_dtree_load_root_tree (GtkDTree *dtree)
|
||||
|
||||
/* Select root node */
|
||||
gtk_ctree_select (GTK_CTREE (dtree), dtree->root_node);
|
||||
|
||||
gtk_clist_thaw (GTK_CLIST (dtree));
|
||||
}
|
||||
|
||||
|
@ -51,9 +51,7 @@ guint gtk_dtree_get_type (void);
|
||||
GtkWidget *gtk_dtree_new (void);
|
||||
gboolean gtk_dtree_select_dir (GtkDTree *dtree,
|
||||
char *directory);
|
||||
char *gtk_dtree_get_row_path (GtkDTree *ctree,
|
||||
GtkCTreeNode *row,
|
||||
gint column);
|
||||
char *gtk_dtree_get_row_path (GtkDTree *ctree, GtkCTreeNode *row);
|
||||
void gtk_dtree_construct (GtkDTree *dtree);
|
||||
|
||||
gboolean gtk_dtree_is_ancestor (GtkDTree *dtree, GtkCTreeNode *node, GtkCTreeNode *child);
|
||||
|
Loading…
x
Reference in New Issue
Block a user