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