summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/gtk/view_id_util.cc
diff options
context:
space:
mode:
authormsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-14 00:19:04 +0000
committermsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-14 00:19:04 +0000
commit736d1898191dc530e603a996d8c4bf2415326aa7 (patch)
tree79c524d49f164c8c970b119279be072aaaaee91d /chrome/browser/ui/gtk/view_id_util.cc
parent2dee6d5003f0d5a9fffd55856b9f54b404988cab (diff)
downloadchromium_src-736d1898191dc530e603a996d8c4bf2415326aa7.zip
chromium_src-736d1898191dc530e603a996d8c4bf2415326aa7.tar.gz
chromium_src-736d1898191dc530e603a996d8c4bf2415326aa7.tar.bz2
Move chrome/browser/gtk/ to chrome/browser/ui/gtk/
(moved *.cc using 'svn mv' to preserve history) (copied *.h using 'svn cp' to preserve history and stub out originals) Stubbed out original headers in chrome/browser/gtk/ Update header guards & copyright dates in chrome/browser/ui/gtk/ Update .gypi files Remove chrome/chrome_browser.gypi:4228 reference to nonexistant: ['include', '^browser/gtk/pk11_password_dialog.h'], Remove stray header guard in: chrome/browser/ui/gtk/bookmark_bar_instructions_gtk.cc Add #pragma once to the following files: chrome/browser/ui/gtk/instant_confirm_dialog_gtk.h chrome/browser/ui/gtk/infobar_arrow_model.h Ran the following to appease presubmit: 'svn pset svn:eol-style LF \ chrome/browser/ui/gtk/info_bubble_accelerators_gtk.cc \ chrome/browser/ui/gtk/gtk_custom_menu.cc \ chrome/browser/ui/gtk/info_bubble_accelerators_gtk.h \ chrome/browser/ui/gtk/gtk_custom_menu.h \ chrome/browser/ui/gtk/options/managed_prefs_banner_gtk.h \ chrome/browser/ui/gtk/chrome_gtk_frame.h \ chrome/browser/ui/gtk/chrome_gtk_frame.cc \ chrome/browser/ui/gtk/gtk_custom_menu_item.h \ chrome/browser/gtk/info_bubble_accelerators_gtk.h \ chrome/browser/gtk/gtk_custom_menu.h \ chrome/browser/gtk/options/managed_prefs_banner_gtk.h \ chrome/browser/gtk/chrome_gtk_frame.h \ chrome/browser/gtk/gtk_custom_menu_item.h' BUG=69289 TEST=Compile&Trybots Review URL: http://codereview.chromium.org/6251001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71397 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/gtk/view_id_util.cc')
-rw-r--r--chrome/browser/ui/gtk/view_id_util.cc139
1 files changed, 139 insertions, 0 deletions
diff --git a/chrome/browser/ui/gtk/view_id_util.cc b/chrome/browser/ui/gtk/view_id_util.cc
new file mode 100644
index 0000000..6e732bc
--- /dev/null
+++ b/chrome/browser/ui/gtk/view_id_util.cc
@@ -0,0 +1,139 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/gtk/view_id_util.h"
+
+#include <stdint.h>
+#include <string>
+
+#include <gtk/gtk.h>
+
+#include "base/logging.h"
+
+namespace {
+
+const char kViewIDString[] = "__VIEW_ID__";
+const char kViewIDOverrideString[] = "__VIEW_ID_OVERRIDE__";
+
+struct ViewIDSearchStruct {
+ ViewID id; // Input: the ID we are searching for.
+ GtkWidget* widget; // Output: the found widget, or NULL.
+};
+
+// Recursively search for the given view ID among the children of |widget|.
+void SearchForWidgetWithViewID(GtkWidget* widget, gpointer data) {
+ ViewIDSearchStruct* search_struct =
+ reinterpret_cast<ViewIDSearchStruct*>(data);
+
+ // The widget has already been found; abort the search.
+ if (search_struct->widget)
+ return;
+
+ // Check if the widget defines its own ID function.
+ ViewIDUtil::Delegate* delegate = reinterpret_cast<ViewIDUtil::Delegate*>(
+ g_object_get_data(G_OBJECT(widget), kViewIDOverrideString));
+ if (delegate) {
+ search_struct->widget = delegate->GetWidgetForViewID(search_struct->id);
+ // If there was success, return.
+ if (search_struct->widget)
+ return;
+ }
+
+ // Otherwise check the g_object data.
+ int widget_id =
+ reinterpret_cast<intptr_t>(g_object_get_data(G_OBJECT(widget),
+ kViewIDString));
+ if (search_struct->id == widget_id) {
+ // Success; set |widget| and return.
+ search_struct->widget = widget;
+ return;
+ }
+
+ // Recurse.
+ if (GTK_IS_CONTAINER(widget)) {
+ gtk_container_foreach(GTK_CONTAINER(widget),
+ SearchForWidgetWithViewID, data);
+ }
+}
+
+const char* GetNameFromID(ViewID id) {
+ switch (id) {
+ case VIEW_ID_TAB_STRIP:
+ return "chrome-tab-strip";
+
+ case VIEW_ID_TOOLBAR:
+ return "chrome-toolbar";
+
+ case VIEW_ID_BACK_BUTTON:
+ return "chrome-toolbar-back-button";
+
+ case VIEW_ID_FORWARD_BUTTON:
+ return "chrome-toolbar-forward-button";
+
+ case VIEW_ID_RELOAD_BUTTON:
+ return "chrome-toolbar-reload-button";
+
+ case VIEW_ID_HOME_BUTTON:
+ return "chrome-toolbar-home-button";
+
+ case VIEW_ID_STAR_BUTTON:
+ return "chrome-toolbar-star-button";
+
+ case VIEW_ID_LOCATION_BAR:
+ return "chrome-location-bar";
+
+ case VIEW_ID_BROWSER_ACTION_TOOLBAR:
+ return "chrome-toolbar-browser-actions-container";
+
+ case VIEW_ID_APP_MENU:
+ return "chrome-app-menu";
+
+ case VIEW_ID_AUTOCOMPLETE:
+ return "chrome-autocomplete-edit";
+
+ case VIEW_ID_BOOKMARK_BAR:
+ return "chrome-bookmark-bar";
+
+ case VIEW_ID_OTHER_BOOKMARKS:
+ return "chrome-bookmark-bar-other-bookmarks";
+
+ case VIEW_ID_FIND_IN_PAGE_TEXT_FIELD:
+ return "chrome-find-in-page-entry";
+
+ case VIEW_ID_FIND_IN_PAGE:
+ return "chrome-find-in-page";
+
+ case VIEW_ID_DEV_TOOLS_DOCKED:
+ return "chrome-dev-tools-docked";
+
+ // These are never hit because the tab container uses the delegate to
+ // set its ID.
+ case VIEW_ID_TAB_CONTAINER:
+ case VIEW_ID_TAB_CONTAINER_FOCUS_VIEW:
+ default:
+ NOTREACHED() << "If you added a new VIEW_ID, please provide "
+ "a name for the widget.";
+ return NULL;
+ }
+}
+
+} // namespace
+
+void ViewIDUtil::SetID(GtkWidget* widget, ViewID id) {
+ const char* name = GetNameFromID(id);
+ if (name)
+ gtk_widget_set_name(widget, name);
+ g_object_set_data(G_OBJECT(widget), kViewIDString,
+ reinterpret_cast<void*>(id));
+}
+
+GtkWidget* ViewIDUtil::GetWidget(GtkWidget* root, ViewID id) {
+ ViewIDSearchStruct search_struct = { id, NULL };
+ SearchForWidgetWithViewID(root, &search_struct);
+ return search_struct.widget;
+}
+
+void ViewIDUtil::SetDelegateForWidget(GtkWidget* widget, Delegate* delegate) {
+ g_object_set_data(G_OBJECT(widget), kViewIDOverrideString, delegate);
+}