Your code looks good.
Could it be that you are not running the message loop with an
AcceleratorHandler instance? (you did not include the code that does
that)
The AcceleratorHandler deals with accelerator but is also intercepting
tab key messages to handle tab traversal.

Something like:
AcceleratorHandler accelerator_handler;
MessageLoopForUI::current()->Run(&accelerator_handler);
should do the trick.

Jay

On Fri, Sep 11, 2009 at 6:53 PM, Daniel Cowx <[email protected]> wrote:
>
> I'm trying to create a simple dialog box following the exam at
> http://dev.chromium.org/developers/design-documents/views-windowing.
> Note that I'm using views as in a standalone app (I'm not embedding
> this dialog in Chromium).
>
> I've added 2 views::Textfields to WindowView, but I can't seem to tab
> between them. When I press the tab key, it simply inserts a tab into
> the editbox.
>
> Here is what I have:
>
> <snip>
> #pragma once
>
> #include "views/controls/textfield/textfield.h"
> #include "views/view.h"
> #include "views/window/dialog_delegate.h"
>
> namespace views {
> class Label;
> class Textfield;
> }
>
> class WindowView : public views::View,
>                   public views::DialogDelegate,
>                   public views::Textfield::Controller {
>  public:
>  WindowView();
>  ~WindowView();
>
>  // Overridden from views::View:
>  virtual void Paint(gfx::Canvas* canvas);
>  virtual void Layout();
>  virtual gfx::Size GetPreferredSize();
>
>  // Overridden from views::DialogDelegate:
>  virtual std::wstring GetWindowTitle() const { return L"Demo"; }
>  virtual bool CanResize() const { return true; }
>  virtual bool CanMaximize() const { return true; }
>  virtual views::View* GetContentsView() { return this; }
>  virtual int GetDialogButtons() const { return
> MessageBoxFlags::DIALOGBUTTON_OK; }
>  // Return the view that you want to have initially focused
>  virtual views::View* GetInitiallyFocusedView();
>  private:
>
>  // Overridden from views::Textfield::Controller:
>  virtual void ContentsChanged(views::Textfield* sender,
>                               const std::wstring& new_contents);
>  virtual bool HandleKeystroke(views::Textfield* sender,
>                               const views::Textfield::Keystroke&
> keystroke);
>
>  views::Label* label1_;
>  views::Textfield* textbox1_;
>  views::Label* label2_;
>  views::Textfield* textbox2_;
>
>  DISALLOW_COPY_AND_ASSIGN(WindowView);
> };
> </snip>
>
> <snip>
>
> #include "kreofusion/misc/context_menu_demo/window_view.h"
>
> #include "app/gfx/canvas.h"
> #include "base/message_loop.h"
> #include "views/controls/label.h"
> #include "views/standard_layout.h"
> #include "views/widget/root_view.h"
>
> WindowView::WindowView()
>  : label1_(new views::Label(L"Textbox 1")),
>    textbox1_(new views::Textfield()),
>    label2_(new views::Label(L"Textbox 2")),
>    textbox2_(new views::Textfield()) {
>  textbox1_->SetController(this);
>  textbox2_->SetController(this);
>  AddChildView(label1_);
>  AddChildView(textbox1_);
>  AddChildView(label2_);
>  AddChildView(textbox2_);
> }
>
> WindowView::~WindowView() {
>  MessageLoop::current()->Quit();
> }
>
> void WindowView::Paint(gfx::Canvas* canvas) {
>  views::View::Paint(canvas);
> }
>
> void WindowView::Layout() {
>  const gfx::Rect lb = bounds();
>  if (lb.IsEmpty())
>    return;
>  gfx::Size ps = label1_->GetPreferredSize();
>  int y = kButtonVEdgeMargin;
>  label1_->SetBounds(kButtonHEdgeMargin, y, ps.width(), ps.height());
>  y += ps.height() + kRelatedControlSmallVerticalSpacing;
>  ps = textbox1_->GetPreferredSize();
>  textbox1_->SetBounds(kButtonHEdgeMargin, y, lb.width() -
> 2*kButtonHEdgeMargin, ps.height());
>
>  y += ps.height() + kUnrelatedControlVerticalSpacing;
>  ps = label2_->GetPreferredSize();
>  label2_->SetBounds(kButtonHEdgeMargin, y, ps.width(), ps.height());
>  y += ps.height() + kRelatedControlSmallVerticalSpacing;
>  ps = textbox2_->GetPreferredSize();
>  textbox2_->SetBounds(kButtonHEdgeMargin, y, lb.width() -
> 2*kButtonHEdgeMargin, ps.height());
> }
>
> gfx::Size WindowView::GetPreferredSize() {
>  gfx::Size ps = label1_->GetPreferredSize();
>  ps.set_width(ps.width() + 200);
>  ps.set_height(ps.height() + 200);
>  return ps;
> }
>
> views::View* WindowView::GetInitiallyFocusedView() {
>  return textbox2_;
> }
>
> ////////////////////////////////////////////////////////////////////////////////
> // WindowView, private:
>
> void WindowView::ContentsChanged(views::Textfield* sender,
>                                 const std::wstring& new_contents)
> {
> }
>
> bool WindowView::HandleKeystroke(views::Textfield* sender,
>                                 const views::Textfield::Keystroke&
> keystroke) {
>  return false;
> }
> </snip>
>
> What am I doing wrong?
> >
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: [email protected] 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to