summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOle Loots <ole@monochrom.net>2013-09-10 23:52:56 +0200
committerOle Loots <ole@monochrom.net>2013-09-10 23:52:56 +0200
commitbecc7fe064c2b22a32900a02aee1043fc349425d (patch)
tree374e09e1a0de004b6126deceb6de58f256a053a6
parent65a658769ed25e0cb313f2ac5c1bfcac159a1cf4 (diff)
downloadnetsurf-becc7fe064c2b22a32900a02aee1043fc349425d.tar.gz
netsurf-becc7fe064c2b22a32900a02aee1043fc349425d.tar.bz2
Set window ref before calling tree_create. Fixes crash during startup.
(tree_create causes an resize event which requires the window handle to be available).
-rwxr-xr-xatari/treeview.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/atari/treeview.c b/atari/treeview.c
index f25bf7eed..d03ff219a 100755
--- a/atari/treeview.c
+++ b/atari/treeview.c
@@ -259,25 +259,38 @@ NSTREEVIEW atari_treeview_create(uint32_t flags, GUIWIN *win,
gemtk_wm_event_handler_f user_func)
{
struct gemtk_wm_scroll_info_s *slid;
+ NSTREEVIEW new;
if( win == NULL )
return( NULL );
- NSTREEVIEW new = malloc(sizeof(struct atari_treeview));
+
+ new = malloc(sizeof(struct atari_treeview));
if (new == NULL)
return NULL;
- memset( new, 0, sizeof(struct atari_treeview));
- new->tree = tree_create(flags, &atari_tree_callbacks, new);
- if (new->tree == NULL) {
- free(new);
- return NULL;
- }
+
+ memset(new, 0, sizeof(struct atari_treeview));
+
+ /* Store the window ref inside the new treeview: */
new->window = win;
new->user_func = user_func;
+ // Setup gemtk event handler function and set the userdata
+ // to be the new treeview:
gemtk_wm_set_event_handler(win, handle_event);
gemtk_wm_set_user_data(win, (void*)new);
+ // now create a new netsurf tree:
+ new->tree = tree_create(flags, &atari_tree_callbacks, new);
+ if (new->tree == NULL) {
+ free(new);
+ return NULL;
+ }
+
+ // Get acces to the gemtk scroll info struct:
slid = gemtk_wm_get_scroll_info(new->window);
+
+ // Setup line and column height/width of the window,
+ // each scroll takes the configured steps:
slid->y_unit_px = 16;
slid->x_unit_px = 16;
@@ -462,6 +475,7 @@ void atari_treeview_resized(struct tree *tree, int width, int height, void *pw)
NSTREEVIEW tv = (NSTREEVIEW) pw;
if( tv->disposing )
return;
+
tv->extent.x = width;
tv->extent.y = height;
struct gemtk_wm_scroll_info_s *slid = gemtk_wm_get_scroll_info(tv->window);