summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone (parasomnia chroot) <dsilvers@digital-scurf.org>2013-03-22 08:08:36 +0000
committerDaniel Silverstone (parasomnia chroot) <dsilvers@digital-scurf.org>2013-03-22 08:08:36 +0000
commitb23c580f338ba13983edb5ad49f2a1242e0bc3d5 (patch)
tree7bfdc4d49a88c8e88faf8aa2c6865bb0fdcc2bd0
parentc91db66e2dbb0fe183b5f473bfeb454540e64a42 (diff)
parent48dc679d7bfe9f45bd50d86882d88a9ddb1d659c (diff)
downloadnetsurf-b23c580f338ba13983edb5ad49f2a1242e0bc3d5.tar.gz
netsurf-b23c580f338ba13983edb5ad49f2a1242e0bc3d5.tar.bz2
Merge remote-tracking branch 'origin/mmu_man/beos-fixes'
-rw-r--r--Makefile2
-rw-r--r--beos/font.cpp5
-rw-r--r--beos/scaffolding.cpp18
3 files changed, 16 insertions, 9 deletions
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);