/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
/* */
/* hot.c --- bookmarks dialogs
   Created: Terry Weissman <terry@netscape.com>, 20-Jul-95.
 */


#include "mozilla.h"
#include "xfe.h"
#include "bkmks.h" 

extern MWContext *fe_getBookmarkContext();

Boolean
fe_SaveBookmarks (void)
{
  if (fe_getBookmarkContext()) 
    if (BM_SaveBookmarks(fe_getBookmarkContext(), NULL) < 0)
      return False;
  return True;
}

void
fe_AddToBookmark (MWContext *context, const char *title, URL_Struct *url,
		  time_t time)
{
  BM_Entry *bm;
  const char *new_title;
  MWContext *bmcontext = NULL;


  if (!title || !*title) new_title = url->address;
  else new_title = title;
  bm = (BM_Entry*) BM_NewUrl(new_title, url->address, NULL, time);

  bmcontext = fe_getBookmarkContext();
  BM_AppendToHeader (bmcontext, BM_GetAddHeader(bmcontext), bm);
}

void
fe_AddBookmarkCallback (Widget widget, XtPointer closure, XtPointer call_data)
{
  MWContext *context = (MWContext *) closure;
  History_entry *h = SHIST_GetCurrent (&context->hist);
  BM_Entry *bm;
  MWContext *bmcontext = NULL;
  char *new_title;

  if (!h) return;

  if (!h->title || !*h->title) new_title = h->address;
  else new_title = h->title;
  bm = (BM_Entry*)BM_NewUrl( new_title, h->address, NULL, h->last_access);

  fe_UserActivity (context);

  bmcontext = fe_getBookmarkContext();
  BM_AppendToHeader (bmcontext, BM_GetAddHeader(bmcontext), bm);
}

void
fe_DestroyWidgetTree(Widget *widgets, int n)
{
    int i;
    Widget *morekids = NULL;
    int nmorekids = 0;
    Widget submenu = 0;

    if (n <= 0) return;

    for (i = n-1; i >= 0; i--) {
		XtVaGetValues (widgets[i], XmNsubMenuId, &submenu, 0);
		if (submenu) {
			XtVaGetValues (widgets[i], XmNchildren, &morekids,
						   XmNnumChildren, &nmorekids, 0);
			if(nmorekids > 0) {
				fe_DestroyWidgetTree (morekids, nmorekids);
			}
		}
		XtDestroyWidget (widgets[i]);
    }
}
