]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - form/fld_current.c
ncurses 6.2 - patch 20200425
[ncurses.git] / form / fld_current.c
index 7c3a90af511d97a1c0fddacbf6236ad493183ca2..75e68edd1c5576ee2c69265f24ebec088552cf34 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2003,2004 Free Software Foundation, Inc.              *
+ * Copyright 2020 Thomas E. Dickey                                          *
+ * Copyright 1998-2010,2016 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -32,7 +33,7 @@
 
 #include "form.priv.h"
 
-MODULE_ID("$Id: fld_current.c,v 1.11 2004/12/25 22:40:13 tom Exp $")
+MODULE_ID("$Id: fld_current.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnform
@@ -52,7 +53,7 @@ set_current_field(FORM *form, FIELD *field)
 {
   int err = E_OK;
 
-  T((T_CALLED("set_current_field(%p,%p)"), form, field));
+  T((T_CALLED("set_current_field(%p,%p)"), (void *)form, (void *)field));
   if (form == 0 || field == 0)
     {
       RETURN(E_BAD_ARGUMENT);
@@ -76,7 +77,7 @@ set_current_field(FORM *form, FIELD *field)
        {
          if (form->current != field)
            {
-             if (!_nc_Internal_Validation(form))
+             if (form->current && !_nc_Internal_Validation(form))
                {
                  err = E_INVALID_FIELD;
                }
@@ -102,6 +103,32 @@ set_current_field(FORM *form, FIELD *field)
   RETURN(err);
 }
 
+/*---------------------------------------------------------------------------
+|   Facility      :  libnform
+|   Function      :  int unfocus_current_field(FORM * form)
+|
+|   Description   :  Removes focus from the current field.
+|
+|   Return Values :  E_OK              - success
+|                    E_BAD_ARGUMENT    - invalid form pointer
+|                    E_REQUEST_DENIED  - there is no current field to unfocus
++--------------------------------------------------------------------------*/
+NCURSES_EXPORT(int)
+unfocus_current_field(FORM *const form)
+{
+  T((T_CALLED("unfocus_current_field(%p)"), (const void *)form));
+  if (form == 0)
+    {
+      RETURN(E_BAD_ARGUMENT);
+    }
+  else if (form->current == 0)
+    {
+      RETURN(E_REQUEST_DENIED);
+    }
+  _nc_Unset_Current_Field(form);
+  RETURN(E_OK);
+}
+
 /*---------------------------------------------------------------------------
 |   Facility      :  libnform
 |   Function      :  FIELD *current_field(const FORM * form)
@@ -113,7 +140,7 @@ set_current_field(FORM *form, FIELD *field)
 NCURSES_EXPORT(FIELD *)
 current_field(const FORM *form)
 {
-  T((T_CALLED("current_field(%p)"), form));
+  T((T_CALLED("current_field(%p)"), (const void *)form));
   returnField(Normalize_Form(form)->current);
 }
 
@@ -130,7 +157,7 @@ current_field(const FORM *form)
 NCURSES_EXPORT(int)
 field_index(const FIELD *field)
 {
-  T((T_CALLED("field_index(%p)"), field));
+  T((T_CALLED("field_index(%p)"), (const void *)field));
   returnCode((field != 0 && field->form != 0) ? (int)field->index : -1);
 }