summaryrefslogtreecommitdiff
path: root/riscos
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2004-07-11 23:14:24 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2004-07-11 23:14:24 +0000
commiteb8f6921f5b529bbd05a82ed8e3cd846d19f1af4 (patch)
treee90a2a07a92b841727d5a1ee4c09af0e929e94c6 /riscos
parent6e3995cc6552f7ca4c97d330b89ee27ac84191b0 (diff)
downloadnetsurf-eb8f6921f5b529bbd05a82ed8e3cd846d19f1af4.tar.gz
netsurf-eb8f6921f5b529bbd05a82ed8e3cd846d19f1af4.tar.bz2
[project @ 2004-07-11 23:14:24 by rjw]
Hotlist folder/entry creation. svn path=/import/netsurf/; revision=1072
Diffstat (limited to 'riscos')
-rw-r--r--riscos/dialog.c14
-rw-r--r--riscos/gui.h2
-rw-r--r--riscos/hotlist.c111
3 files changed, 124 insertions, 3 deletions
diff --git a/riscos/dialog.c b/riscos/dialog.c
index aaeed4e89..395bbcdc7 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -303,12 +303,20 @@ void ro_gui_dialog_close_persistant(wimp_w parent) {
bool ro_gui_dialog_keypress(wimp_key *key)
{
-
+ wimp_pointer pointer;
if (key->c == wimp_KEY_ESCAPE) {
ro_gui_dialog_close(key->w);
return true;
}
-
+ if (key->c == wimp_KEY_RETURN) {
+ if ((key->w == dialog_folder) || (key->w == dialog_entry)) {
+ pointer.w = key->w;
+ pointer.i = (key->w == dialog_folder) ? 3 : 5;
+ pointer.buttons = wimp_CLICK_SELECT;
+ ro_gui_hotlist_dialog_click(&pointer);
+ return true;
+ }
+ }
#ifdef WITH_AUTH
if (key->w == dialog_401li)
return ro_gui_401login_keypress(key);
@@ -343,6 +351,8 @@ void ro_gui_dialog_click(wimp_pointer *pointer)
ro_gui_dialog_click_zoom(pointer);
else if (pointer->w == dialog_warning)
ro_gui_dialog_click_warning(pointer);
+ else if ((pointer->w == dialog_folder) || (pointer->w == dialog_entry))
+ ro_gui_hotlist_dialog_click(pointer);
}
diff --git a/riscos/gui.h b/riscos/gui.h
index d081782ad..0127f5a2a 100644
--- a/riscos/gui.h
+++ b/riscos/gui.h
@@ -199,7 +199,6 @@ void ro_gui_hotlist_move_drag_end(wimp_dragged *drag);
bool ro_gui_hotlist_keypress(int key);
void ro_gui_hotlist_menu_closed(void);
void ro_gui_hotlist_toolbar_click(wimp_pointer* pointer);
-
int ro_gui_hotlist_get_selected(bool folders);
void ro_gui_hotlist_reset_statistics(void);
void ro_gui_hotlist_set_selected(bool selected);
@@ -208,6 +207,7 @@ void ro_gui_hotlist_delete_selected(void);
void ro_gui_hotlist_save_as(const char *file);
void ro_gui_hotlist_prepare_folder_dialog(bool selected);
void ro_gui_hotlist_prepare_entry_dialog(bool selected);
+void ro_gui_hotlist_dialog_click(wimp_pointer *pointer);
/* in save.c */
void ro_gui_save_open(gui_save_type save_type, struct content *c,
diff --git a/riscos/hotlist.c b/riscos/hotlist.c
index c74e5a857..243b5a184 100644
--- a/riscos/hotlist.c
+++ b/riscos/hotlist.c
@@ -282,6 +282,10 @@ void ro_gui_hotlist_init(void) {
*/
title = messages_get("Hotlist");
new_title = malloc(strlen(title + 1));
+ if (!new_title) {
+ warn_user("NoMemory", 0);
+ return;
+ }
strcpy(new_title, title);
hotlist_window_definition.title_data.indirected_text.text = new_title;
hotlist_window_definition.title_data.indirected_text.validation = null_text_string;
@@ -2244,3 +2248,110 @@ void ro_gui_hotlist_delete_selected(void) {
ro_gui_hotlist_delete_entry(entry, false);
}
}
+
+void ro_gui_hotlist_dialog_click(wimp_pointer *pointer) {
+ struct hotlist_entry *entry = NULL;
+ char *title = NULL;
+ char *url = NULL;
+ char *old_value;
+ int icon = pointer->i;
+ int close_icon, ok_icon;
+ bool folder;
+ bool add;
+
+ /* Get our data
+ */
+ if (pointer->w == dialog_entry) {
+ title = strip(ro_gui_get_icon_string(pointer->w, 1));
+ url = strip(ro_gui_get_icon_string(pointer->w, 3));
+ close_icon = 4;
+ ok_icon = 5;
+ folder = false;
+ add = !dialog_entry_add;
+ } else {
+ title = strip(ro_gui_get_icon_string(pointer->w, 1));
+ close_icon = 2;
+ ok_icon = 3;
+ folder = true;
+ add = !dialog_folder_add;
+ }
+
+ /* Check for cancelling
+ */
+ if (icon == close_icon) {
+ if (pointer->buttons == wimp_CLICK_SELECT) {
+ ro_gui_dialog_close(pointer->w);
+ xwimp_create_menu((wimp_menu *)-1, 0, 0);
+ return;
+ }
+ if (folder) {
+ ro_gui_hotlist_prepare_folder_dialog(dialog_folder_add);
+ } else {
+ ro_gui_hotlist_prepare_entry_dialog(dialog_entry_add);
+ }
+ return;
+ }
+
+ /* Check for ok
+ */
+ if (icon != ok_icon) return;
+
+ /* Check we have valid values
+ */
+ if ((title != NULL) && (strlen(title) == 0)) {
+ warn_user("NoNameError", 0);
+ return;
+ }
+ if ((url != NULL) && (strlen(url) == 0)) {
+ warn_user("NoURLError", 0);
+ return;
+ }
+
+ /* Update/insert our data
+ */
+ if (add) {
+ /* todo: insert at the selection place if hotlist_insert is set */
+ ro_gui_hotlist_create_entry(title, url, folder ? 0 : 0xfaf, &root);
+ } else {
+ entry = ro_gui_hotlist_first_selection(root.child_entry);
+ if (entry == NULL) return;
+ if (url) {
+ old_value = entry->url;
+ entry->url = url_normalize(url);
+ if (!entry->url) {
+ warn_user("NoMemory", 0);
+ entry->url = old_value;
+ return;
+ }
+ if (old_value) free(old_value);
+ }
+ if (title) {
+ old_value = entry->title;
+ entry->title = malloc(strlen(title) + 1);
+ if (!entry->title) {
+ warn_user("NoMemory", 0);
+ entry->title = old_value;
+ return;
+ }
+ strcpy(entry->title, title);
+ if (old_value) free(old_value);
+ }
+ ro_gui_hotlist_update_entry_size(entry);
+ }
+
+ /* Close if we should
+ */
+ if (pointer->buttons == wimp_CLICK_SELECT) {
+ ro_gui_dialog_close(pointer->w);
+ xwimp_create_menu((wimp_menu *)-1, 0, 0);
+ return;
+ }
+
+ /* Update our display
+ */
+ if (folder) {
+ ro_gui_hotlist_prepare_folder_dialog(dialog_folder_add);
+ } else {
+ ro_gui_hotlist_prepare_entry_dialog(dialog_entry_add);
+ }
+}