1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_GTK_FOCUS_STORE_GTK_H_
6#define CHROME_BROWSER_UI_GTK_FOCUS_STORE_GTK_H_
7#pragma once
8
9#include "base/basictypes.h"
10
11typedef struct _GtkWidget GtkWidget;
12
13class FocusStoreGtk {
14 public:
15  FocusStoreGtk();
16
17  virtual ~FocusStoreGtk();
18
19  GtkWidget* widget() const { return widget_; }
20
21  // Save the widget that is currently focused for |widget|'s toplevel (NOT
22  // |widget|).
23  void Store(GtkWidget* widget);
24
25  // Save |widget| as the focus widget. Call with NULL to clear |widget_|.
26  void SetWidget(GtkWidget* widget);
27
28 private:
29  // Disconnect the previous destroy handler (if any).
30  void DisconnectDestroyHandler();
31
32  // The widget which last had focus.
33  GtkWidget* widget_;
34
35  // The widget for which we've stored focus might be destroyed by the time we
36  // want to restore focus. Thus we connect to the "destroy" signal on that
37  // widget. This is the ID for the destroy handler.
38  unsigned int destroy_handler_id_;
39
40  DISALLOW_COPY_AND_ASSIGN(FocusStoreGtk);
41};
42
43#endif  // CHROME_BROWSER_UI_GTK_FOCUS_STORE_GTK_H_
44