diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 00:19:04 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 00:19:04 +0000 |
commit | 736d1898191dc530e603a996d8c4bf2415326aa7 (patch) | |
tree | 79c524d49f164c8c970b119279be072aaaaee91d /chrome/browser/ui/gtk/view_id_util.cc | |
parent | 2dee6d5003f0d5a9fffd55856b9f54b404988cab (diff) | |
download | chromium_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.cc | 139 |
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); +} |