diff options
author | Daniel Silverstone (parasomnia chroot) <dsilvers@digital-scurf.org> | 2013-03-22 08:08:36 +0000 |
---|---|---|
committer | Daniel Silverstone (parasomnia chroot) <dsilvers@digital-scurf.org> | 2013-03-22 08:08:36 +0000 |
commit | b23c580f338ba13983edb5ad49f2a1242e0bc3d5 (patch) | |
tree | 7bfdc4d49a88c8e88faf8aa2c6865bb0fdcc2bd0 | |
parent | c91db66e2dbb0fe183b5f473bfeb454540e64a42 (diff) | |
parent | 48dc679d7bfe9f45bd50d86882d88a9ddb1d659c (diff) | |
download | netsurf-b23c580f338ba13983edb5ad49f2a1242e0bc3d5.tar.gz netsurf-b23c580f338ba13983edb5ad49f2a1242e0bc3d5.tar.bz2 |
Merge remote-tracking branch 'origin/mmu_man/beos-fixes'
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | beos/font.cpp | 5 | ||||
-rw-r--r-- | beos/scaffolding.cpp | 18 |
3 files changed, 16 insertions, 9 deletions
@@ -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); |