Author: greg.ercolano
Date: 2010-12-19 23:48:59 -0800 (Sun, 19 Dec 2010)
New Revision: 8068
Log:
Added new tab_nav() control for Fl_Multiline_Input tab navigation behavior.
New default behavior is what most users expect; hitting Tab navigates over the 
widget.
Fl_Input modified to support the new flag.



Modified:
   branches/branch-1.3/FL/Fl_Input_.H
   branches/branch-1.3/FL/Fl_Multiline_Input.H
   branches/branch-1.3/src/Fl_Input.cxx
   branches/branch-1.3/src/Fl_Input_.cxx

Modified: branches/branch-1.3/FL/Fl_Input_.H
===================================================================
--- branches/branch-1.3/FL/Fl_Input_.H  2010-12-20 06:42:38 UTC (rev 8067)
+++ branches/branch-1.3/FL/Fl_Input_.H  2010-12-20 07:48:59 UTC (rev 8068)
@@ -120,6 +120,11 @@
       \p mark_, no text is selected */
   int mark_;
 
+  /** \internal Behavior of Tab key in multiline input widget. 
+      If enabled (default) Tab causes focus nav, otherwise Tab is inserted 
+      as a character. */
+  int tab_nav_;
+
   /** \internal Offset to text origin within widget bounds */
   int xscroll_, yscroll_;
 
@@ -446,6 +451,43 @@
   void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
                          else type((uchar)(type() & ~FL_INPUT_WRAP)); }
 
+  /**
+    Sets whether the Tab key does focus navigation, 
+    or inserts tab characters into Fl_Multiline_Input.
+
+    By default this flag is enabled to provide the 'normal' behavior 
+    most users expect; Tab navigates focus to the next widget. 
+    To inserting an actual Tab character, users can use Ctrl-I
+    or copy/paste.
+
+    Disabling this flag gives the old FLTK behavior where Tab
+    inserts a tab character into the text field, in which case
+    only the mouse can be used to navigate to the next field.
+
+    History: This flag was provided for backwards support of FLTK's old 1.1.x
+    behavior where Tab inserts a tab character instead of navigating 
+    focus to the next widget. This behavior was unique to Fl_Multiline_Input. 
+    With the advent of Fl_Text_Editor, this old behavior has been deprecated.
+
+    \param [in] val If \p val is 1, Tab advances focus (default).<BR>
+                    If \p val is 0, Tab inserts a tab character (old FLTK 
behavior).
+  */
+  void tab_nav(int val) {
+    tab_nav_ = val;
+  }
+
+  /**
+    Gets whether the Tab key causes focus navigation in multiline input fields 
or not.
+
+    If enabled (default), hitting Tab causes focus navigation to the next 
widget.
+
+    If disabled, hitting Tab inserts a tab character into the text field.
+    \returns 1 if Tab advances focus (default), 0 if Tab inserts tab 
characters.
+    \see tab_nav(int)
+  */
+  int tab_nav() const {
+    return tab_nav_;
+  }
 };
 
 #endif 

Modified: branches/branch-1.3/FL/Fl_Multiline_Input.H
===================================================================
--- branches/branch-1.3/FL/Fl_Multiline_Input.H 2010-12-20 06:42:38 UTC (rev 
8067)
+++ branches/branch-1.3/FL/Fl_Multiline_Input.H 2010-12-20 07:48:59 UTC (rev 
8068)
@@ -46,6 +46,11 @@
   If you are presenting large amounts of text and need scrollbars
   or full color control of characters, you probably want Fl_Text_Editor
   instead.
+
+  In FLTK 1.3.x, the default behavior of the 'Tab' key was changed
+  to support consistent focus navigation. To get the older FLTK 1.1.x
+  behavior, set Fl_Input_::tab_nav() to 0. Newer programs should consider using
+  Fl_Text_Editor.
 */
 class FL_EXPORT Fl_Multiline_Input : public Fl_Input {
 public:

Modified: branches/branch-1.3/src/Fl_Input.cxx
===================================================================
--- branches/branch-1.3/src/Fl_Input.cxx        2010-12-20 06:42:38 UTC (rev 
8067)
+++ branches/branch-1.3/src/Fl_Input.cxx        2010-12-20 07:48:59 UTC (rev 
8068)
@@ -538,7 +538,7 @@
       // tab handled as a normal insertable character.
       //
       if (mods==0 && !shift            // Tab?
-          //// PROPOSED && !tab_nav()  // old tab behavior enabled?
+          && !tab_nav()                // old tab behavior enabled?
           && multiline) {              // multiline input?
         break;                         // insert tab character
       }
@@ -614,7 +614,7 @@
       //
       if (Fl::event_key() == FL_Tab                    // Tab key?
           && !Fl::event_state(FL_SHIFT)                        // no shift?
-          //// PROPOSED && !tab_nav()                  // with tab navigation 
disabled?
+          && !tab_nav()                                        // with tab 
navigation disabled?
          && input_type() == FL_MULTILINE_INPUT         // with a multiline 
input?
           && (mark()==0 && position()==size())) {      // while entire field 
selected?
         // Set cursor to the end of the selection...

Modified: branches/branch-1.3/src/Fl_Input_.cxx
===================================================================
--- branches/branch-1.3/src/Fl_Input_.cxx       2010-12-20 06:42:38 UTC (rev 
8067)
+++ branches/branch-1.3/src/Fl_Input_.cxx       2010-12-20 07:48:59 UTC (rev 
8068)
@@ -1059,6 +1059,7 @@
   maximum_size_ = 32767;
   shortcut_ = 0;
   set_flag(SHORTCUT_LABEL);
+  tab_nav(1);
 }
 
 /**

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to