Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Cameron Cawley
Browse
Commits
dcae02d7
Commit
dcae02d7
authored
27 years ago
by
David Brown
Browse files
Options
Download
Email Patches
Plain Diff
Much faster 3000%+ in some cases loading of hotlist files.
Also much faster drag box selections.
parent
9dba8115
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
38 deletions
+95
-38
c/Hotlist
c/Hotlist
+95
-38
No files found.
c/Hotlist
View file @
dcae02d7
...
...
@@ -200,7 +200,8 @@ static void hotlist_get_selected_shape_r (hotlist_item * list,
unsigned
int
*
itemno
,
int
*
found
,
unsigned
int
item_height
);
void
hotlist_select_box
(
unsigned
int
first_item
,
unsigned
int
last_item
,
int
minx
,
int
maxx
);
void
hotlist_select_box_r
(
unsigned
int
first_item
,
unsigned
int
last_item
,
hotlist_item
*
item
,
unsigned
int
*
itemno
,
int
minx
,
int
maxx
);
/* Save Protocol */
...
...
@@ -2946,9 +2947,11 @@ static _kernel_oserror * hotlist_load_directory(FILE * fileptr, hotlist_item * t
unsigned
int
unfollowed_uls
=
0
;
long
int
file_position
;
int
character
,
count
;
int
target_type
;
/* Go through the file in chunks */
target_type
=
0
;
/* At end of directory */
while
(
!
feof
(
fileptr
))
/* In theory the code below means you'll never get this; but just to be safe... */
{
file_position
=
ftell
(
fileptr
);
...
...
@@ -3096,8 +3099,17 @@ static _kernel_oserror * hotlist_load_directory(FILE * fileptr, hotlist_item * t
/* Add this item */
e
=
hotlist_new_url
(
target
,
HOTLIST_POSITION_END
,
str_ptr
,
url
);
if
(
target_type
==
0
)
{
e
=
hotlist_new_url
(
target
,
HOTLIST_POSITION_END
,
str_ptr
,
url
);
target_type
=
1
;
}
else
{
e
=
hotlist_new_url
(
target
,
HOTLIST_POSITION_AFTER
,
str_ptr
,
url
);
}
if
(
e
)
goto
hotlist_load_directory_exit
;
/* (See near end of function) */
target
=
hotlist_newitem
;
}
/* Treat any '<ul>' tags as the start of a new directory. The name comes */
...
...
@@ -3116,9 +3128,19 @@ static _kernel_oserror * hotlist_load_directory(FILE * fileptr, hotlist_item * t
{
/* Otherwise, add the directory */
e
=
hotlist_new_directory
(
target
,
next_directory_name
,
HOTLIST_POSITION_END
,
&
new_dir
);
if
(
target_type
==
0
)
{
e
=
hotlist_new_directory
(
target
,
next_directory_name
,
HOTLIST_POSITION_END
,
&
new_dir
);
target_type
=
1
;
}
else
{
e
=
hotlist_new_directory
(
target
,
next_directory_name
,
HOTLIST_POSITION_AFTER
,
&
new_dir
);
}
if
(
e
)
goto
hotlist_load_directory_exit
;
target
=
hotlist_newitem
;
if
(
strstr
(
string_buffer
,
"<!--open-->"
)
!=
NULL
)
{
new_dir
->
flags
|=
HOTLIST_D_IS_OPEN
;
...
...
@@ -5083,12 +5105,9 @@ static int hotlist_null_drag_select_handler(int event_code, WimpPollBlock * even
WimpGetPointerInfoBlock
pointerblock
;
unsigned
int
item_height
,
item_dir_width
,
item_url_width
;
int
workx
,
worky
;
hotlist_item
*
item
;
WimpGetWindowStateBlock
state
;
unsigned
int
item_min
,
item_max
,
itemno
;
int
itemxmin
,
itemxmax
;
unsigned
int
item_min
,
item_max
;
int
minx
,
maxx
;
int
last_item
;
wimp_get_pointer_info
(
&
pointerblock
);
/* Read pointer position */
...
...
@@ -5116,39 +5135,59 @@ static int hotlist_null_drag_select_handler(int event_code, WimpPollBlock * even
maxx
=
selection_x
;
}
last_item
=
hotlist_count_displayed_items
(
hotlist_root
->
data
.
directory_content
);
hotlist_select_box
(
item_min
,
item_max
,
minx
,
maxx
);
for
(
itemno
=
0
;
itemno
<=
last_item
;
itemno
++
)
return
0
;
}
/*************************************************/
/* hotlist_select_box() */
/* */
/* Sets the HOTLIST_G_DRAG_SELECTED flag for all */
/* visible items in the range first_item to */
/* last_item where their horizontal visible area */
/* intersects with the a line draw from minx to */
/* maxx. Clears the HOTLIST_G_DRAG_SELECTED */
/* flag for all other items */
/* */
/* Parameters: first visible item */
/* handler. last visible item */
/* minx workspace relative */
/* maxx workspace relative */
/*************************************************/
void
hotlist_select_box
(
unsigned
int
first_item
,
unsigned
int
last_item
,
int
minx
,
int
maxx
)
{
unsigned
int
itemno
;
hotlist_select_box_r
(
first_item
,
last_item
,
hotlist_root
->
data
.
directory_content
,
&
itemno
,
minx
,
maxx
);
}
/*************************************************/
/* hotlist_select_box_r() */
/* */
/* Recursive backend to hotlist_select_box */
/*************************************************/
void
hotlist_select_box_r
(
unsigned
int
first_item
,
unsigned
int
last_item
,
hotlist_item
*
item
,
unsigned
int
*
itemno
,
int
minx
,
int
maxx
)
{
int
itemxmin
,
itemxmax
;
while
(
item
)
{
item
=
hotlist_find_item
(
hotlist_root
->
data
.
directory_content
,
itemno
);
if
(
item
)
/* Do stuff */
if
(
*
itemno
>=
first_item
&&
*
itemno
<=
last_item
)
{
if
(
itemno
>=
item_min
&&
itemno
<=
item_max
)
hotlist_get_shape
(
&
itemxmin
,
&
itemxmax
,
item
);
if
((
!
(
maxx
<
itemxmin
||
minx
>
itemxmax
)))
{
hotlist_get_shape
(
&
itemxmin
,
&
itemxmax
,
item
);
if
((
!
(
maxx
<
itemxmin
||
minx
>
itemxmax
)))
if
(
!
(
item
->
flags
&
HOTLIST_G_DRAG_SELECTED
))
{
if
(
!
(
item
->
flags
&
HOTLIST_G_DRAG_SELECTED
))
item
->
flags
|=
HOTLIST_G_DRAG_SELECTED
;
hotlist_redraw_items
(
*
itemno
,
*
itemno
);
if
(
item
->
type
==
hl_directory
&&
!
(
item
->
flags
&
HOTLIST_D_IS_OPEN
))
/* If directory is closed select everything in it */
{
item
->
flags
|=
HOTLIST_G_DRAG_SELECTED
;
hotlist_redraw_items
(
itemno
,
itemno
);
if
(
item
->
type
==
hl_directory
&&
!
(
item
->
flags
&
HOTLIST_D_IS_OPEN
))
/* If directory is closed select everything in it */
{
hotlist_set_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_DRAG_SELECTED
);
hotlist_clear_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_REDRAW_NOW
);
}
}
}
else
{
if
(
item
->
flags
&
HOTLIST_G_DRAG_SELECTED
)
{
item
->
flags
&=
~
HOTLIST_G_DRAG_SELECTED
;
hotlist_redraw_items
(
itemno
,
itemno
);
if
(
item
->
type
==
hl_directory
&&
!
(
item
->
flags
&
HOTLIST_D_IS_OPEN
))
/* If directory is closed unselect everything in it */
{
hotlist_clear_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_DRAG_SELECTED
|
HOTLIST_G_REDRAW_NOW
);
}
hotlist_set_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_DRAG_SELECTED
);
hotlist_clear_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_REDRAW_NOW
);
}
}
}
...
...
@@ -5157,7 +5196,7 @@ static int hotlist_null_drag_select_handler(int event_code, WimpPollBlock * even
if
(
item
->
flags
&
HOTLIST_G_DRAG_SELECTED
)
{
item
->
flags
&=
~
HOTLIST_G_DRAG_SELECTED
;
hotlist_redraw_items
(
itemno
,
itemno
);
hotlist_redraw_items
(
*
itemno
,
*
itemno
);
if
(
item
->
type
==
hl_directory
&&
!
(
item
->
flags
&
HOTLIST_D_IS_OPEN
))
/* If directory is closed unselect everything in it */
{
hotlist_clear_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_DRAG_SELECTED
|
HOTLIST_G_REDRAW_NOW
);
...
...
@@ -5165,9 +5204,27 @@ static int hotlist_null_drag_select_handler(int event_code, WimpPollBlock * even
}
}
}
}
else
{
if
(
item
->
flags
&
HOTLIST_G_DRAG_SELECTED
)
{
item
->
flags
&=
~
HOTLIST_G_DRAG_SELECTED
;
hotlist_redraw_items
(
*
itemno
,
*
itemno
);
if
(
item
->
type
==
hl_directory
&&
!
(
item
->
flags
&
HOTLIST_D_IS_OPEN
))
/* If directory is closed unselect everything in it */
{
hotlist_clear_flags
(
item
->
data
.
directory_content
,
hl_ALL
,
HOTLIST_G_DRAG_SELECTED
|
HOTLIST_G_REDRAW_NOW
);
}
}
}
return
0
;
*
itemno
+=
1
;
if
(
item
->
type
==
hl_directory
&&
item
->
flags
&
HOTLIST_D_IS_OPEN
)
{
hotlist_select_box_r
(
first_item
,
last_item
,
item
->
data
.
directory_content
,
itemno
,
minx
,
maxx
);
}
item
=
item
->
next
;
}
}
/*************************************************/
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment