diff --git a/atom.gyp b/atom.gyp index 53e4a49906..58b7523699 100644 --- a/atom.gyp +++ b/atom.gyp @@ -129,18 +129,10 @@ 'atom/browser/ui/file_dialog_gtk.cc', 'atom/browser/ui/file_dialog_mac.mm', 'atom/browser/ui/file_dialog_win.cc', - 'atom/browser/ui/gtk/active_window_watcher_x.cc', - 'atom/browser/ui/gtk/active_window_watcher_x.h', - 'atom/browser/ui/gtk/active_window_watcher_x_observer.h', 'atom/browser/ui/gtk/app_indicator_icon.cc', 'atom/browser/ui/gtk/app_indicator_icon.h', - 'atom/browser/ui/gtk/root_window_property_watcher_x.cc', - 'atom/browser/ui/gtk/root_window_property_watcher_x.h', 'atom/browser/ui/gtk/status_icon.cc', 'atom/browser/ui/gtk/status_icon.h', - 'atom/browser/ui/gtk/work_area_watcher_x.cc', - 'atom/browser/ui/gtk/work_area_watcher_x.h', - 'atom/browser/ui/gtk/x11_util.cc', 'atom/browser/ui/message_box.h', 'atom/browser/ui/message_box_gtk.cc', 'atom/browser/ui/message_box_mac.mm', @@ -230,27 +222,41 @@ 'atom/renderer/atom_render_view_observer.h', 'atom/renderer/atom_renderer_client.cc', 'atom/renderer/atom_renderer_client.h', - 'chrome/browser/ui/gtk/event_utils.cc', - 'chrome/browser/ui/gtk/event_utils.h', - 'chrome/browser/ui/gtk/gtk_custom_menu.cc', - 'chrome/browser/ui/gtk/gtk_custom_menu.h', - 'chrome/browser/ui/gtk/gtk_custom_menu_item.cc', - 'chrome/browser/ui/gtk/gtk_custom_menu_item.h', - 'chrome/browser/ui/gtk/gtk_util.cc', - 'chrome/browser/ui/gtk/gtk_util.h', - 'chrome/browser/ui/gtk/gtk_window_util.cc', - 'chrome/browser/ui/gtk/gtk_window_util.h', - 'chrome/browser/ui/gtk/menu_gtk.cc', - 'chrome/browser/ui/gtk/menu_gtk.h', - 'chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc', - 'chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h', - 'chrome/browser/ui/libgtk2ui/gtk2_signal.h', - 'chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc', - 'chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h', - 'chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc', - 'chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h', - 'chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc', - 'chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h', + 'chromium_src/chrome/browser/ui/gtk/event_utils.cc', + 'chromium_src/chrome/browser/ui/gtk/event_utils.h', + 'chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.cc', + 'chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.h', + 'chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.cc', + 'chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.h', + 'chromium_src/chrome/browser/ui/gtk/gtk_util.cc', + 'chromium_src/chrome/browser/ui/gtk/gtk_util.h', + 'chromium_src/chrome/browser/ui/gtk/gtk_window_util.cc', + 'chromium_src/chrome/browser/ui/gtk/gtk_window_util.h', + 'chromium_src/chrome/browser/ui/gtk/menu_gtk.cc', + 'chromium_src/chrome/browser/ui/gtk/menu_gtk.h', + 'chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc', + 'chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h', + 'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal.h', + 'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc', + 'chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h', + 'chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc', + 'chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h', + 'chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc', + 'chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h', + 'chromium_src/ui/base/accelerators/platform_accelerator_gtk.cc', + 'chromium_src/ui/base/accelerators/platform_accelerator_gtk.h', + 'chromium_src/ui/base/x/active_window_watcher_x.cc', + 'chromium_src/ui/base/x/active_window_watcher_x.h', + 'chromium_src/ui/base/x/active_window_watcher_x_observer.h', + 'chromium_src/ui/base/x/root_window_property_watcher_x.cc', + 'chromium_src/ui/base/x/root_window_property_watcher_x.h', + 'chromium_src/ui/base/x/work_area_watcher_x.cc', + 'chromium_src/ui/base/x/work_area_watcher_x.h', + 'chromium_src/ui/base/x/x11_util.cc', + 'chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.cc', + 'chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.h', + 'chromium_src/ui/gfx/gfx_gtk_util.cc', + 'chromium_src/ui/gfx/gtk_util.h', '<@(native_mate_files)', ], 'framework_sources': [ @@ -442,6 +448,7 @@ ], 'include_dirs': [ '.', + 'chromium_src', 'vendor/brightray', 'vendor/native_mate', # Include directories for uv and node. diff --git a/atom/browser/native_window_gtk.cc b/atom/browser/native_window_gtk.cc index 19c61c68b1..6fb4b5fdd4 100644 --- a/atom/browser/native_window_gtk.cc +++ b/atom/browser/native_window_gtk.cc @@ -7,7 +7,6 @@ #include #include -#include "atom/browser/ui/gtk/active_window_watcher_x.h" #include "atom/common/draggable_region.h" #include "atom/common/options_switches.h" #include "base/environment.h" @@ -21,6 +20,7 @@ #include "native_mate/dictionary.h" #include "ui/base/accelerators/platform_accelerator_gtk.h" #include "ui/base/models/simple_menu_model.h" +#include "ui/base/x/active_window_watcher_x.h" #include "ui/base/x/x11_util.h" #include "ui/gfx/font_render_params_linux.h" #include "ui/gfx/gtk_util.h" diff --git a/chrome/LICENSE.chromium b/chromium_src/LICENSE.chromium similarity index 100% rename from chrome/LICENSE.chromium rename to chromium_src/LICENSE.chromium diff --git a/chrome/browser/ui/gtk/event_utils.cc b/chromium_src/chrome/browser/ui/gtk/event_utils.cc similarity index 100% rename from chrome/browser/ui/gtk/event_utils.cc rename to chromium_src/chrome/browser/ui/gtk/event_utils.cc diff --git a/chrome/browser/ui/gtk/event_utils.h b/chromium_src/chrome/browser/ui/gtk/event_utils.h similarity index 100% rename from chrome/browser/ui/gtk/event_utils.h rename to chromium_src/chrome/browser/ui/gtk/event_utils.h diff --git a/chrome/browser/ui/gtk/gtk_custom_menu.cc b/chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.cc similarity index 100% rename from chrome/browser/ui/gtk/gtk_custom_menu.cc rename to chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.cc diff --git a/chrome/browser/ui/gtk/gtk_custom_menu.h b/chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.h similarity index 100% rename from chrome/browser/ui/gtk/gtk_custom_menu.h rename to chromium_src/chrome/browser/ui/gtk/gtk_custom_menu.h diff --git a/chrome/browser/ui/gtk/gtk_custom_menu_item.cc b/chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.cc similarity index 100% rename from chrome/browser/ui/gtk/gtk_custom_menu_item.cc rename to chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.cc diff --git a/chrome/browser/ui/gtk/gtk_custom_menu_item.h b/chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.h similarity index 100% rename from chrome/browser/ui/gtk/gtk_custom_menu_item.h rename to chromium_src/chrome/browser/ui/gtk/gtk_custom_menu_item.h diff --git a/chrome/browser/ui/gtk/gtk_util.cc b/chromium_src/chrome/browser/ui/gtk/gtk_util.cc similarity index 100% rename from chrome/browser/ui/gtk/gtk_util.cc rename to chromium_src/chrome/browser/ui/gtk/gtk_util.cc diff --git a/chrome/browser/ui/gtk/gtk_util.h b/chromium_src/chrome/browser/ui/gtk/gtk_util.h similarity index 100% rename from chrome/browser/ui/gtk/gtk_util.h rename to chromium_src/chrome/browser/ui/gtk/gtk_util.h diff --git a/chrome/browser/ui/gtk/gtk_window_util.cc b/chromium_src/chrome/browser/ui/gtk/gtk_window_util.cc similarity index 100% rename from chrome/browser/ui/gtk/gtk_window_util.cc rename to chromium_src/chrome/browser/ui/gtk/gtk_window_util.cc diff --git a/chrome/browser/ui/gtk/gtk_window_util.h b/chromium_src/chrome/browser/ui/gtk/gtk_window_util.h similarity index 100% rename from chrome/browser/ui/gtk/gtk_window_util.h rename to chromium_src/chrome/browser/ui/gtk/gtk_window_util.h diff --git a/chrome/browser/ui/gtk/menu_gtk.cc b/chromium_src/chrome/browser/ui/gtk/menu_gtk.cc similarity index 100% rename from chrome/browser/ui/gtk/menu_gtk.cc rename to chromium_src/chrome/browser/ui/gtk/menu_gtk.cc diff --git a/chrome/browser/ui/gtk/menu_gtk.h b/chromium_src/chrome/browser/ui/gtk/menu_gtk.h similarity index 100% rename from chrome/browser/ui/gtk/menu_gtk.h rename to chromium_src/chrome/browser/ui/gtk/menu_gtk.h diff --git a/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc b/chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc similarity index 100% rename from chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc rename to chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.cc diff --git a/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h b/chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h similarity index 100% rename from chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h rename to chromium_src/chrome/browser/ui/libgtk2ui/g_object_destructor_filo.h diff --git a/chrome/browser/ui/libgtk2ui/gtk2_signal.h b/chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal.h similarity index 100% rename from chrome/browser/ui/libgtk2ui/gtk2_signal.h rename to chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal.h diff --git a/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc b/chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc similarity index 100% rename from chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc rename to chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.cc diff --git a/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h b/chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h similarity index 100% rename from chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h rename to chromium_src/chrome/browser/ui/libgtk2ui/gtk2_signal_registrar.h diff --git a/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc b/chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc similarity index 100% rename from chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc rename to chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.cc diff --git a/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h b/chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h similarity index 100% rename from chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h rename to chromium_src/chrome/browser/ui/libgtk2ui/skia_utils_gtk2.h diff --git a/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc b/chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc similarity index 100% rename from chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc rename to chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.cc diff --git a/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h b/chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h similarity index 100% rename from chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h rename to chromium_src/chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h diff --git a/chromium_src/ui/base/accelerators/platform_accelerator_gtk.cc b/chromium_src/ui/base/accelerators/platform_accelerator_gtk.cc new file mode 100644 index 0000000000..5662452a53 --- /dev/null +++ b/chromium_src/ui/base/accelerators/platform_accelerator_gtk.cc @@ -0,0 +1,93 @@ +// Copyright (c) 2012 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 "ui/base/accelerators/platform_accelerator_gtk.h" + +#include "ui/events/keycodes/keyboard_code_conversion_gtk.h" + +namespace ui { + +namespace { + +int GdkModifierToEventFlag(GdkModifierType gdk_modifier) { + int event_flags = 0; + if (gdk_modifier & GDK_SHIFT_MASK) + event_flags |= EF_SHIFT_DOWN; + if (gdk_modifier & GDK_CONTROL_MASK) + event_flags |= EF_CONTROL_DOWN; + if (gdk_modifier & GDK_MOD1_MASK) + event_flags |= EF_ALT_DOWN; + return event_flags; +} + +GdkModifierType EventFlagToGdkModifier(int event_flag) { + int modifier = 0; + if (event_flag & EF_SHIFT_DOWN) + modifier |= GDK_SHIFT_MASK; + if (event_flag & EF_CONTROL_DOWN) + modifier |= GDK_CONTROL_MASK; + if (event_flag & EF_ALT_DOWN) + modifier |= GDK_MOD1_MASK; + return static_cast(modifier); +} + +} // namespace + +PlatformAcceleratorGtk::PlatformAcceleratorGtk() + : gdk_key_code_(0), + gdk_modifier_(static_cast(0)) { +} + +PlatformAcceleratorGtk::PlatformAcceleratorGtk(guint gdk_key_code, + GdkModifierType gdk_modifier) + : gdk_key_code_(gdk_key_code), + gdk_modifier_(gdk_modifier) { +} + +PlatformAcceleratorGtk::~PlatformAcceleratorGtk() { +} + +scoped_ptr PlatformAcceleratorGtk::CreateCopy() const { + scoped_ptr copy(new PlatformAcceleratorGtk); + copy->gdk_key_code_ = gdk_key_code_; + copy->gdk_modifier_ = gdk_modifier_; + return scoped_ptr(copy.release()); +} + +bool PlatformAcceleratorGtk::Equals(const PlatformAccelerator& rhs) const { + const PlatformAcceleratorGtk& rhs_gtk = + static_cast(rhs); + return gdk_key_code_ == rhs_gtk.gdk_key_code_ && + gdk_modifier_ == rhs_gtk.gdk_modifier_; +} + +Accelerator AcceleratorForGdkKeyCodeAndModifier(guint gdk_key_code, + GdkModifierType gdk_modifier) { + ui::Accelerator accelerator(ui::WindowsKeyCodeForGdkKeyCode(gdk_key_code), + ui::GdkModifierToEventFlag(gdk_modifier)); + scoped_ptr platform_accelerator( + new PlatformAcceleratorGtk(gdk_key_code, gdk_modifier)); + accelerator.set_platform_accelerator(platform_accelerator.Pass()); + return accelerator; +} + +guint GetGdkKeyCodeForAccelerator(const Accelerator& accelerator) { + if (accelerator.platform_accelerator()) { + return static_cast( + accelerator.platform_accelerator())->gdk_key_code(); + } + // The second parameter is false because accelerator keys are expressed in + // terms of the non-shift-modified key. + return GdkKeyCodeForWindowsKeyCode(accelerator.key_code(), false); +} + +GdkModifierType GetGdkModifierForAccelerator(const Accelerator& accelerator) { + if (accelerator.platform_accelerator()) { + return static_cast( + accelerator.platform_accelerator())->gdk_modifier(); + } + return EventFlagToGdkModifier(accelerator.modifiers()); +} + +} // namespace ui diff --git a/chromium_src/ui/base/accelerators/platform_accelerator_gtk.h b/chromium_src/ui/base/accelerators/platform_accelerator_gtk.h new file mode 100644 index 0000000000..59c8fa0744 --- /dev/null +++ b/chromium_src/ui/base/accelerators/platform_accelerator_gtk.h @@ -0,0 +1,49 @@ +// Copyright (c) 2012 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. + +#ifndef UI_BASE_ACCELERATORS_PLATFORM_ACCELERATOR_GTK_H_ +#define UI_BASE_ACCELERATORS_PLATFORM_ACCELERATOR_GTK_H_ + +#include + +#include "base/compiler_specific.h" +#include "ui/base/accelerators/accelerator.h" +#include "ui/base/accelerators/platform_accelerator.h" + +namespace ui { + +class Accelerator; + +// This is a GTK specific class for specifing accelerator keys. +class UI_BASE_EXPORT PlatformAcceleratorGtk : public PlatformAccelerator { + public: + PlatformAcceleratorGtk(); + PlatformAcceleratorGtk(guint gdk_key_code, GdkModifierType gdk_modifier); + virtual ~PlatformAcceleratorGtk(); + + // PlatformAccelerator: + virtual scoped_ptr CreateCopy() const OVERRIDE; + virtual bool Equals(const PlatformAccelerator& rhs) const OVERRIDE; + + guint gdk_key_code() const { return gdk_key_code_; } + GdkModifierType gdk_modifier() const { return gdk_modifier_; } + + private: + guint gdk_key_code_; + GdkModifierType gdk_modifier_; + + DISALLOW_COPY_AND_ASSIGN(PlatformAcceleratorGtk); +}; + +UI_BASE_EXPORT Accelerator AcceleratorForGdkKeyCodeAndModifier( + guint gdk_key_code, + GdkModifierType gdk_modifier); +UI_BASE_EXPORT guint + GetGdkKeyCodeForAccelerator(const Accelerator& accelerator); +UI_BASE_EXPORT GdkModifierType GetGdkModifierForAccelerator( + const Accelerator& accelerator); + +} // namespace ui + +#endif // UI_BASE_ACCELERATORS_PLATFORM_ACCELERATOR_GTK_H_ diff --git a/atom/browser/ui/gtk/active_window_watcher_x.cc b/chromium_src/ui/base/x/active_window_watcher_x.cc similarity index 94% rename from atom/browser/ui/gtk/active_window_watcher_x.cc rename to chromium_src/ui/base/x/active_window_watcher_x.cc index 937f161fa3..9d3e791fd5 100644 --- a/atom/browser/ui/gtk/active_window_watcher_x.cc +++ b/chromium_src/ui/base/x/active_window_watcher_x.cc @@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "atom/browser/ui/gtk/active_window_watcher_x.h" +#include "ui/base/x/active_window_watcher_x.h" #include #include -#include "atom/browser/ui/gtk/active_window_watcher_x_observer.h" -#include "atom/browser/ui/gtk/root_window_property_watcher_x.h" #include "base/memory/singleton.h" +#include "ui/base/x/active_window_watcher_x_observer.h" +#include "ui/base/x/root_window_property_watcher_x.h" #include "ui/base/x/x11_util.h" #include "ui/gfx/gdk_compat.h" #include "ui/gfx/gtk_compat.h" diff --git a/atom/browser/ui/gtk/active_window_watcher_x.h b/chromium_src/ui/base/x/active_window_watcher_x.h similarity index 87% rename from atom/browser/ui/gtk/active_window_watcher_x.h rename to chromium_src/ui/base/x/active_window_watcher_x.h index 9e10bbb298..01f70f4c93 100644 --- a/atom/browser/ui/gtk/active_window_watcher_x.h +++ b/chromium_src/ui/base/x/active_window_watcher_x.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ATOM_BROWSER_UI_GTK_ACTIVE_WINDOW_WATCHER_X_H_ -#define ATOM_BROWSER_UI_GTK_ACTIVE_WINDOW_WATCHER_X_H_ +#ifndef UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_ +#define UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_ #include "base/basictypes.h" #include "base/observer_list.h" +#include "ui/base/ui_base_export.h" #include "ui/base/x/x11_util.h" template struct DefaultSingletonTraits; @@ -22,7 +23,7 @@ class RootWindowPropertyWatcherX; // This is a helper class that is used to keep track of which window the X // window manager thinks is active. Add an Observer to listen for changes to // the active window. -class ActiveWindowWatcherX { +class UI_BASE_EXPORT ActiveWindowWatcherX { public: static ActiveWindowWatcherX* GetInstance(); static void AddObserver(ActiveWindowWatcherXObserver* observer); @@ -56,4 +57,4 @@ class ActiveWindowWatcherX { } // namespace ui -#endif // ATOM_BROWSER_UI_GTK_ACTIVE_WINDOW_WATCHER_X_H_ +#endif // UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_ diff --git a/atom/browser/ui/gtk/active_window_watcher_x_observer.h b/chromium_src/ui/base/x/active_window_watcher_x_observer.h similarity index 87% rename from atom/browser/ui/gtk/active_window_watcher_x_observer.h rename to chromium_src/ui/base/x/active_window_watcher_x_observer.h index 47c677877b..4634f91333 100644 --- a/atom/browser/ui/gtk/active_window_watcher_x_observer.h +++ b/chromium_src/ui/base/x/active_window_watcher_x_observer.h @@ -7,9 +7,11 @@ #include +#include "ui/base/ui_base_export.h" + namespace ui { -class ActiveWindowWatcherXObserver { +class UI_BASE_EXPORT ActiveWindowWatcherXObserver { public: // |active_window| will be NULL if the active window isn't one of Chrome's. virtual void ActiveWindowChanged(GdkWindow* active_window) = 0; diff --git a/atom/browser/ui/gtk/root_window_property_watcher_x.cc b/chromium_src/ui/base/x/root_window_property_watcher_x.cc similarity index 91% rename from atom/browser/ui/gtk/root_window_property_watcher_x.cc rename to chromium_src/ui/base/x/root_window_property_watcher_x.cc index d0bf0876cd..dec47e2a1d 100644 --- a/atom/browser/ui/gtk/root_window_property_watcher_x.cc +++ b/chromium_src/ui/base/x/root_window_property_watcher_x.cc @@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "atom/browser/ui/gtk/root_window_property_watcher_x.h" +#include "ui/base/x/root_window_property_watcher_x.h" #include #include #include "base/memory/singleton.h" -#include "atom/browser/ui/gtk/active_window_watcher_x.h" -#include "atom/browser/ui/gtk/work_area_watcher_x.h" +#include "ui/base/x/active_window_watcher_x.h" +#include "ui/base/x/work_area_watcher_x.h" namespace ui { diff --git a/atom/browser/ui/gtk/root_window_property_watcher_x.h b/chromium_src/ui/base/x/root_window_property_watcher_x.h similarity index 84% rename from atom/browser/ui/gtk/root_window_property_watcher_x.h rename to chromium_src/ui/base/x/root_window_property_watcher_x.h index 3b60df49ad..76090162f7 100644 --- a/atom/browser/ui/gtk/root_window_property_watcher_x.h +++ b/chromium_src/ui/base/x/root_window_property_watcher_x.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ATOM_BROWSER_UI_GTK_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ -#define ATOM_BROWSER_UI_GTK_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ +#ifndef UI_BASE_X_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ +#define UI_BASE_X_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ #include @@ -13,7 +13,6 @@ template struct DefaultSingletonTraits; namespace ui { - namespace internal { // This class keeps track of changes to properties on the root window. This is @@ -37,7 +36,6 @@ class RootWindowPropertyWatcherX { }; } // namespace internal - } // namespace ui -#endif // ATOM_BROWSER_UI_GTK_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ +#endif // UI_BASE_X_ROOT_WINDOW_PROPERTY_WATCHER_X_H_ diff --git a/atom/browser/ui/gtk/work_area_watcher_x.cc b/chromium_src/ui/base/x/work_area_watcher_x.cc similarity index 91% rename from atom/browser/ui/gtk/work_area_watcher_x.cc rename to chromium_src/ui/base/x/work_area_watcher_x.cc index 3d045270ab..053b489901 100644 --- a/atom/browser/ui/gtk/work_area_watcher_x.cc +++ b/chromium_src/ui/base/x/work_area_watcher_x.cc @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "atom/browser/ui/gtk/work_area_watcher_x.h" +#include "ui/base/x/work_area_watcher_x.h" #include "base/memory/singleton.h" #include "ui/base/work_area_watcher_observer.h" -#include "atom/browser/ui/gtk/root_window_property_watcher_x.h" +#include "ui/base/x/root_window_property_watcher_x.h" #include "ui/base/x/x11_util.h" namespace ui { diff --git a/atom/browser/ui/gtk/work_area_watcher_x.h b/chromium_src/ui/base/x/work_area_watcher_x.h similarity index 86% rename from atom/browser/ui/gtk/work_area_watcher_x.h rename to chromium_src/ui/base/x/work_area_watcher_x.h index 56dbf014ac..96cbcaec11 100644 --- a/atom/browser/ui/gtk/work_area_watcher_x.h +++ b/chromium_src/ui/base/x/work_area_watcher_x.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ATOM_BROWSER_UI_GTK_WORK_AREA_WATCHER_X_H_ -#define ATOM_BROWSER_UI_GTK_WORK_AREA_WATCHER_X_H_ +#ifndef UI_BASE_X_WORK_AREA_WATCHER_X_H_ +#define UI_BASE_X_WORK_AREA_WATCHER_X_H_ #include "base/basictypes.h" #include "base/observer_list.h" +#include "ui/base/ui_base_export.h" #include "ui/base/x/x11_util.h" template struct DefaultSingletonTraits; @@ -21,7 +22,7 @@ class RootWindowPropertyWatcherX; // This is a helper class that is used to keep track of changes to work area. // Add an observer to track changes. -class WorkAreaWatcherX { +class UI_BASE_EXPORT WorkAreaWatcherX { public: static WorkAreaWatcherX* GetInstance(); static void AddObserver(WorkAreaWatcherObserver* observer); @@ -51,4 +52,4 @@ class WorkAreaWatcherX { } // namespace ui -#endif // ATOM_BROWSER_UI_GTK_WORK_AREA_WATCHER_X_H_ +#endif // UI_BASE_X_WORK_AREA_WATCHER_X_H_ diff --git a/atom/browser/ui/gtk/x11_util.cc b/chromium_src/ui/base/x/x11_util.cc similarity index 100% rename from atom/browser/ui/gtk/x11_util.cc rename to chromium_src/ui/base/x/x11_util.cc diff --git a/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.cc b/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.cc new file mode 100644 index 0000000000..9a396534e2 --- /dev/null +++ b/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.cc @@ -0,0 +1,85 @@ +// 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. + +/* + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * Copyright (C) 2007 Holger Hans Peter Freyther + * Copyright (C) 2008 Collabora, Ltd. All rights reserved. + * Copyright (C) 2008, 2009 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// WindowsKeyCodeForGdkKeyCode is copied from platform/gtk/KeyEventGtk.cpp + +#include "ui/events/keycodes/keyboard_code_conversion_gtk.h" + +#include +#include +#include + +#include "base/basictypes.h" +#include "build/build_config.h" +#include "ui/events/keycodes/keyboard_code_conversion_x.h" +#include "ui/events/keycodes/keyboard_codes_posix.h" + +namespace ui { + +KeyboardCode WindowsKeyCodeForGdkKeyCode(int keycode) { + // Gdk key codes (e.g. GDK_BackSpace) and X keysyms (e.g. XK_BackSpace) share + // the same values. + return KeyboardCodeFromXKeysym(keycode); +} + +int GdkKeyCodeForWindowsKeyCode(KeyboardCode keycode, bool shift) { + // Gdk key codes and X keysyms share the same values. + return XKeysymForWindowsKeyCode(keycode, shift); +} + +// Just in case, test whether Gdk key codes match X ones. +COMPILE_ASSERT(GDK_KP_0 == XK_KP_0, keycode_check); +COMPILE_ASSERT(GDK_A == XK_A, keycode_check); +COMPILE_ASSERT(GDK_Escape == XK_Escape, keycode_check); +COMPILE_ASSERT(GDK_F1 == XK_F1, keycode_check); +COMPILE_ASSERT(GDK_Kanji == XK_Kanji, keycode_check); +COMPILE_ASSERT(GDK_Page_Up == XK_Page_Up, keycode_check); +COMPILE_ASSERT(GDK_Tab == XK_Tab, keycode_check); +COMPILE_ASSERT(GDK_a == XK_a, keycode_check); +COMPILE_ASSERT(GDK_space == XK_space, keycode_check); + +int GdkNativeKeyCodeForWindowsKeyCode(KeyboardCode keycode, bool shift) { + int keyval = GdkKeyCodeForWindowsKeyCode(keycode, shift); + GdkKeymapKey* keys; + gint n_keys; + + int native_keycode = 0; + if (keyval && gdk_keymap_get_entries_for_keyval(0, keyval, &keys, &n_keys)) { + native_keycode = keys[0].keycode; + g_free(keys); + } + + return native_keycode; +} + +} // namespace ui diff --git a/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.h b/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.h new file mode 100644 index 0000000000..6258f4116c --- /dev/null +++ b/chromium_src/ui/events/keycodes/keyboard_code_conversion_gtk.h @@ -0,0 +1,58 @@ +// 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. + +/* + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * Copyright (C) 2007 Holger Hans Peter Freyther + * Copyright (C) 2008 Collabora, Ltd. All rights reserved. + * Copyright (C) 2008, 2009 Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// WindowsKeyCodeForGdkKeyCode is copied from platform/gtk/KeyEventGtk.cpp + +#ifndef UI_EVENTS_KEYCODES_KEYBOARD_CODE_CONVERSION_GTK_H_ +#define UI_EVENTS_KEYCODES_KEYBOARD_CODE_CONVERSION_GTK_H_ + +#include "ui/events/events_base_export.h" +#include "ui/events/keycodes/keyboard_codes_posix.h" + +typedef struct _GdkEventKey GdkEventKey; + +namespace ui { + +EVENTS_BASE_EXPORT KeyboardCode WindowsKeyCodeForGdkKeyCode(int keycode); + +EVENTS_BASE_EXPORT int GdkKeyCodeForWindowsKeyCode(KeyboardCode keycode, + bool shift); + +// For WebKit DRT testing: simulate the native keycode for the given +// input |keycode|. Return the native keycode. +EVENTS_BASE_EXPORT int GdkNativeKeyCodeForWindowsKeyCode(KeyboardCode keycode, + bool shift); + +} // namespace ui + +#endif // UI_EVENTS_KEYCODES_KEYBOARD_CODE_CONVERSION_GTK_H_ diff --git a/chromium_src/ui/gfx/gfx_gtk_util.cc b/chromium_src/ui/gfx/gfx_gtk_util.cc new file mode 100644 index 0000000000..d7ff53963a --- /dev/null +++ b/chromium_src/ui/gfx/gfx_gtk_util.cc @@ -0,0 +1,192 @@ +// Copyright (c) 2012 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 "ui/gfx/gtk_util.h" + +#include +#include +#include + +#include "base/basictypes.h" +#include "base/command_line.h" +#include "base/memory/scoped_ptr.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "third_party/skia/include/core/SkUnPreMultiply.h" +#include "ui/gfx/rect.h" + +namespace { + +// A process wide singleton that manages our usage of gdk cursors. +// gdk_cursor_new() hits the disk in several places and GdkCursor instances can +// be reused throughout the process. +class GdkCursorCache { + public: + GdkCursorCache() {} + ~GdkCursorCache() { + for (GdkCursorMap::iterator i(cursors_.begin()); i != cursors_.end(); ++i) { + gdk_cursor_unref(i->second); + } + cursors_.clear(); + } + + GdkCursor* GetCursorImpl(GdkCursorType type) { + GdkCursorMap::iterator it = cursors_.find(type); + GdkCursor* cursor = NULL; + if (it == cursors_.end()) { + cursor = gdk_cursor_new(type); + cursors_.insert(std::make_pair(type, cursor)); + } else { + cursor = it->second; + } + + // It is not necessary to add a reference here. The callers can ref the + // cursor if they need it for something. + return cursor; + } + + private: + typedef std::map GdkCursorMap; + GdkCursorMap cursors_; + + DISALLOW_COPY_AND_ASSIGN(GdkCursorCache); +}; + +} // namespace + +namespace gfx { + +static void CommonInitFromCommandLine(const CommandLine& command_line, + void (*init_func)(gint*, gchar***)) { + const std::vector& args = command_line.argv(); + int argc = args.size(); + scoped_ptr argv(new char *[argc + 1]); + for (size_t i = 0; i < args.size(); ++i) { + // TODO(piman@google.com): can gtk_init modify argv? Just being safe + // here. + argv[i] = strdup(args[i].c_str()); + } + argv[argc] = NULL; + char **argv_pointer = argv.get(); + + init_func(&argc, &argv_pointer); + for (size_t i = 0; i < args.size(); ++i) { + free(argv[i]); + } +} + +void GtkInitFromCommandLine(const CommandLine& command_line) { + CommonInitFromCommandLine(command_line, gtk_init); +} + +void GdkInitFromCommandLine(const CommandLine& command_line) { + CommonInitFromCommandLine(command_line, gdk_init); +} + +GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap& bitmap) { + if (bitmap.isNull()) + return NULL; + + SkAutoLockPixels lock_pixels(bitmap); + + int width = bitmap.width(); + int height = bitmap.height(); + + GdkPixbuf* pixbuf = gdk_pixbuf_new( + GDK_COLORSPACE_RGB, // The only colorspace gtk supports. + TRUE, // There is an alpha channel. + 8, + width, height); + + // SkBitmaps are premultiplied, we need to unpremultiply them. + const int kBytesPerPixel = 4; + uint8* divided = gdk_pixbuf_get_pixels(pixbuf); + + for (int y = 0, i = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + uint32 pixel = bitmap.getAddr32(0, y)[x]; + + int alpha = SkColorGetA(pixel); + if (alpha != 0 && alpha != 255) { + SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(pixel); + divided[i + 0] = SkColorGetR(unmultiplied); + divided[i + 1] = SkColorGetG(unmultiplied); + divided[i + 2] = SkColorGetB(unmultiplied); + divided[i + 3] = alpha; + } else { + divided[i + 0] = SkColorGetR(pixel); + divided[i + 1] = SkColorGetG(pixel); + divided[i + 2] = SkColorGetB(pixel); + divided[i + 3] = alpha; + } + i += kBytesPerPixel; + } + } + + return pixbuf; +} + +void SubtractRectanglesFromRegion(GdkRegion* region, + const std::vector& cutouts) { + for (size_t i = 0; i < cutouts.size(); ++i) { + GdkRectangle rect = { + cutouts[i].x(), cutouts[i].y(), cutouts[i].width(), cutouts[i].height() + }; + GdkRegion* rect_region = gdk_region_rectangle(&rect); + gdk_region_subtract(region, rect_region); + // TODO(deanm): It would be nice to be able to reuse the GdkRegion here. + gdk_region_destroy(rect_region); + } +} + +GdkCursor* GetCursor(int type) { + CR_DEFINE_STATIC_LOCAL(GdkCursorCache, impl, ()); + return impl.GetCursorImpl(static_cast(type)); +} + +void InitRCStyles() { + static const char kRCText[] = + // Make our dialogs styled like the GNOME HIG. + // + // TODO(evanm): content-area-spacing was introduced in a later + // version of GTK, so we need to set that manually on all dialogs. + // Perhaps it would make sense to have a shared FixupDialog() function. + "style \"gnome-dialog\" {\n" + " xthickness = 12\n" + " GtkDialog::action-area-border = 0\n" + " GtkDialog::button-spacing = 6\n" + " GtkDialog::content-area-spacing = 18\n" + " GtkDialog::content-area-border = 12\n" + "}\n" + // Note we set it at the "application" priority, so users can override. + "widget \"GtkDialog\" style : application \"gnome-dialog\"\n" + + // Make our about dialog special, so the image is flush with the edge. + "style \"about-dialog\" {\n" + " GtkDialog::action-area-border = 12\n" + " GtkDialog::button-spacing = 6\n" + " GtkDialog::content-area-spacing = 18\n" + " GtkDialog::content-area-border = 0\n" + "}\n" + "widget \"about-dialog\" style : application \"about-dialog\"\n"; + + gtk_rc_parse_string(kRCText); +} + +base::TimeDelta GetCursorBlinkCycle() { + // From http://library.gnome.org/devel/gtk/unstable/GtkSettings.html, this is + // the default value for gtk-cursor-blink-time. + static const gint kGtkDefaultCursorBlinkTime = 1200; + + gint cursor_blink_time = kGtkDefaultCursorBlinkTime; + gboolean cursor_blink = TRUE; + g_object_get(gtk_settings_get_default(), + "gtk-cursor-blink-time", &cursor_blink_time, + "gtk-cursor-blink", &cursor_blink, + NULL); + return cursor_blink ? + base::TimeDelta::FromMilliseconds(cursor_blink_time) : + base::TimeDelta(); +} + +} // namespace gfx diff --git a/chromium_src/ui/gfx/gtk_util.h b/chromium_src/ui/gfx/gtk_util.h new file mode 100644 index 0000000000..7607603f63 --- /dev/null +++ b/chromium_src/ui/gfx/gtk_util.h @@ -0,0 +1,55 @@ +// Copyright (c) 2012 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. + +#ifndef UI_GFX_GTK_UTIL_H_ +#define UI_GFX_GTK_UTIL_H_ + +#include + +#include "base/time/time.h" +#include "ui/gfx/gfx_export.h" + +typedef struct _GdkPixbuf GdkPixbuf; +typedef struct _GdkRegion GdkRegion; +typedef struct _GdkCursor GdkCursor; + +class SkBitmap; + +namespace base { +class CommandLine; +} + +namespace gfx { + +class Rect; + +// Call gtk_init() / gdk_init() using the argc and argv from command_line. +// These init functions want an argc and argv that they can mutate; we provide +// those, but leave the original CommandLine unaltered. +GFX_EXPORT void GtkInitFromCommandLine(const base::CommandLine& command_line); +GFX_EXPORT void GdkInitFromCommandLine(const base::CommandLine& command_line); + +// Convert and copy a SkBitmap to a GdkPixbuf. NOTE: this uses BGRAToRGBA, so +// it is an expensive operation. The returned GdkPixbuf will have a refcount of +// 1, and the caller is responsible for unrefing it when done. +GFX_EXPORT GdkPixbuf* GdkPixbufFromSkBitmap(const SkBitmap& bitmap); + +// Modify the given region by subtracting the given rectangles. +GFX_EXPORT void SubtractRectanglesFromRegion(GdkRegion* region, + const std::vector& cutouts); + +// Returns a static instance of a GdkCursor* object, sharable across the +// process. Caller must gdk_cursor_ref() it if they want to assume ownership. +GFX_EXPORT GdkCursor* GetCursor(int type); + +// Initialize some GTK settings so that our dialogs are consistent. +GFX_EXPORT void InitRCStyles(); + +// Queries GtkSettings for the cursor blink cycle time. Returns a 0 duration if +// blinking is disabled. +GFX_EXPORT base::TimeDelta GetCursorBlinkCycle(); + +} // namespace gfx + +#endif // UI_GFX_GTK_UTIL_H_ diff --git a/docs/development/source-code-directory-structure.md b/docs/development/source-code-directory-structure.md index 9f5725e842..01e84d7b0b 100644 --- a/docs/development/source-code-directory-structure.md +++ b/docs/development/source-code-directory-structure.md @@ -38,7 +38,7 @@ to understand the source code better. * **api** - The implementation of common APIs, and foundations of atom-shell's built-in modules. * **lib** - Javascript part of the API implementation. -* **chrome** - Source code modified from Chromium's `chrome` component. +* **chromium_src** - Source code that copied from Chromium. * **docs** - Documentations. * **spec** - Automatic tests. * **atom.gyp** - Building rules of atom-shell.