Browse Source

Clean up keyboard focus navigation.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
424b1b9b8f
6 changed files with 28 additions and 14 deletions
  1. +7
    -7
      FL/Fl_Sometimes_Input.H
  2. +2
    -1
      FL/test_press.C
  3. +6
    -0
      Timeline/Sequence.C
  4. +10
    -4
      Timeline/Timeline.C
  5. +1
    -0
      Timeline/Timeline.H
  6. +2
    -2
      Timeline/Track.C

+ 7
- 7
FL/Fl_Sometimes_Input.H View File

@@ -22,23 +22,23 @@
/* Just like an Fl_Input, except that when not being edited it
* displays just like a label. */

#include <FL/Fl.H>

class Fl_Sometimes_Input : public Fl_Input
{

bool _editing;

public:

Fl_Sometimes_Input ( int X, int Y, int W, int H, const char *L=0 )
: Fl_Input( X, Y, W, H, L )
{
_editing = false;
clear_visible_focus();
}

virtual void
draw ( void )
{
if ( _editing )
if ( this == Fl::focus() )
Fl_Input::draw();
else
{
@@ -56,15 +56,15 @@ public:
switch ( m )
{
case FL_FOCUS:
_editing = true;
redraw();
return 1;
case FL_PUSH:
_editing = true;
set_visible_focus();
take_focus();
clear_visible_focus();
redraw();
return r;
case FL_UNFOCUS:
_editing = false;

if ( window() )
window()->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() );


+ 2
- 1
FL/test_press.C View File

@@ -28,7 +28,8 @@
int
test_press ( unsigned long e )
{
((char *)Fl::event_text())[0] = '\0';
if ( Fl::event_text()[0] )
((char *)Fl::event_text())[0] = '\0';

if ( ! ( e & FL_SHIFT ) )
return Fl::test_shortcut( e ) && ! Fl::event_shift();


+ 6
- 0
Timeline/Sequence.C View File

@@ -57,6 +57,8 @@ Sequence::init ( void )
box( FL_DOWN_BOX );
color( FL_BACKGROUND_COLOR );
align( FL_ALIGN_LEFT );

// clear_visible_focus();
}

Sequence::~Sequence ( )
@@ -284,6 +286,10 @@ Sequence::handle ( int m )

switch ( m )
{
case FL_KEYBOARD:
/* this is a hack to override FLTK's use of arrow keys for
* focus navigation */
return timeline->handle_scroll( m );
case FL_NO_EVENT:
/* garbage from overlay window */
return 0;


+ 10
- 4
Timeline/Timeline.C View File

@@ -950,6 +950,13 @@ Timeline::track_under ( int Y )
#include "FL/event_name.H"
#include "FL/test_press.H"

/** give the scrollbars a shot at events */
int
Timeline::handle_scroll ( int m )
{
return hscroll->handle( m ) || vscroll->handle( m );
}

int
Timeline::handle ( int m )
{
@@ -959,8 +966,7 @@ Timeline::handle ( int m )
/* if ( m != FL_NO_EVENT ) */
/* DMESSAGE( "%s", event_name( m ) ); */


int r = Fl_Overlay_Window::handle( m );
/* int r = Fl_Overlay_Window::handle( m ); */

switch ( m )
{
@@ -1001,7 +1007,7 @@ Timeline::handle ( int m )
/* keep scrollbar from eating these. */
return 0;
default:
return r;
return Fl_Overlay_Window::handle( m );
}

return 0;
@@ -1014,7 +1020,7 @@ Timeline::handle ( int m )

//Fl::focus( this );

/* r = Fl_Overlay_Window::handle( m ); */
int r = Fl_Overlay_Window::handle( m );

if ( m != FL_RELEASE && r )
return r;


+ 1
- 0
Timeline/Timeline.H View File

@@ -171,6 +171,7 @@ public:

void draw ( void );
void draw_overlay ( void );
int handle_scroll ( int m );
int handle ( int m );
static void update_cb ( void *arg );



+ 2
- 2
Timeline/Track.C View File

@@ -124,6 +124,8 @@ Track::init ( void )

labeltype( FL_NO_LABEL );

// clear_visible_focus();

Fl_Group::size( timeline->w(), height() );

Track *o = this;
@@ -500,8 +502,6 @@ Track::handle ( int m )
}
case FL_PUSH:
{
Fl::event_key( 0 );

Logger log( this );

int X = Fl::event_x();


Loading…
Cancel
Save