mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-03-13 10:33:21 +03:00
Add support for external hotlist utilities.
svn path=/trunk/netsurf/; revision=13022
This commit is contained in:
parent
d21bdf16fc
commit
17cf5fab71
@ -239,6 +239,7 @@ static ns_wimp_message_list task_messages = {
|
||||
message_PRINT_SAVE,
|
||||
message_PRINT_ERROR,
|
||||
message_PRINT_TYPE_ODD,
|
||||
message_HOTLIST_CHANGED,
|
||||
0
|
||||
}
|
||||
};
|
||||
@ -1436,7 +1437,9 @@ void ro_gui_user_message(wimp_event_no event, wimp_message *message)
|
||||
case message_PRINT_TYPE_ODD:
|
||||
ro_print_type_odd(message);
|
||||
break;
|
||||
|
||||
case message_HOTLIST_CHANGED:
|
||||
ro_gui_hotlist_add_cleanup();
|
||||
break;
|
||||
case message_QUIT:
|
||||
netsurf_quit = true;
|
||||
break;
|
||||
|
127
riscos/hotlist.c
127
riscos/hotlist.c
@ -28,6 +28,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include "oslib/osfile.h"
|
||||
#include "oslib/osmodule.h"
|
||||
#include "oslib/wimp.h"
|
||||
#include "content/content.h"
|
||||
#include "content/hlcache.h"
|
||||
@ -37,6 +38,7 @@
|
||||
#include "riscos/dialog.h"
|
||||
#include "riscos/hotlist.h"
|
||||
#include "riscos/menus.h"
|
||||
#include "riscos/message.h"
|
||||
#include "riscos/options.h"
|
||||
#include "riscos/save.h"
|
||||
#include "riscos/toolbar.h"
|
||||
@ -57,6 +59,7 @@ static void ro_gui_hotlist_menu_warning(wimp_w w, wimp_i i, wimp_menu *menu,
|
||||
static bool ro_gui_hotlist_menu_select(wimp_w w, wimp_i i, wimp_menu *menu,
|
||||
wimp_selection *selection, menu_action action);
|
||||
static void ro_gui_hotlist_toolbar_click(button_bar_action action);
|
||||
static void ro_gui_hotlist_addurl_bounce(wimp_message *message);
|
||||
|
||||
struct ro_treeview_callbacks ro_hotlist_treeview_callbacks = {
|
||||
ro_gui_hotlist_toolbar_click,
|
||||
@ -64,13 +67,29 @@ struct ro_treeview_callbacks ro_hotlist_treeview_callbacks = {
|
||||
ro_gui_hotlist_toolbar_save_buttons
|
||||
};
|
||||
|
||||
/* Hotlist Protocol Message Blocks, which are currently not in OSLib. */
|
||||
|
||||
struct ro_hotlist_message_hotlist_addurl {
|
||||
wimp_MESSAGE_HEADER_MEMBERS /**< The standard message header. */
|
||||
char *url; /**< Pointer to the URL in RMA. */
|
||||
char *title; /**< Pointer to the title in RMA. */
|
||||
char appname[32]; /**< The application name. */
|
||||
};
|
||||
|
||||
struct ro_hotlist_message_hotlist_changed {
|
||||
wimp_MESSAGE_HEADER_MEMBERS /**< The standard message header. */
|
||||
};
|
||||
|
||||
static char *hotlist_url = NULL; /**< URL area claimed from RMA. */
|
||||
static char *hotlist_title = NULL; /**< Title area claimed from RMA. */
|
||||
|
||||
/* The RISC OS hotlist window, toolbar and treeview data. */
|
||||
|
||||
static struct ro_hotlist {
|
||||
wimp_w window; /*< The hotlist RO window handle. */
|
||||
struct toolbar *toolbar; /*< The hotlist toolbar handle. */
|
||||
ro_treeview *tv; /*< The hotlist treeview handle. */
|
||||
wimp_menu *menu; /*< The hotlist window menu. */
|
||||
wimp_w window; /**< The hotlist RO window handle. */
|
||||
struct toolbar *toolbar; /**< The hotlist toolbar handle. */
|
||||
ro_treeview *tv; /**< The hotlist treeview handle. */
|
||||
wimp_menu *menu; /**< The hotlist window menu. */
|
||||
} hotlist_window;
|
||||
|
||||
/**
|
||||
@ -420,6 +439,106 @@ bool ro_gui_hotlist_check_menu(wimp_menu *menu)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a URL to the hotlist. This will be passed on to the core hotlist, then
|
||||
* Message_HotlistAddURL will broadcast to any bookmark applications via the
|
||||
* Hotlist Protocol.
|
||||
*
|
||||
* \param *url The URL to be added.
|
||||
*/
|
||||
|
||||
void ro_gui_hotlist_add_page(const char *url)
|
||||
{
|
||||
const struct url_data *data;
|
||||
wimp_message message;
|
||||
struct ro_hotlist_message_hotlist_addurl *add_url =
|
||||
(struct ro_hotlist_message_hotlist_addurl *) &message;
|
||||
|
||||
if (url == NULL)
|
||||
return;
|
||||
|
||||
/* First pass the page to NetSurf's own hotlist. */
|
||||
|
||||
hotlist_add_page(url);
|
||||
|
||||
/* Then pass it on to any helper applications that might be
|
||||
* interested.
|
||||
*
|
||||
* The RMA storage is freed on receipt of a Message_HotlistChanged or
|
||||
* a bounce from Message_HotlistAddURL. Some clients don't seem to
|
||||
* bother sending back a Message_HotlistChanged, so in this case the
|
||||
* strings are left in situ in RMA and cleared the next time we need
|
||||
* to send a message.
|
||||
*/
|
||||
|
||||
if (hotlist_url != NULL || hotlist_title != NULL)
|
||||
ro_gui_hotlist_add_cleanup();
|
||||
|
||||
if (!option_external_hotlists)
|
||||
return;
|
||||
|
||||
data = urldb_get_url_data(url);
|
||||
if (data == NULL)
|
||||
return;
|
||||
|
||||
hotlist_url = osmodule_alloc(strlen(url) + 1);
|
||||
hotlist_title = osmodule_alloc(strlen(data->title) + 1);
|
||||
|
||||
if (hotlist_url == NULL || hotlist_title == NULL) {
|
||||
ro_gui_hotlist_add_cleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy(hotlist_url, url);
|
||||
strcpy(hotlist_title, data->title);
|
||||
|
||||
add_url->size = 60;
|
||||
add_url->your_ref = 0;
|
||||
add_url->action = message_HOTLIST_ADD_URL;
|
||||
add_url->url = hotlist_url;
|
||||
add_url->title = hotlist_title;
|
||||
strcpy(add_url->appname, "NetSurf");
|
||||
|
||||
if (!ro_message_send_message(wimp_USER_MESSAGE_RECORDED, &message, 0,
|
||||
ro_gui_hotlist_addurl_bounce))
|
||||
ro_gui_hotlist_add_cleanup();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle bounced Message_HotlistAddURL, so that RMA storage can be freed.
|
||||
*
|
||||
* \param *message The bounced message content.
|
||||
*/
|
||||
|
||||
static void ro_gui_hotlist_addurl_bounce(wimp_message *message)
|
||||
{
|
||||
LOG(("Hotlist AddURL Bounced"));
|
||||
ro_gui_hotlist_add_cleanup();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clean up RMA storage used by the Message_HotlistAddURL protocol.
|
||||
*/
|
||||
|
||||
void ro_gui_hotlist_add_cleanup(void)
|
||||
{
|
||||
LOG(("Clean up RMA"));
|
||||
|
||||
if (hotlist_url != NULL) {
|
||||
osmodule_free(hotlist_url);
|
||||
hotlist_url = NULL;
|
||||
}
|
||||
|
||||
if (hotlist_title != NULL) {
|
||||
osmodule_free(hotlist_title);
|
||||
hotlist_title = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* Handle URL dropped on hotlist
|
||||
|
@ -24,6 +24,16 @@
|
||||
#ifndef _NETSURF_RISCOS_HOTLIST_H_
|
||||
#define _NETSURF_RISCOS_HOTLIST_H_
|
||||
|
||||
/* Hotlist Protocol Messages, which are currently not in OSLib. */
|
||||
|
||||
#ifndef message_HOTLIST_ADD_URL
|
||||
#define message_HOTLIST_ADD_URL 0x4af81
|
||||
#endif
|
||||
|
||||
#ifndef message_HOTLIST_CHANGED
|
||||
#define message_HOTLIST_CHANGED 0x4af82
|
||||
#endif
|
||||
|
||||
#include "riscos/menus.h"
|
||||
|
||||
void ro_gui_hotlist_preinitialise(void);
|
||||
@ -32,6 +42,8 @@ void ro_gui_hotlist_open(void);
|
||||
void ro_gui_hotlist_save(void);
|
||||
bool ro_gui_hotlist_check_window(wimp_w window);
|
||||
bool ro_gui_hotlist_check_menu(wimp_menu *menu);
|
||||
void ro_gui_hotlist_add_page(const char *url);
|
||||
void ro_gui_hotlist_add_cleanup(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -64,6 +64,7 @@ extern char *option_theme_path;
|
||||
extern char *option_theme_save;
|
||||
extern bool option_thumbnail_iconise;
|
||||
extern bool option_interactive_help;
|
||||
extern bool option_external_hotlists;
|
||||
|
||||
#define EXTRA_OPTION_DEFINE \
|
||||
bool option_use_mouse_gestures = false;\
|
||||
@ -101,7 +102,8 @@ char *option_recent_save = 0; \
|
||||
char *option_theme_path = 0; \
|
||||
char *option_theme_save = 0; \
|
||||
bool option_thumbnail_iconise = true; \
|
||||
bool option_interactive_help = true;
|
||||
bool option_interactive_help = true; \
|
||||
bool option_external_hotlists = true;
|
||||
|
||||
#define EXTRA_OPTION_TABLE \
|
||||
{ "use_mouse_gestures", OPTION_BOOL, &option_use_mouse_gestures },\
|
||||
@ -139,6 +141,7 @@ bool option_interactive_help = true;
|
||||
{ "theme_path", OPTION_STRING, &option_theme_path }, \
|
||||
{ "theme_save", OPTION_STRING, &option_theme_save }, \
|
||||
{ "thumbnail_iconise", OPTION_BOOL, &option_thumbnail_iconise }, \
|
||||
{ "interactive_help", OPTION_BOOL, &option_interactive_help }
|
||||
{ "interactive_help", OPTION_BOOL, &option_interactive_help }, \
|
||||
{ "external_hotlists", OPTION_BOOL, &option_external_hotlists }
|
||||
|
||||
#endif
|
||||
|
@ -3964,7 +3964,7 @@ void ro_gui_window_action_add_bookmark(struct gui_window *g)
|
||||
content_get_url(g->bw->current_content) == NULL)
|
||||
return;
|
||||
|
||||
hotlist_add_page(nsurl_access(content_get_url(g->bw->current_content)));
|
||||
ro_gui_hotlist_add_page(nsurl_access(content_get_url(g->bw->current_content)));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user