From d21447d096a320a08b3efb2b8768fad0dcdcfd64 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 5 May 2016 22:28:51 +0100 Subject: move frontends into sub directory --- frontends/riscos/iconbar.c | 261 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 frontends/riscos/iconbar.c (limited to 'frontends/riscos/iconbar.c') diff --git a/frontends/riscos/iconbar.c b/frontends/riscos/iconbar.c new file mode 100644 index 000000000..9cff116a1 --- /dev/null +++ b/frontends/riscos/iconbar.c @@ -0,0 +1,261 @@ +/* + * Copyright 2010 Stephen Fryatt + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** \file + * Iconbar icon and menus (implementation). + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils/nsoption.h" +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/nsurl.h" +#include "desktop/browser.h" + +#include "riscos/gui.h" +#include "riscos/configure.h" +#include "riscos/cookies.h" +#include "riscos/dialog.h" +#include "riscos/global_history.h" +#include "riscos/hotlist.h" +#include "riscos/iconbar.h" +#include "riscos/wimp_event.h" + +static bool ro_gui_iconbar_click(wimp_pointer *pointer); + +static bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action); +static void ro_gui_iconbar_menu_warning(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action); + + +static wimp_menu *ro_gui_iconbar_menu = NULL; /**< Iconbar menu handle */ + +/** + * Initialise the iconbar menus, create an icon and register the necessary + * handlers to look after them all. + */ + +void ro_gui_iconbar_initialise(void) +{ + os_error *error; + + /* Build the iconbar menu */ + + static const struct ns_menu iconbar_definition = { + "NetSurf", { + { "Info", NO_ACTION, &dialog_info }, + { "AppHelpNoShortcut", HELP_OPEN_CONTENTS, 0 }, + { "Open", BROWSER_NAVIGATE_URL, 0 }, + { "Open.OpenURL", BROWSER_NAVIGATE_URL, &dialog_openurl }, + { "Open.HotlistShowNoShortcut", HOTLIST_SHOW, 0 }, + { "Open.HistGlobalNoShortcut", HISTORY_SHOW_GLOBAL, 0 }, + { "Open.ShowCookies", COOKIES_SHOW, 0 }, + { "Choices", CHOICES_SHOW, 0 }, + { "Quit", APPLICATION_QUIT, 0 }, + {NULL, 0, 0} + } + }; + ro_gui_iconbar_menu = ro_gui_menu_define_menu(&iconbar_definition); + + /* Create an iconbar icon. */ + + wimp_icon_create icon = { + wimp_ICON_BAR_RIGHT, + { { 0, 0, 68, 68 }, + wimp_ICON_SPRITE | wimp_ICON_HCENTRED | wimp_ICON_VCENTRED | + (wimp_BUTTON_CLICK << wimp_ICON_BUTTON_TYPE_SHIFT), + { "!netsurf" } } }; + error = xwimp_create_icon(&icon, 0); + if (error) { + LOG("xwimp_create_icon: 0x%x: %s", error->errnum, error->errmess); + die(error->errmess); + } + + /* Register handlers to look after clicks and menu actions. */ + + ro_gui_wimp_event_register_mouse_click(wimp_ICON_BAR, + ro_gui_iconbar_click); + + ro_gui_wimp_event_register_menu(wimp_ICON_BAR, ro_gui_iconbar_menu, + true, true); + ro_gui_wimp_event_register_menu_selection(wimp_ICON_BAR, + ro_gui_iconbar_menu_select); + ro_gui_wimp_event_register_menu_warning(wimp_ICON_BAR, + ro_gui_iconbar_menu_warning); +} + + +/** + * Handle Mouse_Click events on the iconbar icon. + * + * \param *pointer The wimp event block to be processed. + * \return true if the event was handled; else false. + */ + +bool ro_gui_iconbar_click(wimp_pointer *pointer) +{ + int key_down = 0; + nsurl *url; + nserror error; + + switch (pointer->buttons) { + case wimp_CLICK_SELECT: + if (nsoption_charp(homepage_url) != NULL) { + error = nsurl_create(nsoption_charp(homepage_url), &url); + } else { + error = nsurl_create(NETSURF_HOMEPAGE, &url); + } + + /* create an initial browser window */ + if (error == NSERROR_OK) { + error = browser_window_create(BW_CREATE_HISTORY, + url, + NULL, + NULL, + NULL); + nsurl_unref(url); + } + if (error != NSERROR_OK) { + ro_warn_user(messages_get_errorcode(error), 0); + } + break; + + case wimp_CLICK_ADJUST: + xosbyte1(osbyte_SCAN_KEYBOARD, 0 ^ 0x80, 0, &key_down); + if (key_down == 0) + ro_gui_hotlist_open(); + break; + } + + return true; +} + +/** + * Handle submenu warnings for the iconbar menu + * + * \param w The window owning the menu. + * \param i The icon owning the menu. + * \param *menu The menu to which the warning applies. + * \param *selection The wimp menu selection data. + * \param action The selected menu action. + */ + +void ro_gui_iconbar_menu_warning(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action) +{ + if (w != wimp_ICON_BAR || i != wimp_ICON_WINDOW) + return; + + switch (action) { + case BROWSER_NAVIGATE_URL: + ro_gui_dialog_prepare_open_url(); + break; + default: + break; + } +} + +/** + * Handle selections from the iconbar menu + * + * \param w The window owning the menu. + * \param i The icon owning the menu. + * \param menu The wimp menu + * \param selection The wimp menu selection data. + * \param action The selected menu action. + * \return true if action accepted; else false. + */ + +bool ro_gui_iconbar_menu_select(wimp_w w, wimp_i i, wimp_menu *menu, + wimp_selection *selection, menu_action action) +{ + nsurl *url; + nserror error; + + if (w != wimp_ICON_BAR || i != wimp_ICON_WINDOW) + return false; + + switch (action) { + case HELP_OPEN_CONTENTS: + error = nsurl_create("http://www.netsurf-browser.org/documentation/", &url); + if (error == NSERROR_OK) { + error = browser_window_create(BW_CREATE_HISTORY, + url, + NULL, + NULL, + NULL); + nsurl_unref(url); + } + if (error != NSERROR_OK) { + ro_warn_user(messages_get_errorcode(error), 0); + } + return true; + + case BROWSER_NAVIGATE_URL: + ro_gui_dialog_prepare_open_url(); + ro_gui_dialog_open_persistent(NULL, dialog_openurl, true); + return true; + case HOTLIST_SHOW: + ro_gui_hotlist_open(); + return true; + case HISTORY_SHOW_GLOBAL: + ro_gui_global_history_open(); + return true; + 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"); + riscos_done = true; + } + return true; + default: + return false; + } + + return false; +} + +/** + * Check if a particular menu handle is the iconbar menu + * + * \param *menu The menu in question. + * \return true if this menu is the iconbar menu + */ + +bool ro_gui_iconbar_check_menu(wimp_menu *menu) +{ + return (ro_gui_iconbar_menu == menu) ? true : false; +} + -- cgit v1.2.3