diff --git a/Makefile b/Makefile index f17f19ac1..ddce6bf39 100644 --- a/Makefile +++ b/Makefile @@ -542,7 +542,7 @@ ifeq ($(TARGET),beos) $(Q)$(BEOS_SETVER) $(EXETARGET) \ -app $(VERSION_MAJ) $(VERSION_MIN) 0 d 0 \ -short "NetSurf $(VERSION_FULL)" \ - -long "NetSurf $(VERSION_FULL) © 2003 - 2012 The NetSurf Developers" + -long "NetSurf $(VERSION_FULL) © 2003 - 2013 The NetSurf Developers" $(VQ)echo " MIMESET: $(EXETARGET)" $(Q)$(BEOS_MIMESET) $(EXETARGET) endif diff --git a/beos/font.cpp b/beos/font.cpp index c2d5e7b9b..b73c9cc1a 100644 --- a/beos/font.cpp +++ b/beos/font.cpp @@ -141,11 +141,12 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle, font.GetEscapements(string, len, escapements); // slow but it should work for (i = 0; string[index] && i < len; i++) { - if (x < current) - break; esc += escapements[i]; current = font.Size() * esc; index += utf8_char_len(&string[index]); + // is current char already too far away? + if (x < current) + break; } *actual_x = (int)current; *char_offset = i; //index; diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp index 7f2b12096..9954dd678 100644 --- a/beos/scaffolding.cpp +++ b/beos/scaffolding.cpp @@ -142,6 +142,7 @@ struct replicant_thread_info { static int open_windows = 0; /**< current number of open browsers */ static NSBaseView *replicant_view = NULL; /**< if not NULL, the replicant View we are running NetSurf for */ static sem_id replicant_done_sem = -1; +static thread_id replicant_thread = -1; static void nsbeos_window_update_back_forward(struct beos_scaffolding *); static void nsbeos_throb(void *); @@ -224,9 +225,14 @@ NSBaseView::NSBaseView(BMessage *archive) NSBaseView::~NSBaseView() { //warn_user ("~NSBaseView()", NULL); - BMessage *message = new BMessage(B_QUIT_REQUESTED); - nsbeos_pipe_message_top(message, NULL, fScaffolding); - while (acquire_sem(replicant_done_sem) == EINTR); + if (replicated) { + BMessage *message = new BMessage(B_QUIT_REQUESTED); + nsbeos_pipe_message_top(message, NULL, fScaffolding); + while (acquire_sem(replicant_done_sem) == EINTR); + //debugger("plop"); + status_t status = -1; + wait_for_thread(replicant_thread, &status); + } } @@ -397,15 +403,15 @@ NSBaseView::Instantiate(BMessage *archive) gui_init_replicant(2, info->args); replicant_done_sem = create_sem(0, "NS Replicant created"); - thread_id nsMainThread = spawn_thread(nsbeos_replicant_main_thread, + replicant_thread = spawn_thread(nsbeos_replicant_main_thread, "NetSurf Main Thread", B_NORMAL_PRIORITY, info); - if (nsMainThread < B_OK) { + if (replicant_thread < B_OK) { delete_sem(replicant_done_sem); delete info; delete view; return NULL; } - resume_thread(nsMainThread); + resume_thread(replicant_thread); //XXX: deadlocks BeHappy //while (acquire_sem(replicant_done_sem) == EINTR);