r11184 jmb - /toolchains/sdk/Makefile
by netsurf@semichrome.net
Author: jmb
Date: Sun Jan 2 16:03:03 2011
New Revision: 11184
URL: http://source.netsurf-browser.org?rev=11184&view=rev
Log:
Remove OSLib from the SDK
Modified:
toolchains/sdk/Makefile
Modified: toolchains/sdk/Makefile
URL: http://source.netsurf-browser.org/toolchains/sdk/Makefile?rev=11184&r1=11...
==============================================================================
--- toolchains/sdk/Makefile (original)
+++ toolchains/sdk/Makefile Sun Jan 2 16:03:03 2011
@@ -23,7 +23,6 @@
VERSION_LIBMNG := 1.0.10
VERSION_LIBCARES := 1.7.4
VERSION_LIBCURL := 7.21.3
-VERSION_RISCOS_OSLIB := 402
# Path
path__ := $(GCCSDK_INSTALL_CROSSBIN):$(PATH)
@@ -62,7 +61,7 @@
endif
ifeq ($(TARGET),arm-unknown-riscos)
- SDK_ITEMS := $(BUILDSTEPS)/riscos-oslib.d $(COMMON_SDK_ITEMS)
+ SDK_ITEMS := $(COMMON_SDK_ITEMS)
endif
ifeq ($(SDK_ITEMS),)
@@ -252,16 +251,3 @@
$(SOURCEDIR)/curl-$(VERSION_LIBCURL).tar.bz2:
wget -q -O $@ http://curl.haxx.se/download/$(subst $(SOURCEDIR)/,,$@)
-# RISC OS OSLib
-$(BUILDSTEPS)/riscos-oslib.d: $(BUILDSTEPS)/builddir.d $(BUILDSTEPS)/riscos-oslib-src.d
- mkdir -p $(BUILDDIR)/riscos-oslib
- cp -r $(SOURCEDIR)/riscos-oslib-$(VERSION_RISCOS_OSLIB) $(BUILDDIR)/riscos-oslib/
- cd $(BUILDDIR)/riscos-oslib/riscos-oslib-$(VERSION_RISCOS_OSLIB) && GCCSDK_INSTALL_ENV=$(GCCSDK_INSTALL_ENV) GCCSDK_INSTALL_CROSSBIN=$(GCCSDK_INSTALL_CROSSBIN) make install
- touch $@
-
-$(BUILDSTEPS)/riscos-oslib-src.d: $(BUILDSTEPS)/sourcedir.d $(SOURCEDIR)/riscos-oslib-$(VERSION_RISCOS_OSLIB)
- touch $@
-
-$(SOURCEDIR)/riscos-oslib-$(VERSION_RISCOS_OSLIB):
- svn co https://ro-oslib.svn.sourceforge.net/svnroot/ro-oslib/trunk/!OSLib@$(VERS... $@
-
12 years, 4 months
r11183 jmb - in /toolchains/arm-unknown-riscos: ./ Makefile
by netsurf@semichrome.net
Author: jmb
Date: Sun Jan 2 16:02:39 2011
New Revision: 11183
URL: http://source.netsurf-browser.org?rev=11183&view=rev
Log:
Move OSLib build to the arm-unknown-riscos toolchain
Add CCRes to the toolchain
Modified:
toolchains/arm-unknown-riscos/ (props changed)
toolchains/arm-unknown-riscos/Makefile
Propchange: toolchains/arm-unknown-riscos/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Jan 2 16:02:39 2011
@@ -1,0 +1,4 @@
+build-steps
+gcc4
+oslib
+ccres
Modified: toolchains/arm-unknown-riscos/Makefile
URL: http://source.netsurf-browser.org/toolchains/arm-unknown-riscos/Makefile?...
==============================================================================
--- toolchains/arm-unknown-riscos/Makefile (original)
+++ toolchains/arm-unknown-riscos/Makefile Sun Jan 2 16:02:39 2011
@@ -3,24 +3,58 @@
UPSTREAM_GCCSDK_TARBALL := gcc4
UPSTREAM_GCCSDK_URI := svn://svn.riscos.info/gccsdk/trunk/gcc4@$(UPSTREAM_GCCSDK_VERSION)
+# Ditto for OSLib
+UPSTREAM_OSLIB_VERSION := 402
+UPSTREAM_OSLIB_TARBALL := oslib
+UPSTREAM_OSLIB_URI := https://ro-oslib.svn.sourceforge.net/svnroot/ro-oslib/trunk/!OSLib@$(UPST...
+
+# Ditto for CCRes
+UPSTREAM_CCRES_VERSION := 96
+UPSTREAM_CCRES_TARBALL := ccres
+UPSTREAM_CCRES_URI := svn://svn.riscos.info/ccres/trunk@$(UPSTREAM_CCRES_VERSION)
+
TOP := $(CURDIR)
RECIPES := $(TOP)/recipes
+BUILDSTEPS := $(TOP)/build-steps
TARGET_NAME := arm-unknown-riscos
PREFIX ?= /opt/netsurf/$(TARGET_NAME)
.PHONY: all clean distclean
-all: $(UPSTREAM_GCCSDK_TARBALL)
- cp -p $(RECIPES)/files/gcc4/gccsdk-params gcc4/gccsdk-params
- sed -i 's#{PREFIX}#$(PREFIX)#' gcc4/gccsdk-params
- cd gcc4 && make
+all: $(BUILDSTEPS)/buildsteps.d $(BUILDSTEPS)/gcc.d $(BUILDSTEPS)/oslib.d $(BUILDSTEPS)/ccres.d
clean:
cd gcc4 && make clean
distclean: clean
- rm -fr gcc4
+ rm -fr $(UPSTREAM_GCCSDK_TARBALL)
+ rm -fr $(UPSTREAM_OSLIB_TARBALL)
+ rm -fr $(UPSTREAM_CCRES_TARBALL)
+ rm -fr $(BUILDSTEPS)
+
+# Buildsteps
+$(BUILDSTEPS)/buildsteps.d:
+ mkdir -p $(BUILDSTEPS)
+ touch $@
+
+# GCCSDK
+$(BUILDSTEPS)/gcc.d: $(UPSTREAM_GCC_TARBALL)
+ cp -p $(RECIPES)/files/gcc4/gccsdk-params gcc4/gccsdk-params
+ sed -i 's#{PREFIX}#$(PREFIX)#' gcc4/gccsdk-params
+ cd gcc4 && make
+ touch $@
+
+# OSLib
+$(BUILDSTEPS)/oslib.d: $(BUILDSTEPS)/buildsteps.d $(BUILDSTEPS)/gcc.d $(UPSTREAM_OSLIB_TARBALL)
+ cd $(UPSTREAM_OSLIB_TARBALL) && GCCSDK_INSTALL_ENV=$(PREFIX)/env GCCSDK_INSTALL_CROSSBIN=$(PREFIX)/cross/bin make install
+ touch $@
+
+# CCRes
+$(BUILDSTEPS)/ccres.d: $(BUILDSTEPS)/buildsteps.d $(BUILDSTEPS)/oslib.d $(UPSTREAM_CCRES_TARBALL)
+ cd $(UPSTREAM_CCRES_TARBALL) && GCCSDK_INSTALL_ENV=$(PREFIX)/env GCCSDK_INSTALL_CROSSBIN=$(PREFIX)/cross/bin make
+ cd $(UPSTREAM_CCRES_TARBALL) && GCCSDK_INSTALL_ENV=$(PREFIX)/env GCCSDK_INSTALL_CROSSBIN=$(PREFIX)/cross/bin make install
+ touch $@
###
# Rules to fetch upstream sources
@@ -29,3 +63,8 @@
$(UPSTREAM_GCCSDK_TARBALL):
svn co $(UPSTREAM_GCCSDK_URI) $@
+$(UPSTREAM_OSLIB_TARBALL):
+ svn co $(UPSTREAM_OSLIB_URI) $@
+
+$(UPSTREAM_CCRES_TARBALL):
+ svn co $(UPSTREAM_CCRES_URI) $@
12 years, 4 months
r11182 jmb - in /toolchains/sdk: Makefile recipes/patches/zlib/arm-unknown-riscos/ recipes/patches/zlib/arm-unknown-riscos/configure.p recipes/patches/zlib/zconf.h.in.p recipes/patches/zlib/zlib.h.p
by netsurf@semichrome.net
Author: jmb
Date: Sun Jan 2 15:32:48 2011
New Revision: 11182
URL: http://source.netsurf-browser.org?rev=11182&view=rev
Log:
Extra patches for zlib to avoid ugly warnings caused by the use of undefined preprocessor macros
RISC OS-specific patch for zlib to stop it erroneously detecting largefile64 support where there is none
Ensure we build zlib static and not shared
Added:
toolchains/sdk/recipes/patches/zlib/arm-unknown-riscos/
toolchains/sdk/recipes/patches/zlib/arm-unknown-riscos/configure.p
toolchains/sdk/recipes/patches/zlib/zconf.h.in.p
toolchains/sdk/recipes/patches/zlib/zlib.h.p
Modified:
toolchains/sdk/Makefile
Modified: toolchains/sdk/Makefile
URL: http://source.netsurf-browser.org/toolchains/sdk/Makefile?rev=11182&r1=11...
==============================================================================
--- toolchains/sdk/Makefile (original)
+++ toolchains/sdk/Makefile Sun Jan 2 15:32:48 2011
@@ -93,7 +93,10 @@
mkdir -p $(BUILDDIR)/zlib
cd $(BUILDDIR)/zlib && tar xjf $(SOURCEDIR)/zlib-$(VERSION_ZLIB).tar.bz2
for p in `ls $(RECIPES)/patches/zlib/*.p` ; do patch -d $(BUILDDIR)/zlib/zlib-$(VERSION_ZLIB) -p0 <$$p ; done
- cd $(BUILDDIR)/zlib/zlib-$(VERSION_ZLIB) && $(env) ./configure --prefix=$(GCCSDK_INSTALL_ENV)
+ifneq ($(realpath $(RECIPES)/patches/zlib/$(TARGET)),)
+ for p in `ls $(RECIPES)/patches/zlib/$(TARGET)/*.p` ; do patch -d $(BUILDDIR)/zlib/zlib-$(VERSION_ZLIB) -p0 <$$p ; done
+endif
+ cd $(BUILDDIR)/zlib/zlib-$(VERSION_ZLIB) && $(env) ./configure --prefix=$(GCCSDK_INSTALL_ENV) --static
cd $(BUILDDIR)/zlib/zlib-$(VERSION_ZLIB) && $(env) make install
touch $@
Added: toolchains/sdk/recipes/patches/zlib/arm-unknown-riscos/configure.p
URL: http://source.netsurf-browser.org/toolchains/sdk/recipes/patches/zlib/arm...
==============================================================================
--- toolchains/sdk/recipes/patches/zlib/arm-unknown-riscos/configure.p (added)
+++ toolchains/sdk/recipes/patches/zlib/arm-unknown-riscos/configure.p Sun Jan 2 15:32:48 2011
@@ -1,0 +1,42 @@
+--- configure.orig 2007-11-07 09:39:25.111922700 +0000
++++ configure 2007-11-07 09:42:47.386922700 +0000
+@@ -260,18 +260,18 @@
+ TEST="all teststatic testshared"
+ fi
+
+-cat > $test.c <<EOF
+-#include <sys/types.h>
+-off64_t dummy = 0;
+-EOF
+-if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then
+- CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
+- SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
+- ALL="${ALL} all64"
+- TEST="${TEST} test64"
+- echo "Checking for off64_t... Yes."
+- echo "Checking for fseeko... Yes."
+-else
++#cat > $test.c <<EOF
++##include <sys/types.h>
++#off64_t dummy = 0;
++#EOF
++#if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then
++# CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
++# SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
++# ALL="${ALL} all64"
++# TEST="${TEST} test64"
++# echo "Checking for off64_t... Yes."
++# echo "Checking for fseeko... Yes."
++#else
+ echo "Checking for off64_t... No."
+ cat > $test.c <<EOF
+ #include <stdio.h>
+@@ -287,7 +287,7 @@
+ SFLAGS="${SFLAGS} -DNO_FSEEKO"
+ echo "Checking for fseeko... No."
+ fi
+-fi
++#fi
+
+ cp -p zconf.h.in zconf.h
+
Added: toolchains/sdk/recipes/patches/zlib/zconf.h.in.p
URL: http://source.netsurf-browser.org/toolchains/sdk/recipes/patches/zlib/zco...
==============================================================================
--- toolchains/sdk/recipes/patches/zlib/zconf.h.in.p (added)
+++ toolchains/sdk/recipes/patches/zlib/zconf.h.in.p Sun Jan 2 15:32:48 2011
@@ -1,0 +1,11 @@
+--- zconf.h.in.old 2011-01-02 21:25:38.000000000 +0000
++++ zconf.h.in 2011-01-02 21:26:07.000000000 +0000
+@@ -370,7 +370,7 @@
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+-#if -_LARGEFILE64_SOURCE - -1 == 1
++#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+ # undef _LARGEFILE64_SOURCE
+ #endif
+
Added: toolchains/sdk/recipes/patches/zlib/zlib.h.p
URL: http://source.netsurf-browser.org/toolchains/sdk/recipes/patches/zlib/zli...
==============================================================================
--- toolchains/sdk/recipes/patches/zlib/zlib.h.p (added)
+++ toolchains/sdk/recipes/patches/zlib/zlib.h.p Sun Jan 2 15:32:48 2011
@@ -1,0 +1,11 @@
+--- zlib.h.orig 2009-03-27 01:06:27.000000000 +0000
++++ zlib.h 2009-03-27 01:06:50.000000000 +0000
+@@ -1571,7 +1571,7 @@
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+ #endif
+
+-#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
++#if !defined(ZLIB_INTERNAL) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0
+ # define gzopen gzopen64
+ # define gzseek gzseek64
+ # define gztell gztell64
12 years, 4 months
r11181 jmb - /trunk/libcss/src/select/select.c
by netsurf@semichrome.net
Author: jmb
Date: Sun Jan 2 14:26:17 2011
New Revision: 11181
URL: http://source.netsurf-browser.org?rev=11181&view=rev
Log:
Complete the fix for pseudo element selection: inline styles and presentational hints must not be applied to pseudo elements.
Modified:
trunk/libcss/src/select/select.c
Modified: trunk/libcss/src/select/select.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/select.c?rev=11...
==============================================================================
--- trunk/libcss/src/select/select.c (original)
+++ trunk/libcss/src/select/select.c Sun Jan 2 14:26:17 2011
@@ -303,6 +303,10 @@
if (ctx == NULL || node == NULL || result == NULL || handler == NULL)
return CSS_BADPARM;
+ /* Inline style has no meaning if selecting for a pseudo element */
+ if (pseudo_element != CSS_PSEUDO_ELEMENT_NONE && inline_style != NULL)
+ return CSS_BADPARM;
+
/* Set up the selection state */
memset(&state, 0, sizeof(css_select_state));
state.node = node;
@@ -353,12 +357,14 @@
/* Take account of presentational hints and fix up any remaining
* unset properties. */
for (i = 0; i < CSS_N_PROPERTIES; i++) {
- /* If the existing property value came from an author
- * stylesheet or a user sheet using !important, then leave
- * it alone. */
- if (state.props[i].set == false ||
+ /* Apply presentational hints if we're not selecting for
+ * a pseudo element, and the property is unset or the
+ * existing property value did not come from an author
+ * stylesheet or a user sheet using !important. */
+ if (pseudo_element == CSS_PSEUDO_ELEMENT_NONE &&
+ (state.props[i].set == false ||
(state.props[i].origin != CSS_ORIGIN_AUTHOR &&
- state.props[i].important == false)) {
+ state.props[i].important == false))) {
error = set_hint(&state, i);
if (error != CSS_OK)
goto cleanup;
@@ -891,7 +897,13 @@
/* If this is the first selector in the chain, we must match
* its details. The details of subsequent selectors will be
- * matched when processing the combinator. */
+ * matched when processing the combinator.
+ *
+ * Note that pseudo elements will only appear as details of
+ * the first selector in the chain, as the parser will reject
+ * any selector chains containing pseudo elements anywhere
+ * else.
+ */
if (s == selector) {
/* Match details on this selector */
error = match_details(ctx, node, detail, state, &match);
12 years, 4 months
r11180 stevef - in /branches/stevef/toolbars/riscos: gui.h menus.c menus.h toolbar.c toolbar.h treeview.c window.c
by netsurf@semichrome.net
Author: stevef
Date: Sun Jan 2 11:40:03 2011
New Revision: 11180
URL: http://source.netsurf-browser.org?rev=11180&view=rev
Log:
Further rationalisation of browser window menu actions.
Modified:
branches/stevef/toolbars/riscos/gui.h
branches/stevef/toolbars/riscos/menus.c
branches/stevef/toolbars/riscos/menus.h
branches/stevef/toolbars/riscos/toolbar.c
branches/stevef/toolbars/riscos/toolbar.h
branches/stevef/toolbars/riscos/treeview.c
branches/stevef/toolbars/riscos/window.c
Modified: branches/stevef/toolbars/riscos/gui.h
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/gui.h?r...
==============================================================================
--- branches/stevef/toolbars/riscos/gui.h (original)
+++ branches/stevef/toolbars/riscos/gui.h Sun Jan 2 11:40:03 2011
@@ -152,7 +152,7 @@
void ro_gui_window_process_reformats(void);
void ro_gui_window_default_options(struct browser_window *bw);
void ro_gui_window_redraw_all(void);
-void ro_gui_window_prepare_navigate_all(void);
+//void ro_gui_window_prepare_navigate_all(void);
browser_mouse_state ro_gui_mouse_click_state(wimp_mouse_state buttons,
wimp_icon_flags type);
browser_mouse_state ro_gui_mouse_drag_state(wimp_mouse_state buttons,
Modified: branches/stevef/toolbars/riscos/menus.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/menus.c...
==============================================================================
--- branches/stevef/toolbars/riscos/menus.c (original)
+++ branches/stevef/toolbars/riscos/menus.c Sun Jan 2 11:40:03 2011
@@ -432,7 +432,7 @@
gui_form_select_control = NULL;
}
-
+#if 0
/**
* The content has changed, reset object references
*/
@@ -446,7 +446,7 @@
if ((current_menu) && (current_menu == gui_form_select_menu))
ro_gui_menu_closed(true);
}
-
+#endif
/**
* Handle menu selection.
@@ -488,11 +488,6 @@
if (!ro_gui_wimp_event_menu_selection(current_menu_window,
current_menu_icon, current_menu, selection, action)) {
-
- /* perform menu action */
- if (action != NO_ACTION)
- ro_gui_menu_handle_action(current_menu_window,
- action, false);
/* perform non-automated actions */
if (current_menu == url_suggest_menu) {
@@ -640,7 +635,7 @@
}
}
-
+#if 0
/**
* Update navigate menu status and toolbar icons.
*
@@ -668,7 +663,7 @@
!ro_gui_url_suggest_prepare_menu());
}
}
-
+#endif
/**
* Display a menu of options for a form select control.
@@ -1135,33 +1130,6 @@
else
entry->menu_entry->menu_flags &= ~wimp_MENU_TICKED;
}
-}
-
-
-/**
- * Handles an action.
- *
- * \param owner the window to handle the action for
- * \param action the action to handle
- * \param windows_at_pointer whether to open any windows at the pointer location
- */
-bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
- bool windows_at_pointer)
-{
- wimp_window_state state;
- struct gui_window *g = NULL;
- struct browser_window *bw = NULL;
- hlcache_handle *h = NULL;
- struct toolbar *t = NULL;
- os_error *error;
- char url[80];
- bool is_cookies, is_hotlist, is_global_history;
-
- /* \TODO -- This function used to process menu selections; find all
- * callers and update them.
- */
-
- return false;
}
Modified: branches/stevef/toolbars/riscos/menus.h
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/menus.h...
==============================================================================
--- branches/stevef/toolbars/riscos/menus.h (original)
+++ branches/stevef/toolbars/riscos/menus.h Sun Jan 2 11:40:03 2011
@@ -169,12 +169,10 @@
void ro_gui_menu_init(void);
void ro_gui_menu_create(wimp_menu* menu, int x, int y, wimp_w w, bool prepare);
-bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
- bool windows_at_pointer);
void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
bool windows);
void ro_gui_menu_closed(bool cleanup);
-void ro_gui_menu_objects_moved(void);
+//void ro_gui_menu_objects_moved(void);
void ro_gui_popup_menu(wimp_menu *menu, wimp_w w, wimp_i i);
void ro_gui_menu_selection(wimp_selection* selection);
void ro_gui_menu_warning(wimp_message_menu_warning *warning);
Modified: branches/stevef/toolbars/riscos/toolbar.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/toolbar...
==============================================================================
--- branches/stevef/toolbars/riscos/toolbar.c (original)
+++ branches/stevef/toolbars/riscos/toolbar.c Sun Jan 2 11:40:03 2011
@@ -130,6 +130,7 @@
static struct toolbar_icon *ro_toolbar_get_icon(struct toolbar *toolbar,
int x, int y);
+static void ro_toolbar_update_buttons(struct toolbar *toolbar);
/**
@@ -278,7 +279,6 @@
struct toolbar_icon *toolbar_icon;
int width, max_icon;
wimp_icon_flags icon_flags;
- struct gui_window *g;
if (!toolbar) return false;
/* Set the theme and window sprite area
@@ -546,9 +546,7 @@
ro_toolbar_set_help_prefix(toolbar);
switch (toolbar->type) {
case TOOLBAR_BROWSER_TOOLBAR:
- g = ro_gui_window_lookup(toolbar->parent_handle);
- if (g)
- ro_gui_prepare_navigate(g);
+ ro_toolbar_update_buttons(toolbar);
break;
case TOOLBAR_HOTLIST_TOOLBAR:
case TOOLBAR_HISTORY_TOOLBAR:
@@ -1036,6 +1034,38 @@
/**
+ * Force the update of all toolbars buttons to reflect the current state.
+ */
+
+void ro_toolbar_update_all_buttons(void)
+{
+ struct toolbar *bar;
+
+ bar = ro_toolbar_bars;
+ while (bar != NULL) {
+ ro_toolbar_update_buttons(bar);
+
+ bar = bar->next;
+ }
+}
+
+
+/**
+ * Update the state of a toolbar's buttons.
+ *
+ * \param toolbar the toolbar to update
+ */
+void ro_toolbar_update_buttons(struct toolbar *toolbar)
+{
+ assert(toolbar != NULL);
+
+ if (toolbar->callbacks != NULL &&
+ toolbar->callbacks->update_buttons != NULL)
+ toolbar->callbacks->update_buttons(toolbar->client_data);
+}
+
+
+/**
* Refresh a toolbar after it has been updated
*
* \param toolbar the toolbar to update
@@ -1298,6 +1328,25 @@
if (toolbar->descriptor->throbber_redraw)
ro_gui_force_redraw_icon(toolbar->toolbar_handle,
ICON_TOOLBAR_THROBBER);
+}
+
+
+/**
+ * Set the shaded state of a toolbar button.
+ *
+ * \TODO -- Currently there's no attempt to validate that the button exists, or
+ * whether the state actually needs changing (the latter should be
+ * done by ro_gui_set_icon_shaded_state().
+ *
+ * \param *toolbar the toolbar to update.
+ * \param button the button to update.
+ * \param shaded true if the button should be shaded; else false.
+ */
+
+void ro_toolbar_set_button_shaded_state(struct toolbar *toolbar,
+ int button, bool shaded)
+{
+ ro_gui_set_icon_shaded_state(toolbar->toolbar_handle, button, shaded);
}
Modified: branches/stevef/toolbars/riscos/toolbar.h
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/toolbar...
==============================================================================
--- branches/stevef/toolbars/riscos/toolbar.h (original)
+++ branches/stevef/toolbars/riscos/toolbar.h Sun Jan 2 11:40:03 2011
@@ -90,6 +90,7 @@
struct toolbar_callbacks {
void (*theme_update)(void *); /**< call on theme update */
void (*change_size)(void *); /**< call on bar size change */
+ void (*update_buttons)(void *); /** call to update button states */
};
struct toolbar {
@@ -129,6 +130,7 @@
void ro_toolbar_destroy(struct toolbar *toolbar);
void ro_toolbar_refresh(struct toolbar *toolbar);
void ro_toolbar_update_client_data(struct toolbar *toolbar, void *client_data);
+void ro_toolbar_update_all_buttons(void);
void ro_toolbar_theme_update(void);
struct toolbar *ro_toolbar_parent_window_lookup(wimp_w w);
struct toolbar *ro_toolbar_window_lookup(wimp_w w);
@@ -136,6 +138,8 @@
void ro_toolbar_start_throbbing(struct toolbar *toolbar);
void ro_toolbar_stop_throbbing(struct toolbar *toolbar);
void ro_toolbar_throb(struct toolbar *toolbar);
+void ro_toolbar_set_button_shaded_state(struct toolbar *toolbar,
+ int button, bool shaded);
bool ro_toolbar_take_caret(struct toolbar *toolbar);
void ro_toolbar_set_url(struct toolbar *toolbar, const char *url,
bool is_utf8, bool set_caret);
Modified: branches/stevef/toolbars/riscos/treeview.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/treevie...
==============================================================================
--- branches/stevef/toolbars/riscos/treeview.c (original)
+++ branches/stevef/toolbars/riscos/treeview.c Sun Jan 2 11:40:03 2011
@@ -121,7 +121,8 @@
static const struct toolbar_callbacks ro_treeview_toolbar_callbacks = {
ro_treeview_update_theme,
- ro_treeview_update_toolbar
+ ro_treeview_update_toolbar,
+ NULL
};
Modified: branches/stevef/toolbars/riscos/window.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/window....
==============================================================================
--- branches/stevef/toolbars/riscos/window.c (original)
+++ branches/stevef/toolbars/riscos/window.c Sun Jan 2 11:40:03 2011
@@ -75,6 +75,7 @@
#include "riscos/toolbar.h"
#include "riscos/thumbnail.h"
#include "riscos/url_complete.h"
+#include "riscos/url_suggest.h"
#include "riscos/wimp.h"
#include "riscos/wimp_event.h"
#include "riscos/wimputils.h"
@@ -163,6 +164,8 @@
const char *filename, bool toolbar);
static void ro_gui_window_update_theme(void *);
static void ro_gui_window_update_toolbar(void *);
+//static void ro_gui_window_update_toolbar_buttons(struct toolbar *toolbar,
+// void *data);
/* \TODO -- These probably belong in another module. */
@@ -170,6 +173,21 @@
static bool ro_gui_window_content_export_types(hlcache_handle *h,
bool *export_draw, bool *export_sprite);
static bool ro_gui_window_up_available(struct browser_window *bw);
+static void ro_gui_window_update_toolbar_buttons_g(struct gui_window *g);
+static void ro_gui_window_action_home(struct gui_window *g);
+static void ro_gui_window_action_new_window(struct gui_window *g);
+static void ro_gui_window_action_local_history(struct gui_window *g);
+static void ro_gui_window_action_navigate_back_new(struct gui_window *g);
+static void ro_gui_window_action_navigate_forward_new(struct gui_window *g);
+static void ro_gui_window_action_save(struct gui_window *g,
+ gui_save_type save_type);
+static void ro_gui_window_action_search(struct gui_window *g);
+static void ro_gui_window_action_zoom(struct gui_window *g);
+static void ro_gui_window_action_add_bookmark(struct gui_window *g);
+static void ro_gui_window_action_print(struct gui_window *g);
+static void ro_gui_window_action_page_info(struct gui_window *g);
+
+
@@ -194,7 +212,8 @@
static const struct toolbar_callbacks ro_gui_window_toolbar_callbacks = {
ro_gui_window_update_theme,
- ro_gui_window_update_toolbar
+ ro_gui_window_update_toolbar,
+ (void (*)(void *)) ro_gui_window_update_toolbar_buttons_g
};
/** The browser window menu handle. */
@@ -795,7 +814,7 @@
struct browser_window *bw;
hlcache_handle *h;
struct toolbar *toolbar;
- char url[80];
+// char url[80];
wimp_window_state state;
os_error *error;
// os_coord pos;
@@ -813,16 +832,16 @@
/* help actions */
case HELP_OPEN_CONTENTS:
ro_gui_open_help_page("documentation/index");
- break;;
+ break;
case HELP_OPEN_GUIDE:
ro_gui_open_help_page("documentation/guide");
- break;;
+ break;
case HELP_OPEN_INFORMATION:
ro_gui_open_help_page("documentation/info");
- break;;
+ break;
case HELP_OPEN_ABOUT:
ro_gui_open_help_page("about/index");
- break;;
+ break;
case HELP_LAUNCH_INTERACTIVE:
if (!ro_gui_interactive_help_available()) {
ro_gui_interactive_help_start();
@@ -830,59 +849,47 @@
} else {
option_interactive_help = !option_interactive_help;
}
- break;;
+ break;
/* history actions */
case HISTORY_SHOW_LOCAL:
- if (bw != NULL && bw->history != NULL)
- ro_gui_history_open(bw, bw->history, false);
- break;;
+ ro_gui_window_action_local_history(g);
+ break;
case HISTORY_SHOW_GLOBAL:
ro_gui_global_history_open();
- break;;
+ break;
/* hotlist actions */
case HOTLIST_ADD_URL:
- if (h != NULL && content_get_url(h) != NULL)
- hotlist_add_page(content_get_url(h));
- break;;
+ ro_gui_window_action_add_bookmark(g);
+ break;
case HOTLIST_SHOW:
ro_gui_hotlist_open();
- break;;
+ break;
/* cookies actions */
case COOKIES_SHOW:
ro_gui_cookies_open();
- break;;
+ break;
case COOKIES_DELETE:
cookies_delete_all();
- break;;
+ break;
/* page actions */
case BROWSER_PAGE_INFO:
- if (h != NULL) {
- ro_gui_window_prepare_pageinfo(g);
- ro_gui_dialog_open_persistent(g->window,
- dialog_pageinfo, false);
- }
- break;;
+ ro_gui_window_action_page_info(g);
+ break;
case BROWSER_PRINT:
- if (h != NULL) {
- ro_gui_print_prepare(g);
- ro_gui_dialog_open_persistent(g->window,
- dialog_print, false);
- }
- break;;
+ ro_gui_window_action_print(g);
+ break;
case BROWSER_NEW_WINDOW:
- if (h != NULL)
- browser_window_create(content_get_url(h), bw, 0,
- false, false);
- break;;
+ ro_gui_window_action_new_window(g);
+ break;
case BROWSER_VIEW_SOURCE:
if (h != NULL)
ro_gui_view_source(h);
- break;;
+ break;
/* object actions */
case BROWSER_OBJECT_INFO:
@@ -892,13 +899,13 @@
ro_gui_dialog_open_persistent(g->window,
dialog_objinfo, false);
}
- break;;
+ break;
case BROWSER_OBJECT_RELOAD:
if (current_menu_object != NULL) {
content_invalidate_reuse_data(current_menu_object);
browser_window_reload(bw, false);
}
- break;;
+ break;
/* link actions */
case BROWSER_LINK_SAVE_URI:
@@ -908,7 +915,7 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_LINK_SAVE_URL:
if (current_menu_url != NULL) {
ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
@@ -916,7 +923,7 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_LINK_SAVE_TEXT:
if (current_menu_url != NULL) {
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
@@ -924,17 +931,17 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_LINK_DOWNLOAD:
if (current_menu_url != NULL)
browser_window_download(bw, current_menu_url,
content_get_url(h));
- break;;
+ break;
case BROWSER_LINK_NEW_WINDOW:
if (current_menu_url != NULL)
browser_window_create(current_menu_url, bw,
content_get_url(h), true, false);
- break;;
+ break;
/* save actions */
case BROWSER_OBJECT_SAVE:
@@ -944,7 +951,7 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_OBJECT_EXPORT_SPRITE:
if (current_menu_object != NULL) {
ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
@@ -952,7 +959,7 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_OBJECT_EXPORT_DRAW:
if (current_menu_object != NULL) {
ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
@@ -960,71 +967,31 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_SAVE:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_SOURCE,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_SOURCE);
+ break;
case BROWSER_SAVE_COMPLETE:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_COMPLETE,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_COMPLETE);
+ break;
case BROWSER_EXPORT_DRAW:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_DRAW,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_DRAW);
+ break;
case BROWSER_EXPORT_PDF:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_PDF,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_PDF);
+ break;
case BROWSER_EXPORT_TEXT:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_TEXT,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_TEXT);
+ break;
case BROWSER_SAVE_URL_URI:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_LINK_URI,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_LINK_URI);
+ break;
case BROWSER_SAVE_URL_URL:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_LINK_URL,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_LINK_URL);
+ break;
case BROWSER_SAVE_URL_TEXT:
- if (h != NULL) {
- ro_gui_save_prepare(GUI_SAVE_LINK_TEXT,
- h, NULL, NULL, NULL);
- ro_gui_dialog_open_persistent(g->window, dialog_saveas,
- false);
- }
- break;;
+ ro_gui_window_action_save(g, GUI_SAVE_LINK_TEXT);
+ break;
/* selection actions */
case BROWSER_SELECTION_SAVE:
@@ -1034,100 +1001,79 @@
ro_gui_dialog_open_persistent(g->window, dialog_saveas,
false);
}
- break;;
+ break;
case BROWSER_SELECTION_COPY:
browser_window_key_press(bw, KEY_COPY_SELECTION);
- break;;
+ break;
case BROWSER_SELECTION_CUT:
browser_window_key_press(bw, KEY_CUT_SELECTION);
- break;;
+ break;
case BROWSER_SELECTION_PASTE:
browser_window_key_press(bw, KEY_PASTE);
- break;;
+ break;
case BROWSER_SELECTION_ALL:
browser_window_key_press(bw, KEY_SELECT_ALL);
- break;;
+ break;
case BROWSER_SELECTION_CLEAR:
browser_window_key_press(bw, KEY_CLEAR_SELECTION);
- break;;
+ break;
/* navigation actions */
case BROWSER_NAVIGATE_HOME:
- if (bw != NULL) {
- if ((option_homepage_url) &&
- (option_homepage_url[0])) {
- browser_window_go(g->bw,
- option_homepage_url, 0, true);
- } else {
- snprintf(url, sizeof url,
- "file:///<NetSurf$Dir>/Docs/welcome/index_%s",
- option_language);
- browser_window_go(g->bw, url, 0, true);
- }
- }
- break;;
+ ro_gui_window_action_home(g);
+ break;
case BROWSER_NAVIGATE_BACK:
if (bw != NULL && bw->history != NULL)
history_back(bw, bw->history);
- break;;
+ break;
case BROWSER_NAVIGATE_FORWARD:
if (bw != NULL && bw->history != NULL)
history_forward(bw, bw->history);
- break;;
+ break;
case BROWSER_NAVIGATE_UP:
if (bw != NULL && h != NULL)
ro_gui_window_navigate_up(bw->window,
content_get_url(h));
- break;;
+ break;
case BROWSER_NAVIGATE_RELOAD_ALL:
if (bw != NULL)
- browser_window_reload(bw,
- (action == BROWSER_NAVIGATE_RELOAD_ALL));
- break;;
+ browser_window_reload(bw, true);
+ break;
case BROWSER_NAVIGATE_STOP:
if (bw != NULL)
browser_window_stop(bw);
- break;;
+ break;
/* browser window/display actions */
case BROWSER_SCALE_VIEW:
- if (h != NULL) {
- ro_gui_dialog_prepare_zoom(g);
- ro_gui_dialog_open_persistent(g->window, dialog_zoom,
- false);
- }
- break;;
+ ro_gui_window_action_zoom(g);
+ break;
case BROWSER_FIND_TEXT:
- if (h != NULL && (content_get_type(h) == CONTENT_HTML ||
- content_get_type(h) == CONTENT_TEXTPLAIN)) {
- ro_gui_search_prepare(g->bw);
- ro_gui_dialog_open_persistent(g->window, dialog_search,
- false);
- }
- break;;
+ ro_gui_window_action_search(g);
+ break;
case BROWSER_IMAGES_BACKGROUND:
if (g != NULL) {
g->option.background_images =
!g->option.background_images;
gui_window_redraw_window(g);
}
- break;;
+ break;
case BROWSER_BUFFER_ANIMS:
if (g != NULL)
g->option.buffer_animations =
!g->option.buffer_animations;
- break;;
+ break;
case BROWSER_BUFFER_ALL:
if (g != NULL)
g->option.buffer_everything =
!g->option.buffer_everything;
- break;;
+ break;
case BROWSER_SAVE_VIEW:
if (bw != NULL) {
ro_gui_window_default_options(bw);
ro_gui_save_options();
}
- break;;
+ break;
case BROWSER_WINDOW_DEFAULT:
if (g != NULL) {
ro_gui_screen_size(&option_window_screen_width,
@@ -1148,20 +1094,20 @@
state.visible.y1 - state.visible.y0;
ro_gui_save_options();
}
- break;;
+ break;
case BROWSER_WINDOW_STAGGER:
option_window_stagger = !option_window_stagger;
ro_gui_save_options();
- break;;
+ break;
case BROWSER_WINDOW_COPY:
option_window_size_clone = !option_window_size_clone;
ro_gui_save_options();
- break;;
+ break;
case BROWSER_WINDOW_RESET:
option_window_screen_width = 0;
option_window_screen_height = 0;
ro_gui_save_options();
- break;;
+ break;
/* toolbar actions */
case TOOLBAR_BUTTONS:
@@ -1169,7 +1115,7 @@
ro_toolbar_set_display_buttons(toolbar,
ro_toolbar_get_display_buttons(toolbar));
ro_toolbar_refresh(toolbar);
- break;;
+ break;
case TOOLBAR_ADDRESS_BAR:
assert(toolbar);
ro_toolbar_set_display_url(toolbar,
@@ -1177,17 +1123,17 @@
ro_toolbar_refresh(toolbar);
if (ro_toolbar_get_display_url(toolbar))
ro_toolbar_take_caret(toolbar);
- break;;
+ break;
case TOOLBAR_THROBBER:
assert(toolbar);
ro_toolbar_set_display_throbber(toolbar,
ro_toolbar_get_display_throbber(toolbar));
ro_toolbar_refresh(toolbar);
- break;;
+ break;
case TOOLBAR_EDIT:
assert(toolbar);
ro_toolbar_toggle_edit(toolbar);
- break;;
+ break;
default:
return false;
@@ -1408,46 +1354,278 @@
mime, true);
}
-
-/**
- * This is just a placeholder for code we need to reinstate.
- */
-
#if 0
-void gui_window_update_toolbar(void)
-{
-
-
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_RELOAD,
+/**
+ * Update the toolbar buttons for a given browser window to reflect the
+ * current state of its contents. This is called with a toolbar handle, and
+ * ro_gui_window_update_toolbar_buttons_g() should be called in preference when
+ * the gui_window structure handle is known.
+ *
+ * \param *toolbar The toolbar to update.
+ * \param *data void pointer the window's gui_window struct
+ */
+
+void ro_gui_window_update_toolbar_buttons(struct toolbar *toolbar, void *data)
+{
+ struct gui_window *g = (struct gui_window *) data;
+
+ if (toolbar != NULL && g != NULL)
+ ro_gui_window_update_toolbar_buttons_g(g);
+}
+#endif
+
+/**
+ * Update the toolbar buttons for a given browser window to reflect the
+ * current state of its contents.
+ *
+ * \param *g The browser window to update.
+ */
+
+void ro_gui_window_update_toolbar_buttons_g(struct gui_window *g)
+{
+ struct browser_window *bw;
+ hlcache_handle *h;
+ struct toolbar *toolbar;
+
+ if (g == NULL)
+ return;
+
+ bw = g->bw;
+ h = bw->current_content;
+ toolbar = g->toolbar;
+
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_RELOAD,
!browser_window_reload_available(bw));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_STOP,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_RELOAD,
+ !browser_window_reload_available(bw));
+
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_STOP,
!browser_window_stop_available(bw));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_BACK,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_BACK,
!browser_window_back_available(bw));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_FORWARD,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_FORWARD,
!browser_window_forward_available(bw));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_UP,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_UP,
!ro_gui_window_up_available(bw));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SEARCH,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_SEARCH,
h == NULL || (content_get_type(h) != CONTENT_HTML &&
content_get_type(h) != CONTENT_TEXTPLAIN));
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SCALE,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_SCALE,
h == NULL);
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_PRINT,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_PRINT,
h == NULL);
- ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SAVE,
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_SAVE,
h == NULL);
-}
-#endif
+ /* \TODO -- This needs to be properly abstracted. */
+
+ ro_toolbar_set_button_shaded_state(toolbar, ICON_TOOLBAR_SUGGEST,
+ !ro_gui_url_suggest_prepare_menu());
+}
+
+
+/**
+ * Perform a Navigate Home action on a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_home(struct gui_window *g)
+{
+ char url[80];
+
+ if (g == NULL || g->bw == NULL)
+ return;
+
+ if ((option_homepage_url) && (option_homepage_url[0])) {
+ browser_window_go(g->bw, option_homepage_url, 0, true);
+ } else {
+ snprintf(url, sizeof url,
+ "file:///<NetSurf$Dir>/Docs/welcome/index_%s",
+ option_language);
+ browser_window_go(g->bw, url, 0, true);
+ }
+}
+
+
+/**
+ * Navigate back from a browser window into a new window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_navigate_back_new(struct gui_window *g)
+{
+ struct browser_window *new_bw;
+
+ if (g == NULL || g->bw == NULL)
+ return;
+
+ new_bw = browser_window_create(NULL, g->bw, NULL, false, false);
+
+ if (new_bw != NULL && new_bw->history != NULL)
+ history_back(new_bw, new_bw->history);
+}
+
+
+/**
+ * Navigate forward from a browser window into a new window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_navigate_forward_new(struct gui_window *g)
+{
+ struct browser_window *new_bw;
+
+ if (g == NULL || g->bw == NULL)
+ return;
+
+ new_bw = browser_window_create(NULL, g->bw, NULL, false, false);
+
+ if (new_bw != NULL && new_bw->history != NULL)
+ history_forward(new_bw, new_bw->history);
+}
+
+
+/**
+ * Open a new browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_new_window(struct gui_window *g)
+{
+ if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
+ return;
+
+ browser_window_create(content_get_url(g->bw->current_content), g->bw,
+ 0, false, false);
+}
+
+
+/**
+ * Open a local history pane for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_local_history(struct gui_window *g)
+{
+ if (g != NULL && g->bw != NULL && g->bw->history != NULL)
+ ro_gui_history_open(g->bw, g->bw->history, false);
+}
+
+
+/**
+ * Open a save dialogue for a browser window contents.
+ *
+ * \param *g The browser window to act on.
+ * \param save_type The type of save to open.
+ */
+
+void ro_gui_window_action_save(struct gui_window *g, gui_save_type save_type)
+{
+ if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
+ return;
+
+ ro_gui_save_prepare(save_type, g->bw->current_content,
+ NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas, false);
+}
+
+
+/**
+ * Open a text search dialogue for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_search(struct gui_window *g)
+{
+ if (g == NULL || g->bw == NULL || g->bw->current_content == NULL ||
+ (content_get_type(g->bw->current_content) !=
+ CONTENT_HTML &&
+ content_get_type(g->bw->current_content) !=
+ CONTENT_TEXTPLAIN))
+ return;
+
+ ro_gui_search_prepare(g->bw);
+ ro_gui_dialog_open_persistent(g->window, dialog_search, false);
+}
+
+
+/**
+ * Open a zoom dialogue for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_zoom(struct gui_window *g)
+{
+ if (g == NULL)
+ return;
+
+ ro_gui_dialog_prepare_zoom(g);
+ ro_gui_dialog_open_persistent(g->window, dialog_zoom, false);
+}
+
+
+/**
+ * Add a hotlist entry for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_add_bookmark(struct gui_window *g)
+{
+ if (g == NULL || g->bw == NULL || g->bw->current_content == NULL ||
+ content_get_url(g->bw->current_content) == NULL)
+ return;
+
+ hotlist_add_page(content_get_url(g->bw->current_content));
+}
+
+
+/**
+ * Open a print dialogue for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_print(struct gui_window *g)
+{
+ if (g == NULL)
+ return;
+
+ ro_gui_print_prepare(g);
+ ro_gui_dialog_open_persistent(g->window, dialog_print, false);
+}
+
+
+/**
+ * Open a page info box for a browser window.
+ *
+ * \param *g The browser window to act on.
+ */
+
+void ro_gui_window_action_page_info(struct gui_window *g)
+{
+ if (g == NULL || g->bw == NULL || g->bw->current_content == NULL)
+ return;
+
+ ro_gui_window_prepare_pageinfo(g);
+ ro_gui_dialog_open_persistent(g->window, dialog_pageinfo, false);
+}
+
@@ -1661,7 +1839,7 @@
/* Set the window options */
bw->window = g;
ro_gui_window_clone_options(bw, clone);
- ro_gui_prepare_navigate(g);
+ ro_gui_window_update_toolbar_buttons_g(g);
/* Register event handlers */
ro_gui_wimp_event_set_user_data(g->window, g);
@@ -2333,8 +2511,9 @@
void gui_window_start_throbber(struct gui_window *g)
{
- ro_gui_menu_objects_moved();
- ro_gui_prepare_navigate(g);
+ /* \TODO -- Not sure if we still need this? */
+ //ro_gui_menu_objects_moved();
+ ro_gui_window_update_toolbar_buttons_g(g);
if (g->toolbar != NULL)
ro_toolbar_start_throbbing(g->toolbar);
}
@@ -2349,7 +2528,7 @@
void gui_window_stop_throbber(struct gui_window *g)
{
- ro_gui_prepare_navigate(g);
+ ro_gui_window_update_toolbar_buttons_g(g);
if (g->toolbar != NULL)
ro_toolbar_stop_throbbing(g->toolbar);
}
@@ -2431,8 +2610,9 @@
void gui_window_new_content(struct gui_window *g)
{
- ro_gui_menu_objects_moved();
- ro_gui_prepare_navigate(g);
+ /* \TODO -- Not sure if we still need this? */
+ //ro_gui_menu_objects_moved();
+ ro_gui_window_update_toolbar_buttons_g(g);
ro_gui_dialog_close_persistent(g->window);
}
@@ -3268,9 +3448,11 @@
} else {
/* this is pointless if we are about to close the
* window */
- if (!destroy)
- ro_gui_menu_handle_action(w,
- BROWSER_NAVIGATE_UP, true);
+ if (!destroy && g->bw != NULL &&
+ g->bw->current_content != NULL)
+ ro_gui_window_navigate_up(g->bw->window,
+ content_get_url(
+ g->bw->current_content));
}
}
else
@@ -3391,9 +3573,10 @@
struct gui_window *g = ro_gui_toolbar_lookup(pointer->w);
struct browser_window *new_bw;
int selection;
+ bool update_toolbar = true;
/* toolbars in the options window have no gui_window */
- if (!g)
+ if (g == NULL)
return true;
/* try to close url-completion */
@@ -3411,88 +3594,70 @@
/* Handle the buttons appropriately */
switch (selection) {
case ICON_TOOLBAR_BACK:
- if (pointer->buttons == wimp_CLICK_ADJUST) {
- new_bw = browser_window_create(NULL,
- g->bw, NULL, false, false);
- ro_gui_menu_handle_action(
- new_bw->window->window,
- BROWSER_NAVIGATE_BACK, true);
- } else {
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_BACK, true);
- }
+ if (pointer->buttons == wimp_CLICK_ADJUST)
+ ro_gui_window_action_navigate_back_new(g);
+ else
+ if (g->bw != NULL && g->bw->history != NULL)
+ history_back(g->bw, g->bw->history);
break;
case ICON_TOOLBAR_FORWARD:
- if (pointer->buttons == wimp_CLICK_ADJUST) {
- new_bw = browser_window_create(NULL,
- g->bw, NULL, false, false);
- ro_gui_menu_handle_action(
- new_bw->window->window,
- BROWSER_NAVIGATE_FORWARD, true);
- } else {
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_FORWARD, true);
- }
+ if (pointer->buttons == wimp_CLICK_ADJUST)
+ ro_gui_window_action_navigate_forward_new(g);
+ else
+ if (g->bw != NULL && g->bw->history != NULL)
+ history_forward(g->bw, g->bw->history);
break;
case ICON_TOOLBAR_STOP:
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_STOP, true);
+ if (g->bw != NULL)
+ browser_window_stop(g->bw);
break;
case ICON_TOOLBAR_RELOAD:
- if (pointer->buttons == wimp_CLICK_SELECT)
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_RELOAD, true);
- else if (pointer->buttons == wimp_CLICK_ADJUST)
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_RELOAD_ALL,
- true);
+ if (g->bw != NULL)
+ browser_window_reload(g->bw,
+ (pointer->buttons ==
+ wimp_CLICK_ADJUST));
break;
case ICON_TOOLBAR_HISTORY:
if (pointer->buttons == wimp_CLICK_SELECT)
- ro_gui_menu_handle_action(g->window,
- HISTORY_SHOW_LOCAL, true);
+ ro_gui_window_action_local_history(g);
else
- ro_gui_menu_handle_action(g->window,
- HISTORY_SHOW_GLOBAL, true);
+ ro_gui_global_history_open();
break;
+
case ICON_TOOLBAR_HOME:
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_HOME, true);
+ ro_gui_window_action_home(g);
break;
+
case ICON_TOOLBAR_SEARCH:
- ro_gui_menu_handle_action(g->window,
- BROWSER_FIND_TEXT, true);
+ ro_gui_window_action_search(g);
break;
+
case ICON_TOOLBAR_SCALE:
- ro_gui_menu_handle_action(g->window,
- BROWSER_SCALE_VIEW, true);
+ ro_gui_window_action_zoom(g);
break;
case ICON_TOOLBAR_BOOKMARK:
if (pointer->buttons == wimp_CLICK_ADJUST)
- ro_gui_menu_handle_action(g->window,
- HOTLIST_ADD_URL, true);
+ ro_gui_window_action_add_bookmark(g);
else
- ro_gui_menu_handle_action(g->window,
- HOTLIST_SHOW, true);
+ ro_gui_hotlist_open();
break;
case ICON_TOOLBAR_SAVE:
if (pointer->buttons == wimp_CLICK_ADJUST)
- ro_gui_menu_handle_action(g->window,
- BROWSER_SAVE_COMPLETE, true);
+ ro_gui_window_action_save(g, GUI_SAVE_COMPLETE);
else
- ro_gui_menu_handle_action(g->window,
- BROWSER_SAVE, true);
+ ro_gui_window_action_save(g, GUI_SAVE_SOURCE);
break;
+
case ICON_TOOLBAR_PRINT:
- ro_gui_menu_handle_action(g->window,
- BROWSER_PRINT, true);
+ ro_gui_window_action_print(g);
break;
+
case ICON_TOOLBAR_UP:
if (pointer->buttons == wimp_CLICK_ADJUST) {
if (g->bw && g->bw->current_content) {
@@ -3508,8 +3673,11 @@
content_get_url(h));
}
} else {
- ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_UP, true);
+ if (g->bw != NULL &&
+ g->bw->current_content != NULL)
+ ro_gui_window_navigate_up(g->bw->window,
+ content_get_url(
+ g->bw->current_content));
}
break;
case ICON_TOOLBAR_URL:
@@ -3538,23 +3706,34 @@
ro_gui_popup_menu(url_suggest_menu,
g->toolbar->toolbar_handle,
ICON_TOOLBAR_SUGGEST);
+ update_toolbar = false;
break;
}
+
+ if (update_toolbar)
+ ro_gui_window_update_toolbar_buttons_g(g);
+
return true;
}
/**
- * Handle Mouse_Click events in a browser window.
- *
- * \param pointer details of mouse click
- * \return true if click handled, false otherwise
+ * Handle Mouse_Click events in a browser window. This should never see
+ * Menu clicks, as these will be routed to the menu handlers.
+ *
+ * \param *pointer details of mouse click
+ * \return true if click handled, false otherwise
*/
bool ro_gui_window_click(wimp_pointer *pointer)
{
struct gui_window *g;
os_coord pos;
+
+ /* We should never see Menu clicks. */
+
+ if (pointer->buttons == wimp_CLICK_MENU)
+ return false;
g = (struct gui_window *)ro_gui_wimp_event_get_user_data(pointer->w);
@@ -3566,15 +3745,12 @@
pointer->buttons == wimp_CLICK_ADJUST)
gui_window_place_caret(g, -100, -100, 0);
- if (pointer->buttons == wimp_CLICK_MENU) {
- //ro_gui_menu_create(browser_menu, pointer->pos.x, pointer->pos.y, pointer->w, true);
- } else {
- if (ro_gui_window_to_window_pos(g, pointer->pos.x, pointer->pos.y, &pos))
- browser_window_mouse_click(g->bw,
- ro_gui_mouse_click_state(pointer->buttons,
- wimp_BUTTON_CLICK_DRAG),
- pos.x, pos.y);
- }
+ if (ro_gui_window_to_window_pos(g, pointer->pos.x, pointer->pos.y, &pos))
+ browser_window_mouse_click(g->bw,
+ ro_gui_mouse_click_state(pointer->buttons,
+ wimp_BUTTON_CLICK_DRAG),
+ pos.x, pos.y);
+
return true;
}
@@ -3678,12 +3854,12 @@
switch (c) {
case IS_WIMP_KEY + wimp_KEY_F1: /* Help. */
- return ro_gui_menu_handle_action(g->window,
- HELP_OPEN_CONTENTS, false);
+ ro_gui_open_help_page("documentation/index");
+ return true;
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_F1:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_PAGE_INFO, false);
+ ro_gui_window_action_page_info(g);
+ return true;
case IS_WIMP_KEY + wimp_KEY_F2:
if (!g->toolbar)
@@ -3702,49 +3878,50 @@
case 19: /* Ctrl + S */
case IS_WIMP_KEY + wimp_KEY_F3:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_SAVE, false);
+ ro_gui_window_action_save(g, GUI_SAVE_SOURCE);
+ return true;
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_F3:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_EXPORT_TEXT, false);
+ ro_gui_window_action_save(g, GUI_SAVE_TEXT);
+ return true;
case IS_WIMP_KEY + wimp_KEY_SHIFT + wimp_KEY_F3:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_SAVE_COMPLETE, false);
+ ro_gui_window_action_save(g, GUI_SAVE_COMPLETE);
+ return true;
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_SHIFT +
wimp_KEY_F3:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_EXPORT_DRAW, false);
+ ro_gui_window_action_save(g, GUI_SAVE_DRAW);
+ return true;
case 6: /* Ctrl + F */
case IS_WIMP_KEY + wimp_KEY_F4: /* Search */
- return ro_gui_menu_handle_action(g->window,
- BROWSER_FIND_TEXT, false);
+ ro_gui_window_action_search(g);
+ return true;
case IS_WIMP_KEY + wimp_KEY_F5: /* Reload */
- return ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_RELOAD, false);
+ if (g->bw != NULL)
+ browser_window_reload(g->bw, false);
+ return true;
case 18: /* Ctrl+R (Full reload) */
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_F5:
- /* Full reload */
- return ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_RELOAD_ALL, false);
+ if (g->bw != NULL)
+ browser_window_reload(g->bw, true);
+ return true;
case IS_WIMP_KEY + wimp_KEY_F6: /* Hotlist */
- return ro_gui_menu_handle_action(g->window,
- HOTLIST_SHOW, false);
+ ro_gui_hotlist_open();
+ return true;
case IS_WIMP_KEY + wimp_KEY_F7: /* Show local history */
- return ro_gui_menu_handle_action(g->window,
- HISTORY_SHOW_LOCAL, false);
+ ro_gui_window_action_local_history(g);
+ return true;
case IS_WIMP_KEY + wimp_KEY_CONTROL + wimp_KEY_F7:
/* Show global history */
- return ro_gui_menu_handle_action(g->window,
- HISTORY_SHOW_GLOBAL, false);
+ ro_gui_global_history_open();
+ return true;
case IS_WIMP_KEY + wimp_KEY_F8: /* View source */
ro_gui_view_source(h);
@@ -3765,8 +3942,8 @@
return true;
case IS_WIMP_KEY + wimp_KEY_F11: /* Zoom */
- return ro_gui_menu_handle_action(g->window,
- BROWSER_SCALE_VIEW, false);
+ ro_gui_window_action_zoom(g);
+ return true;
case IS_WIMP_KEY + wimp_KEY_SHIFT + wimp_KEY_F11:
/* Toggle display of box outlines. */
@@ -3787,8 +3964,10 @@
ro_gui_url_complete_start(g);
return true;
}
- return ro_gui_menu_handle_action(g->window,
- BROWSER_NAVIGATE_STOP, false);
+
+ if (g->bw != NULL)
+ browser_window_stop(g->bw);
+ return true;
case 8: /* CTRL+H / Backspace */
if (toolbar)
@@ -3796,8 +3975,8 @@
break;
case 14: /* CTRL+N */
- return ro_gui_menu_handle_action(g->window,
- BROWSER_NEW_WINDOW, false);
+ ro_gui_window_action_new_window(g);
+ return true;
case 17: /* CTRL+Q (Zoom out) */
case 23: /* CTRL+W (Zoom in) */
@@ -3839,8 +4018,8 @@
return true;
case IS_WIMP_KEY + wimp_KEY_PRINT:
- return ro_gui_menu_handle_action(g->window,
- BROWSER_PRINT, false);
+ ro_gui_window_action_print(g);
+ return true;
case IS_WIMP_KEY | wimp_KEY_LEFT:
case IS_WIMP_KEY | wimp_KEY_RIGHT:
@@ -4332,8 +4511,8 @@
ro_gui_status_bar_get_width(gui->status_bar);
}
-
-
+#if 0
+/* \TODO -- This needs to move into the toolbar module. */
/**
* Updates the navigation controls for all toolbars;
@@ -4345,9 +4524,9 @@
struct gui_window *g;
for (g = window_list; g; g = g->next)
- ro_gui_prepare_navigate(g);
-}
-
+ ro_gui_window_update_toolbar_buttons_g(g);
+}
+#endif
/**
* Returns the state of the mouse buttons and modifiers keys for a
12 years, 4 months
r11178 stevef - in /branches/stevef/toolbars/riscos: menus.c window.c
by netsurf@semichrome.net
Author: stevef
Date: Sat Jan 1 14:32:26 2011
New Revision: 11178
URL: http://source.netsurf-browser.org?rev=11178&view=rev
Log:
Continue rationalisation of menu code.
Modified:
branches/stevef/toolbars/riscos/menus.c
branches/stevef/toolbars/riscos/window.c
Modified: branches/stevef/toolbars/riscos/menus.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/menus.c...
==============================================================================
--- branches/stevef/toolbars/riscos/menus.c (original)
+++ branches/stevef/toolbars/riscos/menus.c Sat Jan 1 14:32:26 2011
@@ -98,9 +98,6 @@
struct toolbar **toolbar,
bool *is_cookies, bool *is_hotlist, bool *is_global_history);
static int ro_gui_menu_get_checksum(void);
-static void ro_gui_menu_prepare_pageinfo(struct gui_window *g);
-static void ro_gui_menu_prepare_objectinfo(hlcache_handle *object,
- const char *href);
static bool ro_gui_menu_translate(struct menu_definition *menu);
@@ -267,9 +264,9 @@
*/
void ro_gui_menu_create(wimp_menu *menu, int x, int y, wimp_w w, bool prepare)
{
- struct gui_window *g;
+// struct gui_window *g;
os_error *error;
- os_coord pos;
+// os_coord pos;
int i;
menu_action action;
struct menu_definition *definition;
@@ -311,7 +308,7 @@
}
break;
case CONTENT_TEXTPLAIN:
- /* no object, no url *//*
+ *//* no object, no url *//*
break;
default:
current_menu_object = h;
@@ -674,91 +671,6 @@
/**
- * Prepare the page info window for use
- *
- * \param g the gui_window to set the display icons for
- */
-void ro_gui_menu_prepare_pageinfo(struct gui_window *g)
-{
- hlcache_handle *h = g->bw->current_content;
- char icon_buf[20] = "file_xxx";
- char enc_buf[40];
- char enc_token[10] = "Encoding0";
- const char *icon = icon_buf;
- const char *title, *url, *mime;
- const char *enc = "-";
-
- assert(h);
-
- title = content_get_title(h);
- if (title == NULL)
- title = "-";
- url = content_get_url(h);
- if (url == NULL)
- url = "-";
- mime = content_get_mime_type(h);
- if (mime == NULL)
- mime = "-";
-
- sprintf(icon_buf, "file_%x", ro_content_filetype(h));
- if (!ro_gui_wimp_sprite_exists(icon_buf))
- sprintf(icon_buf, "file_xxx");
-
- if (content_get_type(h) == CONTENT_HTML) {
- if (html_get_encoding(h)) {
- enc_token[8] = '0' + html_get_encoding_source(h);
- snprintf(enc_buf, sizeof enc_buf, "%s (%s)",
- html_get_encoding(h),
- messages_get(enc_token));
- enc = enc_buf;
- } else {
- enc = messages_get("EncodingUnk");
- }
- }
-
- ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_ICON, icon, true);
- ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_TITLE, title, true);
- ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_URL, url, true);
- ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_ENC, enc, true);
- ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_TYPE, mime, true);
-}
-
-
-/**
- * Prepare the object info window for use
- *
- * \param object the object for which information is to be displayed
- * \param href corresponding href, if any
- */
-void ro_gui_menu_prepare_objectinfo(hlcache_handle *object, const char *href)
-{
- char icon_buf[20] = "file_xxx";
- const char *url, *mime;
- const char *target = "-";
-
- sprintf(icon_buf, "file_%.3x",
- ro_content_filetype(object));
- if (!ro_gui_wimp_sprite_exists(icon_buf))
- sprintf(icon_buf, "file_xxx");
-
- url = content_get_url(object);
- if (url == NULL)
- url = "-";
- mime = content_get_mime_type(object);
- if (mime == NULL)
- mime = "-";
-
- if (href)
- target = href;
-
- ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_ICON, icon_buf, true);
- ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_URL, url, true);
- ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_TARGET, target, true);
- ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_TYPE, mime, true);
-}
-
-
-/**
* Display a menu of options for a form select control.
*
* \param bw browser window containing form control
@@ -1245,326 +1157,10 @@
char url[80];
bool is_cookies, is_hotlist, is_global_history;
- ro_gui_menu_get_window_details(owner, &g, &bw, &h, &t,
- &is_cookies, &is_hotlist, &is_global_history);
-
- switch (action) {
-
- /* help actions */
- case HELP_OPEN_CONTENTS:
- ro_gui_open_help_page("documentation/index");
- return true;
- case HELP_OPEN_GUIDE:
- ro_gui_open_help_page("documentation/guide");
- return true;
- case HELP_OPEN_INFORMATION:
- ro_gui_open_help_page("documentation/info");
- return true;
- case HELP_OPEN_ABOUT:
- ro_gui_open_help_page("about/index");
- return true;
- case HELP_LAUNCH_INTERACTIVE:
- if (!ro_gui_interactive_help_available()) {
- ro_gui_interactive_help_start();
- option_interactive_help = true;
- } else {
- option_interactive_help = !option_interactive_help;
- }
- return true;
-
- /* history actions */
- case HISTORY_SHOW_LOCAL:
- if ((!bw) || (!bw->history))
- return false;
- ro_gui_history_open(bw, bw->history,
- windows_at_pointer);
- return true;
- case HISTORY_SHOW_GLOBAL:
- ro_gui_global_history_open();
- return true;
-
- /* hotlist actions */
- case HOTLIST_ADD_URL:
- if (h == NULL || content_get_url(h) == NULL)
- return false;
- hotlist_add_page(content_get_url(h));
- return true;
- case HOTLIST_SHOW:
- ro_gui_hotlist_open();
- return true;
-
- /* cookies actions */
- case COOKIES_SHOW:
- ro_gui_cookies_open();
- return true;
-
- case COOKIES_DELETE:
- cookies_delete_all();
- return true;
-
- /* page actions */
- case BROWSER_PAGE_INFO:
- if (!h)
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window,
- dialog_pageinfo, windows_at_pointer);
- return true;
- case BROWSER_PRINT:
- if (!h)
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window,
- dialog_print, windows_at_pointer);
- return true;
- case BROWSER_NEW_WINDOW:
- if (!h)
- return false;
- browser_window_create(content_get_url(h), bw, 0, false,
- false);
- return true;
- case BROWSER_VIEW_SOURCE:
- if (!h)
- return false;
- ro_gui_view_source(h);
- return true;
-
- /* object actions */
- case BROWSER_OBJECT_INFO:
- if (!current_menu_object)
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window,
- dialog_objinfo, windows_at_pointer);
- return true;
- case BROWSER_OBJECT_RELOAD:
- if (!current_menu_object)
- return false;
- content_invalidate_reuse_data(current_menu_object);
- browser_window_reload(bw, false);
- return true;
-
- /* link actions */
- case BROWSER_LINK_SAVE_URI:
- case BROWSER_LINK_SAVE_URL:
- case BROWSER_LINK_SAVE_TEXT:
- if (!current_menu_url)
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(owner, dialog_saveas,
- windows_at_pointer);
- break;
- case BROWSER_LINK_DOWNLOAD:
- if (!current_menu_url)
- return false;
- browser_window_download(bw, current_menu_url,
- content_get_url(h));
- break;
- case BROWSER_LINK_NEW_WINDOW:
- if (!current_menu_url)
- return false;
- browser_window_create(current_menu_url, bw,
- content_get_url(h), true, false);
- break;
-
- /* save actions */
- case BROWSER_OBJECT_SAVE:
- case BROWSER_OBJECT_EXPORT_SPRITE:
- case BROWSER_OBJECT_EXPORT_DRAW:
- h = current_menu_object;
- /* Fall through */
- case BROWSER_SAVE:
- case BROWSER_SAVE_COMPLETE:
- case BROWSER_EXPORT_DRAW:
- case BROWSER_EXPORT_PDF:
- case BROWSER_EXPORT_TEXT:
- case BROWSER_SAVE_URL_URI:
- case BROWSER_SAVE_URL_URL:
- case BROWSER_SAVE_URL_TEXT:
- if (!h)
- return false;
- /* Fall through */
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(owner, dialog_saveas,
- windows_at_pointer);
- return true;
-
- /* selection actions */
- case BROWSER_SELECTION_SAVE:
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(owner, dialog_saveas,
- windows_at_pointer);
- return true;
- case BROWSER_SELECTION_COPY:
- browser_window_key_press(bw, KEY_COPY_SELECTION);
- break;
- case BROWSER_SELECTION_CUT:
- browser_window_key_press(bw, KEY_CUT_SELECTION);
- return true;
- case BROWSER_SELECTION_PASTE:
- browser_window_key_press(bw, KEY_PASTE);
- return true;
- case BROWSER_SELECTION_ALL:
- browser_window_key_press(bw, KEY_SELECT_ALL);
- break;
- case BROWSER_SELECTION_CLEAR:
- browser_window_key_press(bw, KEY_CLEAR_SELECTION);
- break;
-
- /* navigation actions */
- case BROWSER_NAVIGATE_HOME:
- if (!bw)
- return false;
- if ((option_homepage_url) &&
- (option_homepage_url[0])) {
- browser_window_go(g->bw,
- option_homepage_url, 0, true);
- } else {
- snprintf(url, sizeof url,
- "file:///<NetSurf$Dir>/Docs/welcome/index_%s",
- option_language);
- browser_window_go(g->bw, url, 0, true);
- }
- return true;
- case BROWSER_NAVIGATE_BACK:
- if ((!bw) || (!bw->history))
- return false;
- history_back(bw, bw->history);
- return true;
- case BROWSER_NAVIGATE_FORWARD:
- if ((!bw) || (!bw->history))
- return false;
- history_forward(bw, bw->history);
- return true;
- case BROWSER_NAVIGATE_UP:
- if ((!bw) || (!h))
- return false;
- return ro_gui_window_navigate_up(bw->window,
- content_get_url(h));
- case BROWSER_NAVIGATE_RELOAD:
- case BROWSER_NAVIGATE_RELOAD_ALL:
- if (!bw)
- return false;
- browser_window_reload(bw,
- (action == BROWSER_NAVIGATE_RELOAD_ALL));
- return true;
- case BROWSER_NAVIGATE_STOP:
- if (!bw)
- return false;
- browser_window_stop(bw);
- return true;
-/* case BROWSER_NAVIGATE_URL:
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(NULL, dialog_openurl,
- windows_at_pointer);
- return true;*/
-
- /* browser window/display actions */
- case BROWSER_SCALE_VIEW:
- if (!h)
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window, dialog_zoom,
- windows_at_pointer);
- return true;
- case BROWSER_FIND_TEXT:
- if (!h || (content_get_type(h) != CONTENT_TEXTPLAIN &&
- content_get_type(h) != CONTENT_HTML))
- return false;
- ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window,
- dialog_search, windows_at_pointer);
- return true;
- case BROWSER_IMAGES_BACKGROUND:
- if (!g)
- return false;
- g->option.background_images =
- !g->option.background_images;
- gui_window_redraw_window(g);
- return true;
- case BROWSER_BUFFER_ANIMS:
- if (!g)
- return false;
- g->option.buffer_animations =
- !g->option.buffer_animations;
- break;
- case BROWSER_BUFFER_ALL:
- if (!g)
- return false;
- g->option.buffer_everything =
- !g->option.buffer_everything;
- break;
- case BROWSER_SAVE_VIEW:
- if (!bw)
- return false;
- ro_gui_window_default_options(bw);
- ro_gui_save_options();
- return true;
- case BROWSER_WINDOW_DEFAULT:
- if (!g)
- return false;
- ro_gui_screen_size(&option_window_screen_width,
- &option_window_screen_height);
- state.w = current_menu_window;
- error = xwimp_get_window_state(&state);
- if (error) {
- LOG(("xwimp_get_window_state: 0x%x: %s",
- error->errnum,
- error->errmess));
- warn_user("WimpError", error->errmess);
- }
- option_window_x = state.visible.x0;
- option_window_y = state.visible.y0;
- option_window_width =
- state.visible.x1 - state.visible.x0;
- option_window_height =
- state.visible.y1 - state.visible.y0;
- ro_gui_save_options();
- return true;
- case BROWSER_WINDOW_STAGGER:
- option_window_stagger = !option_window_stagger;
- ro_gui_save_options();
- return true;
- case BROWSER_WINDOW_COPY:
- option_window_size_clone = !option_window_size_clone;
- ro_gui_save_options();
- return true;
- case BROWSER_WINDOW_RESET:
- option_window_screen_width = 0;
- option_window_screen_height = 0;
- ro_gui_save_options();
- return true;
-
- /* toolbar actions */
- case TOOLBAR_BUTTONS:
- assert(t);
- ro_toolbar_set_display_buttons(t,
- ro_toolbar_get_display_buttons(t));
- ro_toolbar_refresh(t);
- return true;
- case TOOLBAR_ADDRESS_BAR:
- assert(t);
- ro_toolbar_set_display_url(t,
- ro_toolbar_get_display_url(t));
- ro_toolbar_refresh(t);
- if (ro_toolbar_get_display_url(t))
- ro_toolbar_take_caret(t);
- return true;
- case TOOLBAR_THROBBER:
- assert(t);
- ro_toolbar_set_display_throbber(t,
- ro_toolbar_get_display_throbber(t));
- ro_toolbar_refresh(t);
- return true;
- case TOOLBAR_EDIT:
- assert(t);
- ro_toolbar_toggle_edit(t);
- return true;
-
- /* unknown action */
- default:
- return false;
- }
+ /* \TODO -- This function used to process menu selections; find all
+ * callers and update them.
+ */
+
return false;
}
@@ -1583,12 +1179,12 @@
struct browser_window *bw;
hlcache_handle *h;
struct toolbar *t;
- bool result = false;
+// bool result = false;
int checksum = 0;
os_error *error;
- char *parent;
- url_func_result res;
- bool compare;
+// char *parent;
+// url_func_result res;
+// bool compare;
bool is_cookies, is_hotlist, is_global_history;
ro_gui_menu_get_window_details(owner, &g, &bw, &h, &t,
@@ -1600,471 +1196,9 @@
current_menu_url = NULL;
}
- switch (action) {
-
- /* help actions */
- case HELP_LAUNCH_INTERACTIVE:
- result = ro_gui_interactive_help_available()
- && option_interactive_help;
- ro_gui_menu_set_entry_ticked(current_menu,
- action, result);
- ro_gui_save_options();
- break;
-
- /* history actions */
- case HISTORY_SHOW_LOCAL:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- (!bw || (!bw->history) ||
- !(h || history_back_available(bw->history) ||
- history_forward_available(bw->history))));
- break;
-
- /* hotlist actions */
- case HOTLIST_ADD_URL:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- h == NULL);
- break;
-
- /* page actions */
- case BROWSER_PAGE:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h ||
- (content_get_type(h) != CONTENT_HTML &&
- content_get_type(h) != CONTENT_TEXTPLAIN));
- break;
- case BROWSER_PAGE_INFO:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((windows) && (h))
- ro_gui_menu_prepare_pageinfo(g);
- break;
- case BROWSER_PRINT:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((t) && (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_PRINT, !h);
- if ((windows) && (h))
- ro_gui_print_prepare(g);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_PRINT, !h);
- break;
- case BROWSER_NEW_WINDOW:
- case BROWSER_VIEW_SOURCE:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- break;
-
- /* object actions */
- case BROWSER_OBJECT:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !current_menu_object &&
- !current_menu_url);
- break;
-
- case BROWSER_OBJECT_LINK:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !current_menu_url);
- break;
-
- case BROWSER_OBJECT_INFO:
- if (windows && current_menu_object)
- ro_gui_menu_prepare_objectinfo(
- current_menu_object,
- current_menu_url);
- /* Fall through */
- case BROWSER_OBJECT_RELOAD:
- case BROWSER_OBJECT_OBJECT:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !current_menu_object);
- break;
-
- case BROWSER_OBJECT_PRINT:
- /* not yet implemented */
- ro_gui_menu_set_entry_shaded(current_menu, action,
- true);
- break;
-
- /* save actions (browser, hotlist, history) */
- case BROWSER_OBJECT_SAVE:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !current_menu_object);
- if (windows && current_menu_object)
- ro_gui_save_prepare(GUI_SAVE_OBJECT_ORIG,
- current_menu_object,
- NULL, NULL, NULL);
- break;
- case BROWSER_OBJECT_EXPORT:
- case BROWSER_OBJECT_EXPORT_SPRITE:
- case BROWSER_OBJECT_EXPORT_DRAW: {
- bool exp_sprite = false;
- bool exp_draw = false;
-
- if (current_menu_object)
- h = current_menu_object;
-
- if (h) {
- switch (content_get_type(h)) {
-/* \todo - this classification should prob be done in content_() */
- /* bitmap types (Sprite export possible) */
-#ifdef WITH_JPEG
- case CONTENT_JPEG:
-#endif
-#ifdef WITH_MNG
- case CONTENT_JNG:
- case CONTENT_MNG:
-#endif
-#ifdef WITH_GIF
- case CONTENT_GIF:
-#endif
-#ifdef WITH_BMP
- case CONTENT_BMP:
- case CONTENT_ICO:
-#endif
-#if defined(WITH_MNG) || defined(WITH_PNG)
- case CONTENT_PNG:
-#endif
-#ifdef WITH_SPRITE
- case CONTENT_SPRITE:
-#endif
- exp_sprite = true;
- break;
-
- /* vector types (Draw export possible) */
-#if defined(WITH_NS_SVG) || defined(WITH_RSVG)
- case CONTENT_SVG:
-#endif
-#ifdef WITH_DRAW
- case CONTENT_DRAW:
-#endif
- exp_draw = true;
- break;
-
- default: break;
- }
- }
-
- switch (action) {
- case BROWSER_OBJECT_EXPORT_SPRITE:
- if (!exp_sprite)
- h = NULL;
- break;
- case BROWSER_OBJECT_EXPORT_DRAW:
- if (!exp_draw)
- h = NULL;
- break;
- default:
- if (!exp_sprite && !exp_draw)
- h = NULL;
- break;
- }
-
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE, h, NULL, NULL, NULL);
- }
- break;
- case BROWSER_LINK_SAVE_URI:
- case BROWSER_LINK_SAVE_URL:
- case BROWSER_LINK_SAVE_TEXT:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !current_menu_url);
- if (windows && current_menu_url) {
- gui_save_type save_type;
- switch (action) {
- case BROWSER_LINK_SAVE_URI:
- save_type = GUI_SAVE_LINK_URI;
- break;
- case BROWSER_LINK_SAVE_URL:
- save_type = GUI_SAVE_LINK_URL;
- break;
- default:
- save_type = GUI_SAVE_LINK_TEXT;
- break;
- }
- ro_gui_save_prepare(save_type, NULL, NULL,
- current_menu_url, NULL);
- }
- break;
-
- case BROWSER_SELECTION:
- /* make menu available if there's anything that /could/
- * be selected */
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !h || (content_get_type(h) != CONTENT_HTML &&
- content_get_type(h) != CONTENT_TEXTPLAIN));
- break;
- case BROWSER_SELECTION_SAVE:
- if (h && (!bw->sel || !selection_defined(bw->sel)))
- h = NULL;
- ro_gui_menu_set_entry_shaded(current_menu, action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_TEXT_SELECTION, NULL, bw->sel, NULL, NULL);
- break;
- case BROWSER_SELECTION_COPY:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !(h && bw->sel && selection_defined(bw->sel)));
- break;
- case BROWSER_SELECTION_CUT:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !(h && bw->sel && selection_defined(bw->sel)
- && !selection_read_only(bw->sel)));
- break;
- case BROWSER_SELECTION_PASTE:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !(h && bw->paste_callback));
- break;
- case BROWSER_SAVE:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_SOURCE, h, NULL, NULL, NULL);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_SAVE, !h);
- break;
- case BROWSER_SAVE_COMPLETE:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_COMPLETE, h, NULL, NULL, NULL);
- break;
- case BROWSER_EXPORT_DRAW:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_DRAW, h, NULL, NULL, NULL);
- break;
- case BROWSER_EXPORT_PDF:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_PDF, h, NULL, NULL, NULL);
- break;
- case BROWSER_EXPORT_TEXT:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_TEXT, h, NULL, NULL, NULL);
- break;
- case BROWSER_OBJECT_SAVE_URL_URI:
- if (h && content_get_type(h) == CONTENT_HTML)
- h = current_menu_object;
- /* Fall through */
- case BROWSER_SAVE_URL_URI:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL,
- NULL,
- content_get_url(h),
- content_get_title(h));
- break;
- case BROWSER_OBJECT_SAVE_URL_URL:
- if (h && content_get_type(h) == CONTENT_HTML)
- h = current_menu_object;
- /* Fall through */
- case BROWSER_SAVE_URL_URL:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL,
- NULL,
- content_get_url(h),
- content_get_title(h));
- break;
- case BROWSER_OBJECT_SAVE_URL_TEXT:
- h = current_menu_object;
- /* Fall through */
- case BROWSER_SAVE_URL_TEXT:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL,
- NULL,
- content_get_url(h),
- content_get_title(h));
- break;
-
- /* navigation actions */
- case BROWSER_NAVIGATE_BACK:
- result = browser_window_back_available(bw);
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !result);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_BACK, !result);
- break;
- case BROWSER_NAVIGATE_FORWARD:
- result = browser_window_forward_available(bw);
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !result);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_FORWARD, !result);
- break;
- case BROWSER_NAVIGATE_UP:
- result = (bw && h);
- if (result) {
- res = url_parent(content_get_url(h), &parent);
- if (res == URL_FUNC_OK) {
- res = url_compare(content_get_url(h),
- parent, false,
- &compare);
- if (res == URL_FUNC_OK)
- result = !compare;
- free(parent);
- } else {
- result = false;
- }
- }
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !result);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_UP, !result);
- break;
- case BROWSER_NAVIGATE_RELOAD:
- case BROWSER_NAVIGATE_RELOAD_ALL:
- result = browser_window_reload_available(bw);
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !result);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_RELOAD, !result);
- break;
- case BROWSER_NAVIGATE_STOP:
- result = browser_window_stop_available(bw);
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !result);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_STOP, !result);
- break;
-/* case BROWSER_NAVIGATE_URL:
- if (windows)
- ro_gui_dialog_prepare_open_url();
- break;*/
-
- /* display actions */
- case BROWSER_SCALE_VIEW:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, !h);
- if ((h) && (windows))
- ro_gui_dialog_prepare_zoom(g);
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_SCALE, !h);
- break;
- case BROWSER_FIND_TEXT:
- result = !h || (content_get_type(h) != CONTENT_HTML &&
- content_get_type(h) != CONTENT_TEXTPLAIN);
- ro_gui_menu_set_entry_shaded(current_menu,
- action, result);
- if ((!result) && (windows)) {
- ro_gui_search_prepare(g->bw);
- }
- if ((t) && (!t->editor) &&
- (t->type == TOOLBAR_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(
- t->toolbar_handle,
- ICON_TOOLBAR_SEARCH, result);
- break;
- case BROWSER_IMAGES_FOREGROUND:
- ro_gui_menu_set_entry_shaded(current_menu,
- action, true);
- ro_gui_menu_set_entry_ticked(current_menu,
- action, true);
- break;
- case BROWSER_IMAGES_BACKGROUND:
- if (g)
- ro_gui_menu_set_entry_ticked(current_menu,
- action, g->option.background_images);
- break;
- case BROWSER_BUFFER_ANIMS:
- if (g) {
- ro_gui_menu_set_entry_shaded(current_menu,
- action, g->option.buffer_everything);
- ro_gui_menu_set_entry_ticked(current_menu,
- action,
- g->option.buffer_animations ||
- g->option.buffer_everything);
- }
- break;
- case BROWSER_BUFFER_ALL:
- if (g)
- ro_gui_menu_set_entry_ticked(current_menu,
- action, g->option.buffer_everything);
- break;
- case BROWSER_WINDOW_STAGGER:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- option_window_screen_width == 0);
- ro_gui_menu_set_entry_ticked(current_menu, action,
- ((option_window_screen_width == 0) ||
- option_window_stagger));
- break;
- case BROWSER_WINDOW_COPY:
- ro_gui_menu_set_entry_ticked(current_menu, action,
- option_window_size_clone);
- break;
- case BROWSER_WINDOW_RESET:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- option_window_screen_width == 0);
- break;
-
- /* tree actions */
- case TREE_SELECTION:
- break;
-
- /* toolbar actions */
- case TOOLBAR_BUTTONS:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- ro_toolbar_menu_option_shade(t));
- ro_gui_menu_set_entry_ticked(current_menu, action,
- ro_toolbar_menu_buttons_tick(t));
- break;
- case TOOLBAR_ADDRESS_BAR:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- ro_toolbar_menu_edit_shade(t));
- ro_gui_menu_set_entry_ticked(current_menu, action,
- ro_toolbar_menu_url_tick(t));
- break;
- case TOOLBAR_THROBBER:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- ro_toolbar_menu_edit_shade(t));
- ro_gui_menu_set_entry_ticked(current_menu, action,
- ro_toolbar_menu_throbber_tick(t));
- break;
- case TOOLBAR_EDIT:
- ro_gui_menu_set_entry_shaded(current_menu, action,
- ro_toolbar_menu_edit_shade(t));
- ro_gui_menu_set_entry_ticked(current_menu, action,
- ro_toolbar_menu_edit_tick(t));
- break;
-
- /* unknown action */
- default:
- return;
- }
+ /* \TODO -- This function used to set up menus; find all callers
+ * and update them.
+ */
/* update open menus */
if ((current_menu_open) &&
Modified: branches/stevef/toolbars/riscos/window.c
URL: http://source.netsurf-browser.org/branches/stevef/toolbars/riscos/window....
==============================================================================
--- branches/stevef/toolbars/riscos/window.c (original)
+++ branches/stevef/toolbars/riscos/window.c Sat Jan 1 14:32:26 2011
@@ -46,9 +46,13 @@
#include "content/urldb.h"
#include "css/css.h"
#include "desktop/browser.h"
+#include "desktop/cookies.h"
#include "desktop/frames.h"
+#include "desktop/history_core.h"
+#include "desktop/hotlist.h"
#include "desktop/mouse.h"
#include "desktop/plotters.h"
+#include "desktop/selection.h"
#include "desktop/textinput.h"
#include "desktop/tree.h"
#include "desktop/gui.h"
@@ -56,10 +60,13 @@
#include "render/form.h"
#include "riscos/bitmap.h"
#include "riscos/buffer.h"
+#include "riscos/cookies.h"
#include "riscos/dialog.h"
#include "riscos/global_history.h"
#include "riscos/gui.h"
#include "riscos/gui/status_bar.h"
+#include "riscos/help.h"
+#include "riscos/hotlist.h"
#include "riscos/menus.h"
#include "riscos/options.h"
#include "riscos/oslib_pre7.h"
@@ -158,6 +165,19 @@
static void ro_gui_window_update_toolbar(void *);
+/* \TODO -- These probably belong in another module. */
+
+static bool ro_gui_window_content_export_types(hlcache_handle *h,
+ bool *export_draw, bool *export_sprite);
+static bool ro_gui_window_up_available(struct browser_window *bw);
+
+
+
+static void ro_gui_window_prepare_pageinfo(struct gui_window *g);
+static void ro_gui_window_prepare_objectinfo(hlcache_handle *object,
+ const char *href);
+
+
struct update_box {
int x0;
int y0;
@@ -192,8 +212,6 @@
void ro_gui_window_initialise(void)
{
- os_error *error;
-
/* Build the browser window menu. */
static const struct ns_menu browser_definition = {
@@ -298,7 +316,7 @@
}
/**
- * Prepare the browser window menu for opening
+ * Prepare the browser window menu for (re-)opening
*
* \param window The window owning the menu.
* \param *menu The menu about to be opened.
@@ -310,42 +328,41 @@
wimp_pointer *pointer)
{
struct gui_window *g;
+ struct browser_window *bw;
hlcache_handle *h;
- os_error *error;
+ struct toolbar *toolbar;
+ bool export_sprite, export_draw;
+// os_error *error;
os_coord pos;
- int i;
- menu_action action;
- struct menu_definition *definition;
+// int i;
+// menu_action action;
+// struct menu_definition *definition;
g = (struct gui_window *) ro_gui_wimp_event_get_user_data(window);
+ bw = g->bw;
+ h = bw->current_content;
+ toolbar = g->toolbar;
/* If this is a new opening, get details of the object under the
* pointer.
*/
if (pointer != NULL) {
-
ro_gui_url_complete_close(g, pointer->i);
- h = g->bw->current_content;
-
- if (!ro_gui_window_to_window_pos(g, pointer->pos.x,
- pointer->pos.y, &pos))
- return;
current_menu_object = NULL;
current_menu_url = NULL;
- if (h) {
+
+ if (h != NULL &&
+ ro_gui_window_to_window_pos(g, pointer->pos.x,
+ pointer->pos.y, &pos)) {
switch (content_get_type(h)) {
case CONTENT_HTML: {
struct box *box;
- box = box_object_at_point(h, pos.x,
- pos.y);
- current_menu_object = box ?
- box->object : NULL;
- box = box_href_at_point(h, pos.x,
- pos.y);
- current_menu_url = box ?
- box->href : NULL;
+ box = box_object_at_point(h, pos.x, pos.y);
+ current_menu_object = box ? box->object : NULL;
+ box = box_href_at_point(h, pos.x, pos.y);
+ current_menu_url = box ? box->href : NULL;
}
break;
case CONTENT_TEXTPLAIN:
@@ -358,30 +375,214 @@
}
}
-
-/* bool selection;
-
- if (menu != cookies_window.menu && menu != tree_toolbar_menu)
+ /* Shade menu entries according to the state of the window and object
+ * under the pointer.
+ */
+
+ /* Toolbar (Sub)Menu */
+
+ ro_gui_menu_set_entry_shaded(menu, TOOLBAR_BUTTONS,
+ ro_toolbar_menu_option_shade(toolbar));
+ ro_gui_menu_set_entry_ticked(menu, TOOLBAR_BUTTONS,
+ ro_toolbar_menu_buttons_tick(toolbar));
+
+ ro_gui_menu_set_entry_shaded(menu, TOOLBAR_ADDRESS_BAR,
+ ro_toolbar_menu_edit_shade(toolbar));
+ ro_gui_menu_set_entry_ticked(menu, TOOLBAR_ADDRESS_BAR,
+ ro_toolbar_menu_url_tick(toolbar));
+
+ ro_gui_menu_set_entry_shaded(menu, TOOLBAR_THROBBER,
+ ro_toolbar_menu_edit_shade(toolbar));
+ ro_gui_menu_set_entry_ticked(menu, TOOLBAR_THROBBER,
+ ro_toolbar_menu_throbber_tick(toolbar));
+
+ ro_gui_menu_set_entry_shaded(menu, TOOLBAR_EDIT,
+ ro_toolbar_menu_edit_shade(toolbar));
+ ro_gui_menu_set_entry_ticked(menu, TOOLBAR_EDIT,
+ ro_toolbar_menu_edit_tick(toolbar));
+
+ if (menu != ro_gui_browser_window_menu)
return;
- if (menu == cookies_window.menu) {
- selection = ro_treeview_has_selection(cookies_window.tv);
-
- ro_gui_menu_set_entry_shaded(cookies_window.menu,
- TREE_SELECTION, !selection);
- ro_gui_menu_set_entry_shaded(cookies_window.menu,
- TREE_CLEAR_SELECTION, !selection);
- }
-
- ro_gui_menu_set_entry_shaded(menu, TOOLBAR_BUTTONS,
- ro_toolbar_menu_option_shade(cookies_window.toolbar));
- ro_gui_menu_set_entry_ticked(menu, TOOLBAR_BUTTONS,
- ro_toolbar_menu_buttons_tick(cookies_window.toolbar));
-
- ro_gui_menu_set_entry_shaded(menu, TOOLBAR_EDIT,
- ro_toolbar_menu_edit_shade(cookies_window.toolbar));
- ro_gui_menu_set_entry_ticked(menu, TOOLBAR_EDIT,
- ro_toolbar_menu_edit_tick(cookies_window.toolbar));*/
+ /* Page Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_PAGE, h == NULL ||
+ (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_PAGE_INFO, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_PRINT, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NEW_WINDOW, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_FIND_TEXT,
+ h == NULL || (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
+
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_VIEW_SOURCE, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SAVE_URL_URI, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SAVE_URL_URL, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SAVE_URL_TEXT, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SAVE, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SAVE_COMPLETE, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_EXPORT_DRAW, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_EXPORT_PDF, h == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_EXPORT_TEXT, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_LINK_SAVE_URI,
+ !current_menu_url);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_LINK_SAVE_URL,
+ !current_menu_url);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_LINK_SAVE_TEXT,
+ !current_menu_url);
+
+
+
+ /* Object Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT,
+ current_menu_object == NULL ||
+ current_menu_url == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_LINK,
+ current_menu_url == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_INFO,
+ current_menu_object == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_RELOAD,
+ current_menu_object == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_OBJECT,
+ current_menu_object == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_PRINT, true);
+ /* Not yet implemented */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_SAVE,
+ current_menu_object == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_SAVE_URL_URI,
+ current_menu_object == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_SAVE_URL_URL,
+ current_menu_object == NULL);
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_SAVE_URL_TEXT,
+ current_menu_object == NULL);
+
+ if (current_menu_object != NULL)
+ ro_gui_window_content_export_types(current_menu_object,
+ &export_draw, &export_sprite);
+ else
+ ro_gui_window_content_export_types(h,
+ &export_draw, &export_sprite);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_EXPORT,
+ (h == NULL && current_menu_object == NULL)
+ || !(export_sprite || export_draw));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_EXPORT_SPRITE,
+ (h == NULL && current_menu_object == NULL)
+ || !export_sprite);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_OBJECT_EXPORT_DRAW,
+ (h == NULL && current_menu_object == NULL)
+ || !export_draw);
+
+
+ /* Selection Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SELECTION,
+ h == NULL || (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
+ /* make menu available if there's anything that /could/
+ * be selected */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SELECTION_SAVE, h == NULL ||
+ bw->sel == NULL || !selection_defined(bw->sel));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SELECTION_COPY, h == NULL ||
+ bw->sel == NULL || !selection_defined(bw->sel));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SELECTION_CUT, h == NULL ||
+ bw->sel == NULL || !selection_defined(bw->sel) ||
+ selection_read_only(bw->sel));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SELECTION_PASTE,
+ h == NULL || bw->paste_callback == NULL);
+
+ /* \TODO -- Wot, no BROWSER_SELECTION_CLEAR? */
+
+
+ /* Navigate Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NAVIGATE_BACK,
+ !browser_window_back_available(bw));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NAVIGATE_FORWARD,
+ !browser_window_forward_available(bw));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NAVIGATE_RELOAD_ALL,
+ !browser_window_reload_available(bw));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NAVIGATE_STOP,
+ !browser_window_stop_available(bw));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_NAVIGATE_UP,
+ !ro_gui_window_up_available(bw));
+
+
+
+ /* View Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_IMAGES_FOREGROUND, true);
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_IMAGES_FOREGROUND, true);
+ /* Not yet implemented. */
+
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_IMAGES_BACKGROUND,
+ g != NULL && g->option.background_images);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_BUFFER_ANIMS,
+ g == NULL || g->option.buffer_everything);
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_BUFFER_ANIMS, g != NULL &&
+ (g->option.buffer_animations ||
+ g->option.buffer_everything));
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_BUFFER_ALL, g == NULL);
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_BUFFER_ALL,
+ g != NULL && g->option.buffer_everything);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_SCALE_VIEW, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_WINDOW_STAGGER,
+ option_window_screen_width == 0);
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_WINDOW_STAGGER,
+ ((option_window_screen_width == 0) ||
+ option_window_stagger));
+
+ ro_gui_menu_set_entry_ticked(menu, BROWSER_WINDOW_COPY,
+ option_window_size_clone);
+
+ ro_gui_menu_set_entry_shaded(menu, BROWSER_WINDOW_RESET,
+ option_window_screen_width == 0);
+
+
+ /* Utilities Submenu */
+
+ ro_gui_menu_set_entry_shaded(menu, HOTLIST_ADD_URL, h == NULL);
+
+ ro_gui_menu_set_entry_shaded(menu, HISTORY_SHOW_LOCAL,
+ (bw == NULL || (bw->history == NULL) ||
+ !(h != NULL || history_back_available(bw->history) ||
+ history_forward_available(bw->history))));
+
+
+ /* Help Submenu */
+
+ ro_gui_menu_set_entry_ticked(menu, HELP_LAUNCH_INTERACTIVE,
+ ro_gui_interactive_help_available() &&
+ option_interactive_help);
}
/**
@@ -396,13 +597,185 @@
void ro_gui_window_menu_warning(wimp_w window, wimp_menu *menu,
wimp_selection *selection, menu_action action)
{
-/* switch (action) {
- case BROWSER_NAVIGATE_URL:
- ro_gui_dialog_prepare_open_url();
+ struct gui_window *g;
+ struct browser_window *bw;
+ hlcache_handle *h;
+ struct toolbar *toolbar;
+// os_error *error;
+// os_coord pos;
+// int i;
+// struct menu_definition *definition;
+ bool export;
+
+ g = (struct gui_window *) ro_gui_wimp_event_get_user_data(window);
+ bw = g->bw;
+ h = bw->current_content;
+ toolbar = g->toolbar;
+
+ switch (action) {
+ case BROWSER_PAGE_INFO:
+ if (h != NULL)
+ ro_gui_window_prepare_pageinfo(g);
break;
+
+ case BROWSER_FIND_TEXT:
+ if (h != NULL && (content_get_type(h) == CONTENT_HTML ||
+ content_get_type(h) == CONTENT_TEXTPLAIN))
+ ro_gui_search_prepare(g->bw);
+ break;
+
+ case BROWSER_SCALE_VIEW:
+ if (h != NULL)
+ ro_gui_dialog_prepare_zoom(g);
+ break;
+
+ case BROWSER_PRINT:
+ if (h != NULL)
+ ro_gui_print_prepare(g);
+ break;
+
+ case BROWSER_OBJECT_INFO:
+ if (current_menu_object != NULL)
+ ro_gui_window_prepare_objectinfo(current_menu_object,
+ current_menu_url);
+ break;
+
+ case BROWSER_OBJECT_SAVE:
+ if (current_menu_object != NULL)
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_ORIG,
+ current_menu_object, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_SELECTION_SAVE:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_TEXT_SELECTION, NULL,
+ bw->sel, NULL, NULL);
+ break;
+
+ case BROWSER_SAVE_URL_URI:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
+ content_get_url(h),
+ content_get_title(h));
+ break;
+
+ case BROWSER_SAVE_URL_URL:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
+ content_get_url(h),
+ content_get_title(h));
+ break;
+
+ case BROWSER_SAVE_URL_TEXT:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
+ content_get_url(h),
+ content_get_title(h));
+ break;
+
+ case BROWSER_OBJECT_SAVE_URL_URI:
+ if (current_menu_object != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
+ content_get_url(current_menu_object),
+ content_get_title(current_menu_object));
+ break;
+
+ case BROWSER_OBJECT_SAVE_URL_URL:
+ if (current_menu_object != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
+ content_get_url(current_menu_object),
+ content_get_title(current_menu_object));
+ break;
+
+ case BROWSER_OBJECT_SAVE_URL_TEXT:
+ if (current_menu_object != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
+ content_get_url(current_menu_object),
+ content_get_title(current_menu_object));
+ break;
+
+ case BROWSER_SAVE:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_SOURCE, h, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_SAVE_COMPLETE:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_COMPLETE, h, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_EXPORT_DRAW:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_DRAW, h, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_EXPORT_PDF:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_PDF, h, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_EXPORT_TEXT:
+ if (h != NULL)
+ ro_gui_save_prepare(GUI_SAVE_TEXT, h, NULL, NULL, NULL);
+ break;
+
+ case BROWSER_LINK_SAVE_URI:
+ if (current_menu_url != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
+ current_menu_url, NULL);
+ break;
+
+ case BROWSER_LINK_SAVE_URL:
+ if (current_menu_url != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
+ current_menu_url, NULL);
+ break;
+
+ case BROWSER_LINK_SAVE_TEXT:
+ if (current_menu_url != NULL)
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
+ current_menu_url, NULL);
+ break;
+
+ case BROWSER_OBJECT_EXPORT_SPRITE:
+ if (current_menu_object != NULL) {
+ ro_gui_window_content_export_types(current_menu_object,
+ NULL, &export);
+
+ if (export)
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ current_menu_object,
+ NULL, NULL, NULL);
+ } else if (h != NULL) {
+ ro_gui_window_content_export_types(h, NULL, &export);
+
+ if (export)
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ h, NULL, NULL, NULL);
+ }
+ break;
+
+ case BROWSER_OBJECT_EXPORT_DRAW:
+ if (current_menu_object != NULL) {
+ ro_gui_window_content_export_types(current_menu_object,
+ &export, NULL);
+
+ if (export)
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ current_menu_object,
+ NULL, NULL, NULL);
+ } else if (h != NULL) {
+ ro_gui_window_content_export_types(h, &export, NULL);
+
+ if (export)
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ h, NULL, NULL, NULL);
+ }
+ break;
+
default:
break;
- }*/
+ }
}
/**
@@ -418,41 +791,409 @@
bool ro_gui_window_menu_select(wimp_w window, wimp_menu *menu,
wimp_selection *selection, menu_action action)
{
-/* switch (action) {
+ struct gui_window *g;
+ struct browser_window *bw;
+ hlcache_handle *h;
+ struct toolbar *toolbar;
+ char url[80];
+ wimp_window_state state;
+ os_error *error;
+// os_coord pos;
+// int i;
+// menu_action action;
+// struct menu_definition *definition;
+
+ g = (struct gui_window *) ro_gui_wimp_event_get_user_data(window);
+ bw = g->bw;
+ h = bw->current_content;
+ toolbar = g->toolbar;
+
+ switch (action) {
+
+ /* help actions */
case HELP_OPEN_CONTENTS:
ro_gui_open_help_page("documentation/index");
- return true;
- case BROWSER_NAVIGATE_URL:
- ro_gui_dialog_prepare_open_url();
- ro_gui_dialog_open_persistent(NULL, dialog_openurl, true);
- return true;
+ break;;
+ case HELP_OPEN_GUIDE:
+ ro_gui_open_help_page("documentation/guide");
+ break;;
+ case HELP_OPEN_INFORMATION:
+ ro_gui_open_help_page("documentation/info");
+ break;;
+ case HELP_OPEN_ABOUT:
+ ro_gui_open_help_page("about/index");
+ break;;
+ case HELP_LAUNCH_INTERACTIVE:
+ if (!ro_gui_interactive_help_available()) {
+ ro_gui_interactive_help_start();
+ option_interactive_help = true;
+ } else {
+ option_interactive_help = !option_interactive_help;
+ }
+ break;;
+
+ /* history actions */
+ case HISTORY_SHOW_LOCAL:
+ if (bw != NULL && bw->history != NULL)
+ ro_gui_history_open(bw, bw->history, false);
+ break;;
+ case HISTORY_SHOW_GLOBAL:
+ ro_gui_global_history_open();
+ break;;
+
+ /* hotlist actions */
+ case HOTLIST_ADD_URL:
+ if (h != NULL && content_get_url(h) != NULL)
+ hotlist_add_page(content_get_url(h));
+ break;;
case HOTLIST_SHOW:
ro_gui_hotlist_open();
- return true;
- case HISTORY_SHOW_GLOBAL:
- ro_gui_global_history_open();
- return true;
+ break;;
+
+ /* cookies actions */
case COOKIES_SHOW:
ro_gui_cookies_open();
- return true;
- case CHOICES_SHOW:
- ro_gui_configure_show();
- return true;
- case APPLICATION_QUIT:
- if (ro_gui_prequit()) {
- LOG(("QUIT in response to user request"));
- netsurf_quit = true;
- }
- return true;
+ break;;
+
+ case COOKIES_DELETE:
+ cookies_delete_all();
+ break;;
+
+ /* page actions */
+ case BROWSER_PAGE_INFO:
+ if (h != NULL) {
+ ro_gui_window_prepare_pageinfo(g);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_pageinfo, false);
+ }
+ break;;
+ case BROWSER_PRINT:
+ if (h != NULL) {
+ ro_gui_print_prepare(g);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_print, false);
+ }
+ break;;
+ case BROWSER_NEW_WINDOW:
+ if (h != NULL)
+ browser_window_create(content_get_url(h), bw, 0,
+ false, false);
+ break;;
+ case BROWSER_VIEW_SOURCE:
+ if (h != NULL)
+ ro_gui_view_source(h);
+ break;;
+
+ /* object actions */
+ case BROWSER_OBJECT_INFO:
+ if (current_menu_object != NULL) {
+ ro_gui_window_prepare_objectinfo(current_menu_object,
+ current_menu_url);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_objinfo, false);
+ }
+ break;;
+ case BROWSER_OBJECT_RELOAD:
+ if (current_menu_object != NULL) {
+ content_invalidate_reuse_data(current_menu_object);
+ browser_window_reload(bw, false);
+ }
+ break;;
+
+ /* link actions */
+ case BROWSER_LINK_SAVE_URI:
+ if (current_menu_url != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI, NULL, NULL,
+ current_menu_url, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_LINK_SAVE_URL:
+ if (current_menu_url != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL, NULL, NULL,
+ current_menu_url, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_LINK_SAVE_TEXT:
+ if (current_menu_url != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, NULL, NULL,
+ current_menu_url, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_LINK_DOWNLOAD:
+ if (current_menu_url != NULL)
+ browser_window_download(bw, current_menu_url,
+ content_get_url(h));
+ break;;
+ case BROWSER_LINK_NEW_WINDOW:
+ if (current_menu_url != NULL)
+ browser_window_create(current_menu_url, bw,
+ content_get_url(h), true, false);
+ break;;
+
+ /* save actions */
+ case BROWSER_OBJECT_SAVE:
+ if (current_menu_object != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_ORIG,
+ current_menu_object, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_OBJECT_EXPORT_SPRITE:
+ if (current_menu_object != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ current_menu_object, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_OBJECT_EXPORT_DRAW:
+ if (current_menu_object != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE,
+ current_menu_object, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SAVE:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_SOURCE,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SAVE_COMPLETE:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_COMPLETE,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_EXPORT_DRAW:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_DRAW,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_EXPORT_PDF:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_PDF,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_EXPORT_TEXT:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_TEXT,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SAVE_URL_URI:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_URI,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SAVE_URL_URL:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_URL,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SAVE_URL_TEXT:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_LINK_TEXT,
+ h, NULL, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+
+ /* selection actions */
+ case BROWSER_SELECTION_SAVE:
+ if (h != NULL) {
+ ro_gui_save_prepare(GUI_SAVE_TEXT_SELECTION, NULL,
+ bw->sel, NULL, NULL);
+ ro_gui_dialog_open_persistent(g->window, dialog_saveas,
+ false);
+ }
+ break;;
+ case BROWSER_SELECTION_COPY:
+ browser_window_key_press(bw, KEY_COPY_SELECTION);
+ break;;
+ case BROWSER_SELECTION_CUT:
+ browser_window_key_press(bw, KEY_CUT_SELECTION);
+ break;;
+ case BROWSER_SELECTION_PASTE:
+ browser_window_key_press(bw, KEY_PASTE);
+ break;;
+ case BROWSER_SELECTION_ALL:
+ browser_window_key_press(bw, KEY_SELECT_ALL);
+ break;;
+ case BROWSER_SELECTION_CLEAR:
+ browser_window_key_press(bw, KEY_CLEAR_SELECTION);
+ break;;
+
+ /* navigation actions */
+ case BROWSER_NAVIGATE_HOME:
+ if (bw != NULL) {
+ if ((option_homepage_url) &&
+ (option_homepage_url[0])) {
+ browser_window_go(g->bw,
+ option_homepage_url, 0, true);
+ } else {
+ snprintf(url, sizeof url,
+ "file:///<NetSurf$Dir>/Docs/welcome/index_%s",
+ option_language);
+ browser_window_go(g->bw, url, 0, true);
+ }
+ }
+ break;;
+ case BROWSER_NAVIGATE_BACK:
+ if (bw != NULL && bw->history != NULL)
+ history_back(bw, bw->history);
+ break;;
+ case BROWSER_NAVIGATE_FORWARD:
+ if (bw != NULL && bw->history != NULL)
+ history_forward(bw, bw->history);
+ break;;
+ case BROWSER_NAVIGATE_UP:
+ if (bw != NULL && h != NULL)
+ ro_gui_window_navigate_up(bw->window,
+ content_get_url(h));
+ break;;
+ case BROWSER_NAVIGATE_RELOAD_ALL:
+ if (bw != NULL)
+ browser_window_reload(bw,
+ (action == BROWSER_NAVIGATE_RELOAD_ALL));
+ break;;
+ case BROWSER_NAVIGATE_STOP:
+ if (bw != NULL)
+ browser_window_stop(bw);
+ break;;
+
+ /* browser window/display actions */
+ case BROWSER_SCALE_VIEW:
+ if (h != NULL) {
+ ro_gui_dialog_prepare_zoom(g);
+ ro_gui_dialog_open_persistent(g->window, dialog_zoom,
+ false);
+ }
+ break;;
+ case BROWSER_FIND_TEXT:
+ if (h != NULL && (content_get_type(h) == CONTENT_HTML ||
+ content_get_type(h) == CONTENT_TEXTPLAIN)) {
+ ro_gui_search_prepare(g->bw);
+ ro_gui_dialog_open_persistent(g->window, dialog_search,
+ false);
+ }
+ break;;
+ case BROWSER_IMAGES_BACKGROUND:
+ if (g != NULL) {
+ g->option.background_images =
+ !g->option.background_images;
+ gui_window_redraw_window(g);
+ }
+ break;;
+ case BROWSER_BUFFER_ANIMS:
+ if (g != NULL)
+ g->option.buffer_animations =
+ !g->option.buffer_animations;
+ break;;
+ case BROWSER_BUFFER_ALL:
+ if (g != NULL)
+ g->option.buffer_everything =
+ !g->option.buffer_everything;
+ break;;
+ case BROWSER_SAVE_VIEW:
+ if (bw != NULL) {
+ ro_gui_window_default_options(bw);
+ ro_gui_save_options();
+ }
+ break;;
+ case BROWSER_WINDOW_DEFAULT:
+ if (g != NULL) {
+ ro_gui_screen_size(&option_window_screen_width,
+ &option_window_screen_height);
+ state.w = window;
+ error = xwimp_get_window_state(&state);
+ if (error) {
+ LOG(("xwimp_get_window_state: 0x%x: %s",
+ error->errnum,
+ error->errmess));
+ warn_user("WimpError", error->errmess);
+ }
+ option_window_x = state.visible.x0;
+ option_window_y = state.visible.y0;
+ option_window_width =
+ state.visible.x1 - state.visible.x0;
+ option_window_height =
+ state.visible.y1 - state.visible.y0;
+ ro_gui_save_options();
+ }
+ break;;
+ case BROWSER_WINDOW_STAGGER:
+ option_window_stagger = !option_window_stagger;
+ ro_gui_save_options();
+ break;;
+ case BROWSER_WINDOW_COPY:
+ option_window_size_clone = !option_window_size_clone;
+ ro_gui_save_options();
+ break;;
+ case BROWSER_WINDOW_RESET:
+ option_window_screen_width = 0;
+ option_window_screen_height = 0;
+ ro_gui_save_options();
+ break;;
+
+ /* toolbar actions */
+ case TOOLBAR_BUTTONS:
+ assert(toolbar);
+ ro_toolbar_set_display_buttons(toolbar,
+ ro_toolbar_get_display_buttons(toolbar));
+ ro_toolbar_refresh(toolbar);
+ break;;
+ case TOOLBAR_ADDRESS_BAR:
+ assert(toolbar);
+ ro_toolbar_set_display_url(toolbar,
+ ro_toolbar_get_display_url(toolbar));
+ ro_toolbar_refresh(toolbar);
+ if (ro_toolbar_get_display_url(toolbar))
+ ro_toolbar_take_caret(toolbar);
+ break;;
+ case TOOLBAR_THROBBER:
+ assert(toolbar);
+ ro_toolbar_set_display_throbber(toolbar,
+ ro_toolbar_get_display_throbber(toolbar));
+ ro_toolbar_refresh(toolbar);
+ break;;
+ case TOOLBAR_EDIT:
+ assert(toolbar);
+ ro_toolbar_toggle_edit(toolbar);
+ break;;
+
default:
return false;
}
-*/
-
-// for the time being, pretend we've handled things!
+
return true;
-
-// return false;
}
@@ -470,16 +1211,250 @@
-
-
-
-
-
-
-
-
-
-
+/**
+ * Return boolean flags to show what RISC OS types we can sensibly convert
+ * the given object into.
+ *
+ * \TODO -- This should probably be somewhere else but in window.c, and
+ * should probably even be done in content_().
+ *
+ * \param *h The object to test.
+ * \param *export_draw true on exit if a drawfile would be possible.
+ * \param *export_sprite true on exit if a sprite would be possible.
+ * \return true if valid data is returned; else false.
+ */
+
+bool ro_gui_window_content_export_types(hlcache_handle *h,
+ bool *export_draw, bool *export_sprite)
+{
+ bool found_type = false;
+
+ *export_draw = false;
+ *export_sprite = false;
+
+ if (h != NULL) {
+ switch (content_get_type(h)) {
+ /* bitmap types (Sprite export possible) */
+#ifdef WITH_JPEG
+ case CONTENT_JPEG:
+#endif
+#ifdef WITH_MNG
+ case CONTENT_JNG:
+ case CONTENT_MNG:
+#endif
+#ifdef WITH_GIF
+ case CONTENT_GIF:
+#endif
+#ifdef WITH_BMP
+ case CONTENT_BMP:
+ case CONTENT_ICO:
+#endif
+#if defined(WITH_MNG) || defined(WITH_PNG)
+ case CONTENT_PNG:
+#endif
+#ifdef WITH_SPRITE
+ case CONTENT_SPRITE:
+#endif
+ found_type = true;
+ if (export_sprite != NULL)
+ *export_sprite = true;
+ break;
+
+ /* vector types (Draw export possible) */
+#if defined(WITH_NS_SVG) || defined(WITH_RSVG)
+ case CONTENT_SVG:
+#endif
+#ifdef WITH_DRAW
+ case CONTENT_DRAW:
+#endif
+ found_type = true;
+ if (export_draw != NULL)
+ *export_draw = true;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return found_type;
+}
+
+
+/**
+ * Return true if a browser window can navigate upwards.
+ *
+ * \TODO -- This should probably be somewhere else but in window.c.
+ *
+ * \param *bw the browser window to test.
+ * \return true if navigation up is possible; else false.
+ */
+
+bool ro_gui_window_up_available(struct browser_window *bw)
+{
+ bool result = false, compare;
+ char *parent;
+ url_func_result res;
+
+ if (bw != NULL && bw->current_content != NULL) {
+ res = url_parent(content_get_url(bw->current_content), &parent);
+
+ if (res == URL_FUNC_OK) {
+ res = url_compare(content_get_url(bw->current_content),
+ parent, false, &compare);
+ if (res == URL_FUNC_OK)
+ result = !compare;
+ free(parent);
+ } else {
+ result = false;
+ }
+ }
+
+ return result;
+}
+
+
+/**
+ * Prepare the page info window for use.
+ *
+ * \param *g The GUI window block to use.
+ */
+
+void ro_gui_window_prepare_pageinfo(struct gui_window *g)
+{
+ hlcache_handle *h = g->bw->current_content;
+ char icon_buf[20] = "file_xxx";
+ char enc_buf[40];
+ char enc_token[10] = "Encoding0";
+ const char *icon = icon_buf;
+ const char *title, *url, *mime;
+ const char *enc = "-";
+
+ assert(h);
+
+ title = content_get_title(h);
+ if (title == NULL)
+ title = "-";
+ url = content_get_url(h);
+ if (url == NULL)
+ url = "-";
+ mime = content_get_mime_type(h);
+ if (mime == NULL)
+ mime = "-";
+
+ sprintf(icon_buf, "file_%x", ro_content_filetype(h));
+ if (!ro_gui_wimp_sprite_exists(icon_buf))
+ sprintf(icon_buf, "file_xxx");
+
+ if (content_get_type(h) == CONTENT_HTML) {
+ if (html_get_encoding(h)) {
+ enc_token[8] = '0' + html_get_encoding_source(h);
+ snprintf(enc_buf, sizeof enc_buf, "%s (%s)",
+ html_get_encoding(h),
+ messages_get(enc_token));
+ enc = enc_buf;
+ } else {
+ enc = messages_get("EncodingUnk");
+ }
+ }
+
+ ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_ICON,
+ icon, true);
+ ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_TITLE,
+ title, true);
+ ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_URL,
+ url, true);
+ ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_ENC,
+ enc, true);
+ ro_gui_set_icon_string(dialog_pageinfo, ICON_PAGEINFO_TYPE,
+ mime, true);
+}
+
+
+/**
+ * Prepare the object info window for use
+ *
+ * \param *object the object for which information is to be displayed
+ * \param *href corresponding href, if any
+ */
+void ro_gui_window_prepare_objectinfo(hlcache_handle *object, const char *href)
+{
+ char icon_buf[20] = "file_xxx";
+ const char *url, *mime;
+ const char *target = "-";
+
+ sprintf(icon_buf, "file_%.3x",
+ ro_content_filetype(object));
+ if (!ro_gui_wimp_sprite_exists(icon_buf))
+ sprintf(icon_buf, "file_xxx");
+
+ url = content_get_url(object);
+ if (url == NULL)
+ url = "-";
+ mime = content_get_mime_type(object);
+ if (mime == NULL)
+ mime = "-";
+
+ if (href)
+ target = href;
+
+ ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_ICON,
+ icon_buf, true);
+ ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_URL,
+ url, true);
+ ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_TARGET,
+ target, true);
+ ro_gui_set_icon_string(dialog_objinfo, ICON_OBJINFO_TYPE,
+ mime, true);
+}
+
+
+/**
+ * This is just a placeholder for code we need to reinstate.
+ */
+
+#if 0
+void gui_window_update_toolbar(void)
+{
+
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_RELOAD,
+ !browser_window_reload_available(bw));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_STOP,
+ !browser_window_stop_available(bw));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_BACK,
+ !browser_window_back_available(bw));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_FORWARD,
+ !browser_window_forward_available(bw));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_UP,
+ !ro_gui_window_up_available(bw));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SEARCH,
+ h == NULL || (content_get_type(h) != CONTENT_HTML &&
+ content_get_type(h) != CONTENT_TEXTPLAIN));
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SCALE,
+ h == NULL);
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_PRINT,
+ h == NULL);
+
+ ro_gui_set_icon_shaded_state(t->toolbar_handle, ICON_TOOLBAR_SAVE,
+ h == NULL);
+
+}
+#endif
+
+
+
+
+/* \TODO -- Beyond this point is old code: reorder the file into a logical
+ * sequence once the new structure is all in place.
+ */
@@ -696,7 +1671,7 @@
ro_gui_wimp_event_register_keypress(g->window, ro_gui_window_keypress);
ro_gui_wimp_event_register_mouse_click(g->window, ro_gui_window_click);
ro_gui_wimp_event_register_window_menu(g->window,
- ro_gui_browser_window_menu, NULL,
+ ro_gui_browser_window_menu, ro_gui_window_menu_prepare,
ro_gui_window_menu_select, NULL,
ro_gui_window_menu_warning, true);
12 years, 4 months
r11177 tlsa - /trunk/libcss/src/select/select.c
by netsurf@semichrome.net
Author: tlsa
Date: Sat Jan 1 05:58:22 2011
New Revision: 11177
URL: http://source.netsurf-browser.org?rev=11177&view=rev
Log:
When selecting for a node's pseudo elements, only match rules which apply to the pseudo element, and not the raw node as well.
Modified:
trunk/libcss/src/select/select.c
Modified: trunk/libcss/src/select/select.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/select.c?rev=11...
==============================================================================
--- trunk/libcss/src/select/select.c (original)
+++ trunk/libcss/src/select/select.c Sat Jan 1 05:58:22 2011
@@ -68,7 +68,7 @@
bool *match);
static css_error match_detail(css_select_ctx *ctx, void *node,
const css_selector_detail *detail, css_select_state *state,
- bool *match);
+ bool *match, bool *match_pseudo_element);
static css_error cascade_style(const css_style *style, css_select_state *state);
#ifdef DEBUG_CHAIN_MATCHING
@@ -1061,6 +1061,7 @@
bool *match)
{
css_error error;
+ bool match_pseudo_element = false;
/* We match by default (if there are no details than the element
* selector, then we must match) */
@@ -1073,7 +1074,8 @@
* can be avoided unless absolutely necessary)? */
do {
- error = match_detail(ctx, node, detail, state, match);
+ error = match_detail(ctx, node, detail, state, match,
+ &match_pseudo_element);
if (error != CSS_OK)
return error;
@@ -1087,12 +1089,19 @@
detail = NULL;
} while (detail != NULL);
+ /* If we're selecting for a pseudo element and the selector chain did
+ * not match the pseudo element, it's not a match; reject the selector
+ * chain */
+ if (state->pseudo_element != CSS_PSEUDO_ELEMENT_NONE &&
+ match_pseudo_element == false)
+ *match = false;
+
return CSS_OK;
}
css_error match_detail(css_select_ctx *ctx, void *node,
const css_selector_detail *detail, css_select_state *state,
- bool *match)
+ bool *match, bool *match_pseudo_element)
{
css_error error = CSS_OK;
@@ -1141,21 +1150,25 @@
case CSS_SELECTOR_PSEUDO_ELEMENT:
if (detail->name == state->first_line &&
state->pseudo_element ==
- CSS_PSEUDO_ELEMENT_FIRST_LINE)
+ CSS_PSEUDO_ELEMENT_FIRST_LINE) {
*match = true;
- else if (detail->name == state->first_letter &&
+ *match_pseudo_element = true;
+ } else if (detail->name == state->first_letter &&
state->pseudo_element ==
- CSS_PSEUDO_ELEMENT_FIRST_LETTER)
+ CSS_PSEUDO_ELEMENT_FIRST_LETTER) {
*match = true;
- else if (detail->name == state->before &&
+ *match_pseudo_element = true;
+ } else if (detail->name == state->before &&
state->pseudo_element ==
- CSS_PSEUDO_ELEMENT_BEFORE)
+ CSS_PSEUDO_ELEMENT_BEFORE) {
*match = true;
- else if (detail->name == state->after &&
+ *match_pseudo_element = true;
+ } else if (detail->name == state->after &&
state->pseudo_element ==
- CSS_PSEUDO_ELEMENT_AFTER)
+ CSS_PSEUDO_ELEMENT_AFTER) {
*match = true;
- else
+ *match_pseudo_element = true;
+ } else
*match = false;
break;
case CSS_SELECTOR_ATTRIBUTE:
12 years, 4 months